diff --git a/DEPS b/DEPS index db213d3..771048f 100644 --- a/DEPS +++ b/DEPS
@@ -44,7 +44,7 @@ # 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': 'e677748719dec3f42367144bd6bd01ab701ab221', + 'v8_revision': 'bde4f053b5814d123e43d32d4a83650adbcd90e1', # 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. @@ -52,11 +52,11 @@ # 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': 'b36e5393d35bfa28c72d0b61d6ba2565725b99a0', + 'angle_revision': 'b8126691cf41f7f9bac3dbdf60e5af889d0de3a4', # 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. - 'buildtools_revision': '88811f48a6b79786ef35be86825642fc33011151', + 'buildtools_revision': '98f00fa10dbad2cdbb2e297a66c3d6d5bc3994f3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -72,7 +72,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': 'bc6a76b0e0ed252af1688423584f7cd9161f6dee', + 'boringssl_revision': '777fdd6443d5f01420b67137118febdf56a1c8e4', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -96,7 +96,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': '121ef2b4a8c6adbb65df758521fb4f80e78d1d2e', + 'catapult_revision': '6939b1db033bf35f4adf1ee55824b6edb3e324d6', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -838,15 +838,6 @@ '-o', 'src/build/util/LASTCHANGE'], }, { - # Update LASTCHANGE.blink. - 'name': 'lastchange_blink', - 'pattern': '.', - 'action': ['python', 'src/build/util/lastchange.py', - '--git-hash-only', - '-s', 'src/third_party/WebKit', - '-o', 'src/build/util/LASTCHANGE.blink'], - }, - { # Update skia_commit_hash.h. 'name': 'lastchange_skia', 'pattern': '.',
diff --git a/apps/OWNERS b/apps/OWNERS index 45afa65..6fd538e 100644 --- a/apps/OWNERS +++ b/apps/OWNERS
@@ -1,7 +1,6 @@ # Apps team members asargent@chromium.org benwells@chromium.org -mek@chromium.org tapted@chromium.org # app_shell team
diff --git a/ash/mus/window_manager_unittest.cc b/ash/mus/window_manager_unittest.cc index 3604021..1f64cebe 100644 --- a/ash/mus/window_manager_unittest.cc +++ b/ash/mus/window_manager_unittest.cc
@@ -18,6 +18,7 @@ #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/mus/window_tree_client_delegate.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/test/env_test_helper.h" #include "ui/aura/window.h" #include "ui/display/display.h" @@ -99,8 +100,8 @@ properties[ui::mojom::WindowManager::kWindowType_InitProperty] = mojo::ConvertTo<std::vector<uint8_t>>( static_cast<int32_t>(ui::mojom::WindowType::WINDOW)); - aura::WindowTreeHostMus window_tree_host_mus(&client, cc::FrameSinkId(), - &properties); + aura::WindowTreeHostMus window_tree_host_mus( + aura::CreateInitParamsForTopLevel(&client, std::move(properties))); window_tree_host_mus.InitHost(); aura::Window* child_window = new aura::Window(nullptr); child_window->Init(ui::LAYER_NOT_DRAWN);
diff --git a/base/mac/sdk_forward_declarations.h b/base/mac/sdk_forward_declarations.h index 2c3d506..86fac9c 100644 --- a/base/mac/sdk_forward_declarations.h +++ b/base/mac/sdk_forward_declarations.h
@@ -187,7 +187,6 @@ @interface NSObject (ElCapitanSDK) - (NSLayoutConstraint*)constraintEqualToConstant:(CGFloat)c; -- (NSLayoutConstraint*)constraintGreaterThanOrEqualToConstant:(CGFloat)c; @end @interface NSView (ElCapitanSDK) @@ -247,10 +246,6 @@ action:(SEL)action; @end -@interface NSApplication (SierraPointOneSDK) -@property BOOL automaticCustomizeTouchBarMenuItemEnabled; -@end - #endif // MAC_OS_X_VERSION_10_12_1 // ----------------------------------------------------------------------------
diff --git a/build/android/gradle/android.jinja b/build/android/gradle/android.jinja index c817f4f..850f2fb 100644 --- a/build/android/gradle/android.jinja +++ b/build/android/gradle/android.jinja
@@ -5,28 +5,34 @@ {% if variables is defined %} {{ prefix }} { manifest.srcFile "{{ variables.android_manifest }}" +{% if variables.java_dirs is defined %} java.srcDirs = [ {% for path in variables.java_dirs %} "{{ path }}", {% endfor %} ] -{% if variables.java_excludes %} +{% endif %} +{% if variables.java_excludes is defined %} java.filter.exclude( {% for path in variables.java_excludes %} "{{ path }}", {% endfor %} ) {% endif %} +{% if variables.jniLibs is defined %} jniLibs.srcDirs = [ {% for path in variables.jni_libs %} "{{ path }}", {% endfor %} ] +{% endif %} +{% if variables.res_dirs is defined %} res.srcDirs = [ {% for path in variables.res_dirs %} "{{ path }}", {% endfor %} ] +{% endif %} } {% endif %} {% endmacro %}
diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py index d57dfa9f..a1b0504b 100755 --- a/build/android/gradle/generate_gradle.py +++ b/build/android/gradle/generate_gradle.py
@@ -35,6 +35,9 @@ _JNI_LIBS_SUBDIR = 'symlinked-libs' _ARMEABI_SUBDIR = 'armeabi' _RES_SUBDIR = 'extracted-res' +_GRADLE_BUILD_FILE = 'build.gradle' +# This needs to come first alphabetically among all modules. +_MODULE_ALL = '_all' _DEFAULT_TARGETS = [ # TODO(agrieve): .build_config seem not quite right for this target @@ -245,6 +248,8 @@ self.use_gradle_process_resources = use_gradle_process_resources self.jinja_processor = jinja_processor self.split_projects = split_projects + self.processed_java_dirs = set() + self.processed_prebuilts = set() def _GenJniLibs(self, root_entry): libraries = [] @@ -334,24 +339,23 @@ # things up at all. variables = {} java_dirs, excludes = self._GenJavaDirs(root_entry) + java_dirs.append( + os.path.join(self.EntryOutputDir(root_entry), _SRCJARS_SUBDIR)) + self.processed_java_dirs.update(java_dirs) java_dirs.sort() variables['java_dirs'] = self._Relativize(root_entry, java_dirs) - variables['java_dirs'].append(_SRCJARS_SUBDIR) variables['java_excludes'] = excludes variables['jni_libs'] = self._Relativize( root_entry, set(self._GenJniLibs(root_entry))) - variables['prebuilts'] = [ - p for e in self._GetEntries(root_entry) for p in e.PrebuiltJars()] - variables['res_dirs'] = [ - p for e in self._GetEntries(root_entry) for p in e.ResDirs()] - for entry in self._GetEntries(root_entry): - variables['prebuilts'] += entry.PrebuiltJars() - variables['res_dirs'] += entry.ResDirs() - variables['prebuilts'] = self._Relativize( - root_entry, set(variables['prebuilts'])) - variables['res_dirs'] = self._Relativize( - root_entry, set(variables['res_dirs'])) - variables['res_dirs'].append(_RES_SUBDIR) + prebuilts = set( + p for e in self._GetEntries(root_entry) for p in e.PrebuiltJars()) + self.processed_prebuilts.update(prebuilts) + variables['prebuilts'] = self._Relativize(root_entry, prebuilts) + res_dirs = set( + p for e in self._GetEntries(root_entry) for p in e.ResDirs()) + res_dirs.add( + os.path.join(self.EntryOutputDir(root_entry), _RES_SUBDIR)) + variables['res_dirs'] = self._Relativize(root_entry, res_dirs) android_manifest = root_entry.Gradle().get('android_manifest') if not android_manifest: android_manifest = self._GenCustomManifest(root_entry) @@ -482,15 +486,26 @@ '']) -def _GenerateGradleFile(entry, generator, build_vars, jinja_processor): - """Returns the data for a project's build.gradle.""" - deps_info = entry.DepsInfo() - gradle = entry.Gradle() - +def _GenerateBaseVars(generator, build_vars, source_properties): variables = { 'sourceSetName': 'main', 'depCompileName': 'compile', } + variables['build_tools_version'] = source_properties['Pkg.Revision'] + variables['compile_sdk_version'] = ( + 'android-%s' % build_vars['android_sdk_version']) + variables['use_gradle_process_resources'] = ( + generator.use_gradle_process_resources) + return variables + + +def _GenerateGradleFile(entry, generator, build_vars, source_properties, + jinja_processor): + """Returns the data for a project's build.gradle.""" + deps_info = entry.DepsInfo() + gradle = entry.Gradle() + + variables = _GenerateBaseVars(generator, build_vars, source_properties) if deps_info['type'] == 'android_apk': target_type = 'android_apk' elif deps_info['type'] == 'java_library': @@ -513,14 +528,6 @@ variables['target_name'] = os.path.splitext(deps_info['name'])[0] variables['template_type'] = target_type - variables['use_gradle_process_resources'] = ( - generator.use_gradle_process_resources) - source_properties = _ReadPropertiesFile( - _RebasePath(os.path.join(build_vars['android_sdk_build_tools'], - 'source.properties'))) - variables['build_tools_version'] = source_properties['Pkg.Revision'] - variables['compile_sdk_version'] = ( - 'android-%s' % build_vars['android_sdk_version']) variables['main'] = generator.Generate(entry) bootclasspath = gradle.get('bootclasspath') if bootclasspath: @@ -531,13 +538,38 @@ entry.android_test_entry) for key, value in variables['android_test'].iteritems(): if isinstance(value, list): - variables['android_test'][key] = list( + variables['android_test'][key] = sorted( set(value) - set(variables['main'][key])) return jinja_processor.Render( _TemplatePath(target_type.split('_')[0]), variables) +def _GenerateModuleAll(gradle_output_dir, generator, build_vars, + source_properties, jinja_processor): + """Returns the data for a pseudo build.gradle of all dirs. + + See //docs/android_studio.md for more details.""" + variables = _GenerateBaseVars(generator, build_vars, source_properties) + target_type = 'android_apk' + variables['target_name'] = _MODULE_ALL + variables['template_type'] = target_type + java_dirs = sorted(generator.processed_java_dirs) + prebuilts = sorted(generator.processed_prebuilts) + def Relativize(paths): + return _RebasePath(paths, os.path.join(gradle_output_dir, _MODULE_ALL)) + variables['main'] = { + 'android_manifest': Relativize(_DEFAULT_ANDROID_MANIFEST_PATH), + 'java_dirs': Relativize(java_dirs), + 'prebuilts': Relativize(prebuilts), + 'java_excludes': ['**/*.java'], + } + data = jinja_processor.Render( + _TemplatePath(target_type.split('_')[0]), variables) + _WriteFile( + os.path.join(gradle_output_dir, _MODULE_ALL, _GRADLE_BUILD_FILE), data) + + def _GenerateRootGradle(jinja_processor): """Returns the data for the root project's build.gradle.""" return jinja_processor.Render(_TemplatePath('root')) @@ -552,6 +584,10 @@ lines.append('rootProject.projectDir = settingsDir') lines.append('') + lines.append('include ":{0}"'.format(_MODULE_ALL)) + lines.append( + 'project(":{0}").projectDir = new File(settingsDir, "{0}")'.format( + _MODULE_ALL)) for entry in project_entries: # Example target: android_webview:android_webview_java__build_config lines.append('include ":%s"' % entry.ProjectName()) @@ -662,14 +698,17 @@ run_tests_helper.SetLogLevel(args.verbose_count) # TODO(wnwen): Fix packaging so that gradle resources work in this case. - if args.use_gradle_process_resources: - assert args.split_projects, ( - 'Gradle resources does not yet work without --split-projects.') + if args.split_projects: + assert not args.use_gradle_process_resources, ( + 'Gradle resources does not work without --split-projects.') _gradle_output_dir = os.path.abspath( args.project_dir.replace('$CHROMIUM_OUTPUT_DIR', output_dir)) jinja_processor = jinja_template.JinjaProcessor(_FILE_DIR) build_vars = _ReadPropertiesFile(os.path.join(output_dir, 'build_vars.txt')) + source_properties = _ReadPropertiesFile( + _RebasePath(os.path.join(build_vars['android_sdk_build_tools'], + 'source.properties'))) generator = _ProjectContextGenerator(_gradle_output_dir, build_vars, args.use_gradle_process_resources, jinja_processor, args.split_projects) logging.warning('Creating project at: %s', generator.project_dir) @@ -696,7 +735,10 @@ # There are many unused libraries, so restrict to those that are actually used # when using --all. if args.all: - main_entries = [e for e in main_entries if e.GetType() == 'android_apk'] + main_entries = [e for e in main_entries if ( + e.GetType() == 'android_apk' or + e.GnTarget().endswith('_test_apk__apk') or + e.GnTarget().endswith('_junit_tests__java_binary'))] if args.split_projects: main_entries = _FindAllProjectEntries(main_entries) @@ -712,7 +754,8 @@ if entry.GetType() not in ('android_apk', 'java_library', 'java_binary'): continue - data = _GenerateGradleFile(entry, generator, build_vars, jinja_processor) + data = _GenerateGradleFile(entry, generator, build_vars, source_properties, + jinja_processor) if data: project_entries.append(entry) # Build all paths references by .gradle that exist within output_dir. @@ -724,9 +767,13 @@ (s, os.path.join(generator.EntryOutputDir(entry), _RES_SUBDIR)) for s in generator.AllResZips(entry)) _WriteFile( - os.path.join(generator.EntryOutputDir(entry), 'build.gradle'), data) + os.path.join(generator.EntryOutputDir(entry), _GRADLE_BUILD_FILE), + data) - _WriteFile(os.path.join(generator.project_dir, 'build.gradle'), + _GenerateModuleAll(_gradle_output_dir, generator, build_vars, + source_properties, jinja_processor) + + _WriteFile(os.path.join(generator.project_dir, _GRADLE_BUILD_FILE), _GenerateRootGradle(jinja_processor)) _WriteFile(os.path.join(generator.project_dir, 'settings.gradle'),
diff --git a/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn b/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn index 01f4c67..dc44fb1 100644 --- a/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn +++ b/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
@@ -189,6 +189,8 @@ "win/process_structs.h", "win/registration_protocol_win.cc", "win/registration_protocol_win.h", + "win/safe_terminate_process.asm", + "win/safe_terminate_process.h", "win/scoped_handle.cc", "win/scoped_handle.h", "win/scoped_local_alloc.cc",
diff --git a/build/util/BUILD.gn b/build/util/BUILD.gn index ad6f2ea..9f5a6f71 100644 --- a/build/util/BUILD.gn +++ b/build/util/BUILD.gn
@@ -5,7 +5,7 @@ action("webkit_version") { script = "version.py" - lastchange_file = "LASTCHANGE.blink" + lastchange_file = "LASTCHANGE" template_file = "webkit_version.h.in" inputs = [ @@ -19,6 +19,10 @@ ] args = [ + # LASTCHANGE contains "<build hash>-<ref>". The user agent only wants the + # "<build hash>" bit, so chop off everything after it. + "-e", + "LASTCHANGE=LASTCHANGE[:LASTCHANGE.find('-')]", "-f", rebase_path(lastchange_file, root_build_dir), rebase_path(template_file, root_build_dir),
diff --git a/build/util/lastchange.py b/build/util/lastchange.py index df4eeab..3324f31 100755 --- a/build/util/lastchange.py +++ b/build/util/lastchange.py
@@ -48,7 +48,7 @@ return None -def FetchGitRevision(directory, hash_only): +def FetchGitRevision(directory): """ Fetch the Git hash for a given directory. @@ -59,8 +59,6 @@ """ hsh = '' git_args = ['log', '-1', '--format=%H'] - if hash_only: - git_args.append('--grep=^Cr-Commit-Position:') proc = RunGitCommand(directory, git_args) if proc: output = proc.communicate()[0].strip() @@ -77,14 +75,11 @@ if line.startswith('Cr-Commit-Position:'): pos = line.rsplit()[-1].strip() break - if hash_only or not pos: - return VersionInfo('git', hsh) return VersionInfo('git', '%s-%s' % (hsh, pos)) def FetchVersionInfo(directory=None, - directory_regex_prior_to_src_url='chrome|blink|svn', - hash_only=False): + directory_regex_prior_to_src_url='chrome|svn'): """ Returns the last change (in the form of a branch, revision tuple), from some appropriate revision control system. @@ -92,7 +87,7 @@ svn_url_regex = re.compile( r'.*/(' + directory_regex_prior_to_src_url + r')(/.*)') - version_info = FetchGitRevision(directory, hash_only) + version_info = FetchGitRevision(directory) if not version_info: version_info = VersionInfo(None, None) return version_info @@ -173,9 +168,6 @@ "file-output-related options.") parser.add_option("-s", "--source-dir", metavar="DIR", help="Use repository in the given directory.") - parser.add_option("--git-hash-only", action="store_true", - help="In a Git repo with commit positions, report only " + - "the hash of the latest commit with a position.") opts, args = parser.parse_args(argv[1:]) out_file = opts.output @@ -194,8 +186,7 @@ else: src_dir = os.path.dirname(os.path.abspath(__file__)) - version_info = FetchVersionInfo(directory=src_dir, - hash_only=opts.git_hash_only) + version_info = FetchVersionInfo(directory=src_dir) if version_info.revision == None: version_info.revision = '0'
diff --git a/build/win/run_pgo_profiling_benchmarks.py b/build/win/run_pgo_profiling_benchmarks.py index 23134a2..2bff09d 100644 --- a/build/win/run_pgo_profiling_benchmarks.py +++ b/build/win/run_pgo_profiling_benchmarks.py
@@ -47,7 +47,6 @@ 'media.tough_video_cases', 'octane', 'smoothness.top_25_smooth', - 'speedometer', 'storage.indexeddb_endure_tracing', 'sunspider', }
diff --git a/cc/input/scrollbar_animation_controller.cc b/cc/input/scrollbar_animation_controller.cc index c018016c..223ab77 100644 --- a/cc/input/scrollbar_animation_controller.cc +++ b/cc/input/scrollbar_animation_controller.cc
@@ -13,19 +13,19 @@ std::unique_ptr<ScrollbarAnimationController> ScrollbarAnimationController::CreateScrollbarAnimationControllerAndroid( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta fade_out_delay, base::TimeDelta fade_out_resize_delay, base::TimeDelta fade_out_duration) { return base::WrapUnique(new ScrollbarAnimationController( - scroll_layer_id, client, fade_out_delay, fade_out_resize_delay, + scroll_element_id, client, fade_out_delay, fade_out_resize_delay, fade_out_duration)); } std::unique_ptr<ScrollbarAnimationController> ScrollbarAnimationController::CreateScrollbarAnimationControllerAuraOverlay( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta show_delay, base::TimeDelta fade_out_delay, @@ -33,12 +33,12 @@ base::TimeDelta fade_out_duration, base::TimeDelta thinning_duration) { return base::WrapUnique(new ScrollbarAnimationController( - scroll_layer_id, client, show_delay, fade_out_delay, + scroll_element_id, client, show_delay, fade_out_delay, fade_out_resize_delay, fade_out_duration, thinning_duration)); } ScrollbarAnimationController::ScrollbarAnimationController( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta fade_out_delay, base::TimeDelta fade_out_resize_delay, @@ -48,7 +48,7 @@ fade_out_resize_delay_(fade_out_resize_delay), need_trigger_scrollbar_show_(false), is_animating_(false), - scroll_layer_id_(scroll_layer_id), + scroll_element_id_(scroll_element_id), currently_scrolling_(false), show_in_fast_scroll_(false), opacity_(0.0f), @@ -60,7 +60,7 @@ } ScrollbarAnimationController::ScrollbarAnimationController( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta show_delay, base::TimeDelta fade_out_delay, @@ -73,7 +73,7 @@ fade_out_resize_delay_(fade_out_resize_delay), need_trigger_scrollbar_show_(false), is_animating_(false), - scroll_layer_id_(scroll_layer_id), + scroll_element_id_(scroll_element_id), currently_scrolling_(false), show_in_fast_scroll_(false), opacity_(0.0f), @@ -82,10 +82,10 @@ need_thinning_animation_(true), weak_factory_(this) { vertical_controller_ = SingleScrollbarAnimationControllerThinning::Create( - scroll_layer_id, ScrollbarOrientation::VERTICAL, client, + scroll_element_id, ScrollbarOrientation::VERTICAL, client, thinning_duration); horizontal_controller_ = SingleScrollbarAnimationControllerThinning::Create( - scroll_layer_id, ScrollbarOrientation::HORIZONTAL, client, + scroll_element_id, ScrollbarOrientation::HORIZONTAL, client, thinning_duration); ApplyOpacityToScrollbars(0.0f); } @@ -93,7 +93,7 @@ ScrollbarAnimationController::~ScrollbarAnimationController() {} ScrollbarSet ScrollbarAnimationController::Scrollbars() const { - return client_->ScrollbarsFor(scroll_layer_id_); + return client_->ScrollbarsFor(scroll_element_id_); } SingleScrollbarAnimationControllerThinning&
diff --git a/cc/input/scrollbar_animation_controller.h b/cc/input/scrollbar_animation_controller.h index d481eae..bf4ca7ef 100644 --- a/cc/input/scrollbar_animation_controller.h +++ b/cc/input/scrollbar_animation_controller.h
@@ -23,7 +23,7 @@ virtual void SetNeedsRedrawForScrollbarAnimation() = 0; virtual void SetNeedsAnimateForScrollbarAnimation() = 0; virtual void DidChangeScrollbarVisibility() = 0; - virtual ScrollbarSet ScrollbarsFor(int scroll_layer_id) const = 0; + virtual ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const = 0; protected: virtual ~ScrollbarAnimationControllerClient() {} @@ -41,7 +41,7 @@ // animation. static std::unique_ptr<ScrollbarAnimationController> CreateScrollbarAnimationControllerAndroid( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta fade_out_delay, base::TimeDelta fade_out_resize_delay, @@ -51,7 +51,7 @@ // fade out animation and thinning animation. static std::unique_ptr<ScrollbarAnimationController> CreateScrollbarAnimationControllerAuraOverlay( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta show_delay, base::TimeDelta fade_out_delay, @@ -96,13 +96,13 @@ static constexpr float kMouseMoveDistanceToTriggerShow = 30.0f; private: - ScrollbarAnimationController(int scroll_layer_id, + ScrollbarAnimationController(ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta fade_out_delay, base::TimeDelta fade_out_resize_delay, base::TimeDelta fade_out_duration); - ScrollbarAnimationController(int scroll_layer_id, + ScrollbarAnimationController(ElementId scroll_element_id, ScrollbarAnimationControllerClient* client, base::TimeDelta show_delay, base::TimeDelta fade_out_delay, @@ -148,7 +148,7 @@ bool is_animating_; - const int scroll_layer_id_; + const ElementId scroll_element_id_; bool currently_scrolling_; bool show_in_fast_scroll_;
diff --git a/cc/input/scrollbar_animation_controller_unittest.cc b/cc/input/scrollbar_animation_controller_unittest.cc index 7602601..9c2572a5 100644 --- a/cc/input/scrollbar_animation_controller_unittest.cc +++ b/cc/input/scrollbar_animation_controller_unittest.cc
@@ -44,8 +44,8 @@ } void SetNeedsRedrawForScrollbarAnimation() override {} void SetNeedsAnimateForScrollbarAnimation() override {} - ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override { - return host_impl_->ScrollbarsFor(scroll_layer_id); + ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const override { + return host_impl_->ScrollbarsFor(scroll_element_id); } MOCK_METHOD0(DidChangeScrollbarVisibility, void()); @@ -82,6 +82,8 @@ std::unique_ptr<LayerImpl> clip = LayerImpl::Create(host_impl_.active_tree(), 2); clip_layer_ = clip.get(); + scroll_layer->SetElementId( + LayerIdToElementIdForTesting(scroll_layer->id())); scroll_layer->SetScrollClipLayer(clip_layer_->id()); LayerImpl* scroll_layer_ptr = scroll_layer.get(); @@ -117,7 +119,7 @@ scrollbar_controller_ = ScrollbarAnimationController:: CreateScrollbarAnimationControllerAuraOverlay( - scroll_layer_ptr->id(), &client_, kShowDelay, kFadeOutDelay, + scroll_layer_ptr->element_id(), &client_, kShowDelay, kFadeOutDelay, kResizeFadeOutDelay, kFadeOutDuration, kThinningDuration); } @@ -1133,8 +1135,8 @@ void SetNeedsAnimateForScrollbarAnimation() override { did_request_animate_ = true; } - ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override { - return host_impl_.ScrollbarsFor(scroll_layer_id); + ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const override { + return host_impl_.ScrollbarsFor(scroll_element_id); } void DidChangeScrollbarVisibility() override {} @@ -1155,6 +1157,8 @@ std::unique_ptr<LayerImpl> clip = LayerImpl::Create(host_impl_.active_tree(), 3); clip_layer_ = clip.get(); + scroll_layer->SetElementId( + LayerIdToElementIdForTesting(scroll_layer->id())); scroll_layer->SetScrollClipLayer(clip_layer_->id()); LayerImpl* scroll_layer_ptr = scroll_layer.get(); scroll_layer->test_properties()->AddChild(std::move(scrollbar)); @@ -1169,8 +1173,9 @@ scrollbar_controller_ = ScrollbarAnimationController::CreateScrollbarAnimationControllerAndroid( - scroll_layer_ptr->id(), this, base::TimeDelta::FromSeconds(2), - base::TimeDelta::FromSeconds(5), base::TimeDelta::FromSeconds(3)); + scroll_layer_ptr->element_id(), this, + base::TimeDelta::FromSeconds(2), base::TimeDelta::FromSeconds(5), + base::TimeDelta::FromSeconds(3)); } virtual ScrollbarOrientation orientation() const { return HORIZONTAL; }
diff --git a/cc/input/single_scrollbar_animation_controller_thinning.cc b/cc/input/single_scrollbar_animation_controller_thinning.cc index d09dd05..f09756e 100644 --- a/cc/input/single_scrollbar_animation_controller_thinning.cc +++ b/cc/input/single_scrollbar_animation_controller_thinning.cc
@@ -17,23 +17,23 @@ std::unique_ptr<SingleScrollbarAnimationControllerThinning> SingleScrollbarAnimationControllerThinning::Create( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarOrientation orientation, ScrollbarAnimationControllerClient* client, base::TimeDelta thinning_duration) { return base::WrapUnique(new SingleScrollbarAnimationControllerThinning( - scroll_layer_id, orientation, client, thinning_duration)); + scroll_element_id, orientation, client, thinning_duration)); } SingleScrollbarAnimationControllerThinning:: SingleScrollbarAnimationControllerThinning( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarOrientation orientation, ScrollbarAnimationControllerClient* client, base::TimeDelta thinning_duration) : client_(client), is_animating_(false), - scroll_layer_id_(scroll_layer_id), + scroll_element_id_(scroll_element_id), orientation_(orientation), captured_(false), mouse_is_over_scrollbar_(false), @@ -179,8 +179,7 @@ void SingleScrollbarAnimationControllerThinning::ApplyThumbThicknessScale( float thumb_thickness_scale) { - for (ScrollbarLayerImplBase* scrollbar : - client_->ScrollbarsFor(scroll_layer_id_)) { + for (auto* scrollbar : client_->ScrollbarsFor(scroll_element_id_)) { if (scrollbar->orientation() != orientation_) continue; if (!scrollbar->is_overlay_scrollbar())
diff --git a/cc/input/single_scrollbar_animation_controller_thinning.h b/cc/input/single_scrollbar_animation_controller_thinning.h index 32ba069..f07806c 100644 --- a/cc/input/single_scrollbar_animation_controller_thinning.h +++ b/cc/input/single_scrollbar_animation_controller_thinning.h
@@ -26,7 +26,7 @@ static constexpr float kDefaultMouseMoveDistanceToTriggerAnimation = 25.f; static std::unique_ptr<SingleScrollbarAnimationControllerThinning> Create( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarOrientation orientation, ScrollbarAnimationControllerClient* client, base::TimeDelta thinning_duration); @@ -50,7 +50,7 @@ private: SingleScrollbarAnimationControllerThinning( - int scroll_layer_id, + ElementId scroll_element_id, ScrollbarOrientation orientation, ScrollbarAnimationControllerClient* client, base::TimeDelta thinning_duration); @@ -76,7 +76,7 @@ base::TimeTicks last_awaken_time_; bool is_animating_; - int scroll_layer_id_; + ElementId scroll_element_id_; ScrollbarOrientation orientation_; bool captured_;
diff --git a/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc b/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc index 87f9fe4..29c9d75 100644 --- a/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc +++ b/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc
@@ -35,8 +35,8 @@ : host_impl_(host_impl) {} virtual ~MockSingleScrollbarAnimationControllerClient() {} - ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override { - return host_impl_->ScrollbarsFor(scroll_layer_id); + ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const override { + return host_impl_->ScrollbarsFor(scroll_element_id); } MOCK_METHOD2(PostDelayedScrollbarAnimationTask, @@ -65,6 +65,8 @@ LayerImpl::Create(host_impl_.active_tree(), 1); std::unique_ptr<LayerImpl> clip = LayerImpl::Create(host_impl_.active_tree(), 3); + scroll_layer->SetElementId( + LayerIdToElementIdForTesting(scroll_layer->id())); clip_layer_ = clip.get(); scroll_layer->SetScrollClipLayer(clip_layer_->id()); LayerImpl* scroll_layer_ptr = scroll_layer.get(); @@ -93,7 +95,8 @@ host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); scrollbar_controller_ = SingleScrollbarAnimationControllerThinning::Create( - scroll_layer_ptr->id(), HORIZONTAL, &client_, kThinningDuration); + scroll_layer_ptr->element_id(), HORIZONTAL, &client_, + kThinningDuration); } FakeImplTaskRunnerProvider task_runner_provider_;
diff --git a/cc/layers/scrollbar_layer_unittest.cc b/cc/layers/scrollbar_layer_unittest.cc index 68613e8..c881682 100644 --- a/cc/layers/scrollbar_layer_unittest.cc +++ b/cc/layers/scrollbar_layer_unittest.cc
@@ -293,6 +293,7 @@ std::unique_ptr<Scrollbar> scrollbar(new FakeScrollbar); scoped_refptr<Layer> layer_tree_root = Layer::Create(); scoped_refptr<Layer> scroll_layer = Layer::Create(); + scroll_layer->SetElementId(LayerIdToElementIdForTesting(scroll_layer->id())); scoped_refptr<Layer> content_layer = Layer::Create(); scoped_refptr<Layer> scrollbar_layer = PaintedScrollbarLayer::Create( std::move(scrollbar), scroll_layer->id(), scroll_layer->element_id()); @@ -406,6 +407,7 @@ FakePaintedScrollbarLayer::Create(false, true, root_layer->id(), root_layer->element_id()); + root_layer->SetElementId(LayerIdToElementIdForTesting(root_layer->id())); root_layer->SetScrollClipLayerId(root_clip_layer->id()); // Give the root-clip a size that will result in MaxScrollOffset = (80, 0). root_clip_layer->SetBounds(gfx::Size(20, 50)); @@ -597,6 +599,7 @@ scoped_refptr<Layer> layer_tree_root = Layer::Create(); scoped_refptr<Layer> scroll_layer = Layer::Create(); + scroll_layer->SetElementId(LayerIdToElementIdForTesting(scroll_layer->id())); scroll_layer->SetScrollClipLayerId(layer_tree_root->id()); scoped_refptr<Layer> child1 = Layer::Create(); scoped_refptr<Layer> child2; @@ -732,6 +735,7 @@ scoped_refptr<Layer> layer_tree_root = Layer::Create(); scoped_refptr<Layer> scroll_layer = Layer::Create(); + scroll_layer->SetElementId(LayerIdToElementIdForTesting(scroll_layer->id())); scroll_layer->SetScrollClipLayerId(layer_tree_root->id()); scoped_refptr<Layer> child1 = Layer::Create(); scoped_refptr<Layer> scrollbar_layer; @@ -740,7 +744,6 @@ scrollbar->Orientation(), kThumbThickness, kTrackStart, kIsLeftSideVerticalScrollbar, scroll_layer->id(), scroll_layer->element_id()); - scroll_layer->SetScrollClipLayerId(layer_tree_root->id()); scroll_layer->AddChild(child1); scroll_layer->InsertChild(scrollbar_layer, 1); layer_tree_root->AddChild(scroll_layer);
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc index a5e31dd..526b1932 100644 --- a/cc/surfaces/surface_aggregator.cc +++ b/cc/surfaces/surface_aggregator.cc
@@ -144,8 +144,7 @@ } int SurfaceAggregator::ChildIdForSurface(Surface* surface) { - SurfaceToResourceChildIdMap::iterator it = - surface_id_to_resource_child_id_.find(surface->surface_id()); + auto it = surface_id_to_resource_child_id_.find(surface->surface_id()); if (it == surface_id_to_resource_child_id_.end()) { int child_id = provider_->CreateChild(base::Bind(&UnrefHelper, surface->factory())); @@ -239,7 +238,7 @@ return; } - SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; + referenced_surfaces_.insert(surface_id); // TODO(vmpstr): provider check is a hack for unittests that don't set up a // resource provider. ResourceProvider::ResourceIdMap empty_map; @@ -337,7 +336,8 @@ gfx::RectF(surface_quad->rect)); } - referenced_surfaces_.erase(it); + // Need to re-query since referenced_surfaces_ iterators are not stable. + referenced_surfaces_.erase(referenced_surfaces_.find(surface_id)); } void SurfaceAggregator::AddColorConversionPass() { @@ -568,8 +568,7 @@ for (const auto& surface : previous_contained_surfaces_) { if (!contained_surfaces_.count(surface.first)) { // Release resources of removed surface. - SurfaceToResourceChildIdMap::iterator it = - surface_id_to_resource_child_id_.find(surface.first); + auto it = surface_id_to_resource_child_id_.find(surface.first); if (it != surface_id_to_resource_child_id_.end()) { provider_->DestroyChild(it->second); surface_id_to_resource_child_id_.erase(it); @@ -653,13 +652,18 @@ }; std::vector<SurfaceInfo> child_surfaces; - std::unordered_set<int> pixel_moving_background_filter_passes; + // This data is created once and typically small or empty. Collect all items + // and pass to a flat_vector to sort once. + std::vector<int> pixel_moving_background_filter_passes_data; for (const auto& render_pass : frame.render_pass_list) { if (render_pass->background_filters.HasFilterThatMovesPixels()) { - pixel_moving_background_filter_passes.insert( + pixel_moving_background_filter_passes_data.push_back( RemapPassId(render_pass->id, surface_id)); } } + base::flat_set<int> pixel_moving_background_filter_passes( + std::move(pixel_moving_background_filter_passes_data), + base::KEEP_FIRST_OF_DUPES); for (const auto& render_pass : base::Reversed(frame.render_pass_list)) { int remapped_pass_id = RemapPassId(render_pass->id, surface_id); @@ -728,8 +732,7 @@ // Avoid infinite recursion by adding current surface to // referenced_surfaces_. - SurfaceSet::iterator it = - referenced_surfaces_.insert(surface->surface_id()).first; + referenced_surfaces_.insert(surface->surface_id()); for (const auto& surface_info : child_surfaces) { gfx::Rect surface_damage = PrewalkTree(surface_info.id, surface_info.has_moved_pixels, @@ -769,7 +772,7 @@ } } - referenced_surfaces_.erase(it); + referenced_surfaces_.erase(referenced_surfaces_.find(surface->surface_id())); if (!damage_rect.IsEmpty() && frame.metadata.may_contain_video) result->may_contain_video = true; return damage_rect; @@ -810,7 +813,7 @@ } } } else { - SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; + auto it = referenced_surfaces_.insert(surface_id).first; CopyPasses(frame, surface); referenced_surfaces_.erase(it); } @@ -860,9 +863,10 @@ frame.metadata.may_contain_video = prewalk_result.may_contain_video; CopyUndrawnSurfaces(&prewalk_result); - SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; + referenced_surfaces_.insert(surface_id); CopyPasses(root_surface_frame, surface); - referenced_surfaces_.erase(it); + // CopyPasses may have mutated container, need to re-query to erase. + referenced_surfaces_.erase(referenced_surfaces_.find(surface_id)); AddColorConversionPass(); moved_pixel_passes_.clear(); @@ -890,10 +894,8 @@ contained_surfaces_.swap(previous_contained_surfaces_); contained_surfaces_.clear(); - for (SurfaceIndexMap::iterator it = previous_contained_surfaces_.begin(); - it != previous_contained_surfaces_.end(); - ++it) { - Surface* surface = manager_->GetSurfaceForId(it->first); + for (auto it : previous_contained_surfaces_) { + Surface* surface = manager_->GetSurfaceForId(it.first); if (surface) surface->TakeLatencyInfo(&frame.metadata.latency_info); } @@ -914,8 +916,7 @@ } void SurfaceAggregator::ReleaseResources(const SurfaceId& surface_id) { - SurfaceToResourceChildIdMap::iterator it = - surface_id_to_resource_child_id_.find(surface_id); + auto it = surface_id_to_resource_child_id_.find(surface_id); if (it != surface_id_to_resource_child_id_.end()) { provider_->DestroyChild(it->second); surface_id_to_resource_child_id_.erase(it);
diff --git a/cc/surfaces/surface_aggregator.h b/cc/surfaces/surface_aggregator.h index ec69f5d..5fe0c3d7 100644 --- a/cc/surfaces/surface_aggregator.h +++ b/cc/surfaces/surface_aggregator.h
@@ -5,12 +5,10 @@ #ifndef CC_SURFACES_SURFACE_AGGREGATOR_H_ #define CC_SURFACES_SURFACE_AGGREGATOR_H_ -#include <map> #include <memory> -#include <set> -#include <unordered_map> -#include <unordered_set> +#include "base/containers/flat_map.h" +#include "base/containers/flat_set.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "cc/quads/draw_quad.h" @@ -30,7 +28,7 @@ class CC_SURFACES_EXPORT SurfaceAggregator { public: - using SurfaceIndexMap = std::unordered_map<SurfaceId, int, SurfaceIdHash>; + using SurfaceIndexMap = base::flat_map<SurfaceId, int>; SurfaceAggregator(SurfaceManager* manager, ResourceProvider* provider, @@ -65,7 +63,7 @@ ~PrewalkResult(); // This is the set of Surfaces that were referenced by another Surface, but // not included in a SurfaceDrawQuad. - std::set<SurfaceId> undrawn_surfaces; + base::flat_set<SurfaceId> undrawn_surfaces; bool may_contain_video = false; }; @@ -145,9 +143,8 @@ // each source (SurfaceId, RenderPass id) to a unified ID namespace that's // used in the aggregated frame. An entry is removed from the map if it's not // used for one output frame. - using RenderPassIdAllocatorMap = - std::map<std::pair<SurfaceId, int>, RenderPassInfo>; - RenderPassIdAllocatorMap render_pass_allocator_map_; + base::flat_map<std::pair<SurfaceId, int>, RenderPassInfo> + render_pass_allocator_map_; int next_render_pass_id_; const bool aggregate_only_damaged_; bool output_is_secure_; @@ -162,9 +159,7 @@ // The id for the final color conversion render pass. int color_conversion_render_pass_id_ = 0; - using SurfaceToResourceChildIdMap = - std::unordered_map<SurfaceId, int, SurfaceIdHash>; - SurfaceToResourceChildIdMap surface_id_to_resource_child_id_; + base::flat_map<SurfaceId, int> surface_id_to_resource_child_id_; // The following state is only valid for the duration of one Aggregate call // and is only stored on the class to avoid having to pass through every @@ -172,8 +167,7 @@ // This is the set of surfaces referenced in the aggregation so far, used to // detect cycles. - using SurfaceSet = std::set<SurfaceId>; - SurfaceSet referenced_surfaces_; + base::flat_set<SurfaceId> referenced_surfaces_; // For each Surface used in the last aggregation, gives the frame_index at // that time. @@ -181,22 +175,22 @@ SurfaceIndexMap contained_surfaces_; // After surface validation, every Surface in this set is valid. - std::unordered_set<SurfaceId, SurfaceIdHash> valid_surfaces_; + base::flat_set<SurfaceId> valid_surfaces_; // This is the pass list for the aggregated frame. RenderPassList* dest_pass_list_; // This is the set of aggregated pass ids that are affected by filters that // move pixels. - std::unordered_set<int> moved_pixel_passes_; + base::flat_set<int> moved_pixel_passes_; // This is the set of aggregated pass ids that are drawn by copy requests, so // should not have their damage rects clipped to the root damage rect. - std::unordered_set<int> copy_request_passes_; + base::flat_set<int> copy_request_passes_; // This maps each aggregated pass id to the set of (aggregated) pass ids // that its RenderPassDrawQuads depend on - std::unordered_map<int, std::unordered_set<int>> render_pass_dependencies_; + base::flat_map<int, base::flat_set<int>> render_pass_dependencies_; // The root damage rect of the currently-aggregating frame. gfx::Rect root_damage_rect_;
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index c3005c8..bd017fa7 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -3444,9 +3444,7 @@ if (!new_animation_controller) return; - int scroll_layer_id = active_tree_->LayerIdByElementId(scroll_element_id); - for (ScrollbarLayerImplBase* scrollbar : - active_tree_->ScrollbarsFor(scroll_layer_id)) { + for (auto* scrollbar : active_tree_->ScrollbarsFor(scroll_element_id)) { new_animation_controller->DidMouseMoveNear( scrollbar->orientation(), DeviceSpaceDistanceToLayer(device_viewport_point, scrollbar) / @@ -3672,14 +3670,13 @@ } void LayerTreeHostImpl::RegisterScrollbarAnimationController( - int scroll_layer_id, ElementId scroll_element_id) { if (settings().scrollbar_animator == LayerTreeSettings::NO_ANIMATOR) return; if (ScrollbarAnimationControllerForElementId(scroll_element_id)) return; scrollbar_animation_controllers_[scroll_element_id] = - active_tree_->CreateScrollbarAnimationController(scroll_layer_id); + active_tree_->CreateScrollbarAnimationController(scroll_element_id); } void LayerTreeHostImpl::UnregisterScrollbarAnimationController( @@ -3720,8 +3717,8 @@ SetNeedsRedraw(); } -ScrollbarSet LayerTreeHostImpl::ScrollbarsFor(int scroll_layer_id) const { - return active_tree_->ScrollbarsFor(scroll_layer_id); +ScrollbarSet LayerTreeHostImpl::ScrollbarsFor(ElementId id) const { + return active_tree_->ScrollbarsFor(id); } void LayerTreeHostImpl::AddVideoFrameController(
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 381424e..e7b3f61 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -321,8 +321,7 @@ size_t SourceAnimationFrameNumberForTesting() const; - void RegisterScrollbarAnimationController(int scroll_layer_id, - ElementId scroll_element_id); + void RegisterScrollbarAnimationController(ElementId scroll_element_id); void UnregisterScrollbarAnimationController(ElementId scroll_element_id); ScrollbarAnimationController* ScrollbarAnimationControllerForElementId( ElementId scroll_element_id) const; @@ -355,7 +354,7 @@ base::TimeDelta delay) override; void SetNeedsAnimateForScrollbarAnimation() override; void SetNeedsRedrawForScrollbarAnimation() override; - ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override; + ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const override; void DidChangeScrollbarVisibility() override; // VideoBeginFrameSource implementation.
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 31466c5..c7f6e98b 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -3334,16 +3334,16 @@ LayerImpl* child_clip_ptr = child_clip.get(); // Check scrollbar registration on the viewport layers. - EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(root_scroll->id()).size()); + EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(root_scroll->element_id()).size()); EXPECT_EQ(nullptr, host_impl_->ScrollbarAnimationControllerForElementId( root_scroll->element_id())); vert_1_scrollbar->SetScrollInfo(root_scroll->id(), root_scroll->element_id()); - EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(root_scroll->id()).size()); + EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(root_scroll->element_id()).size()); EXPECT_TRUE(host_impl_->ScrollbarAnimationControllerForElementId( root_scroll->element_id())); horiz_1_scrollbar->SetScrollInfo(root_scroll->id(), root_scroll->element_id()); - EXPECT_EQ(2ul, host_impl_->ScrollbarsFor(root_scroll->id()).size()); + EXPECT_EQ(2ul, host_impl_->ScrollbarsFor(root_scroll->element_id()).size()); EXPECT_TRUE(host_impl_->ScrollbarAnimationControllerForElementId( root_scroll->element_id())); @@ -3369,15 +3369,15 @@ ElementId child_scroll_element_id = child->element_id(); child_clip->test_properties()->AddChild(std::move(child)); root_scroll->test_properties()->AddChild(std::move(child_clip)); - EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(child_scroll_id).size()); + EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(child_scroll_element_id).size()); EXPECT_EQ(nullptr, host_impl_->ScrollbarAnimationControllerForElementId( child_scroll_element_id)); vert_2_scrollbar->SetScrollInfo(child_scroll_id, child_scroll_element_id); - EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(child_scroll_id).size()); + EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(child_scroll_element_id).size()); EXPECT_TRUE(host_impl_->ScrollbarAnimationControllerForElementId( child_scroll_element_id)); horiz_2_scrollbar->SetScrollInfo(child_scroll_id, child_scroll_element_id); - EXPECT_EQ(2ul, host_impl_->ScrollbarsFor(child_scroll_id).size()); + EXPECT_EQ(2ul, host_impl_->ScrollbarsFor(child_scroll_element_id).size()); EXPECT_TRUE(host_impl_->ScrollbarAnimationControllerForElementId( child_scroll_element_id)); @@ -3393,21 +3393,21 @@ // Check scrollbar unregistration. vert_1_scrollbar.reset(); - EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(root_scroll->id()).size()); + EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(root_scroll->element_id()).size()); EXPECT_TRUE(host_impl_->ScrollbarAnimationControllerForElementId( root_scroll->element_id())); horiz_1_scrollbar.reset(); - EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(root_scroll->id()).size()); + EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(root_scroll->element_id()).size()); EXPECT_EQ(nullptr, host_impl_->ScrollbarAnimationControllerForElementId( root_scroll->element_id())); - EXPECT_EQ(2ul, host_impl_->ScrollbarsFor(child_scroll_id).size()); + EXPECT_EQ(2ul, host_impl_->ScrollbarsFor(child_scroll_element_id).size()); vert_2_scrollbar.reset(); - EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(child_scroll_id).size()); + EXPECT_EQ(1ul, host_impl_->ScrollbarsFor(child_scroll_element_id).size()); EXPECT_TRUE(host_impl_->ScrollbarAnimationControllerForElementId( child_scroll_element_id)); horiz_2_scrollbar.reset(); - EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(child_scroll_id).size()); + EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(child_scroll_element_id).size()); EXPECT_EQ(nullptr, host_impl_->ScrollbarAnimationControllerForElementId( root_scroll->element_id()));
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc index a5dbac8..266c75e0 100644 --- a/cc/trees/layer_tree_host_unittest_damage.cc +++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -340,6 +340,8 @@ scoped_refptr<Layer> scroll_clip_layer = Layer::Create(); content_layer_ = FakePictureLayer::Create(&client_); + content_layer_->SetElementId( + LayerIdToElementIdForTesting(content_layer_->id())); content_layer_->SetScrollClipLayerId(scroll_clip_layer->id()); content_layer_->SetScrollOffset(gfx::ScrollOffset(10, 20)); content_layer_->SetBounds(gfx::Size(100, 200));
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index 62e63b3a..da95603 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc
@@ -246,7 +246,7 @@ bool clip_layer_size_did_change = false; bool scroll_layer_size_did_change = false; bool y_offset_did_change = false; - for (ScrollbarLayerImplBase* scrollbar : ScrollbarsFor(scroll_layer_id)) { + for (auto* scrollbar : ScrollbarsFor(scroll_layer->element_id())) { if (scrollbar->orientation() == HORIZONTAL) { scrollbar_needs_animation |= scrollbar->SetCurrentPos(current_offset.x()); clip_layer_size_did_change |= @@ -1467,7 +1467,7 @@ } std::unique_ptr<ScrollbarAnimationController> -LayerTreeImpl::CreateScrollbarAnimationController(int scroll_layer_id) { +LayerTreeImpl::CreateScrollbarAnimationController(ElementId scroll_element_id) { DCHECK(!settings().scrollbar_fade_out_delay.is_zero()); DCHECK(!settings().scrollbar_fade_out_duration.is_zero()); base::TimeDelta fade_out_delay = settings().scrollbar_fade_out_delay; @@ -1478,7 +1478,7 @@ case LayerTreeSettings::ANDROID_OVERLAY: { return ScrollbarAnimationController:: CreateScrollbarAnimationControllerAndroid( - scroll_layer_id, layer_tree_host_impl_, fade_out_delay, + scroll_element_id, layer_tree_host_impl_, fade_out_delay, fade_out_resize_delay, fade_out_duration); } case LayerTreeSettings::AURA_OVERLAY: { @@ -1488,7 +1488,7 @@ settings().scrollbar_thinning_duration; return ScrollbarAnimationController:: CreateScrollbarAnimationControllerAuraOverlay( - scroll_layer_id, layer_tree_host_impl_, show_delay, + scroll_element_id, layer_tree_host_impl_, show_delay, fade_out_delay, fade_out_resize_delay, fade_out_duration, thinning_duration); } @@ -1720,15 +1720,15 @@ } void LayerTreeImpl::RegisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer) { - if (scrollbar_layer->ScrollLayerId() == Layer::INVALID_ID) + ElementId scroll_element_id = scrollbar_layer->scroll_element_id(); + if (!scroll_element_id) return; - scrollbar_map_.insert(std::pair<int, int>(scrollbar_layer->ScrollLayerId(), - scrollbar_layer->id())); + element_id_to_scrollbar_layer_ids_.insert( + std::pair<ElementId, int>(scroll_element_id, scrollbar_layer->id())); if (IsActiveTree() && scrollbar_layer->is_overlay_scrollbar()) { - auto scroll_layer_id = scrollbar_layer->ScrollLayerId(); layer_tree_host_impl_->RegisterScrollbarAnimationController( - scroll_layer_id, scrollbar_layer->scroll_element_id()); + scroll_element_id); } DidUpdateScrollState(scrollbar_layer->ScrollLayerId()); @@ -1736,26 +1736,29 @@ void LayerTreeImpl::UnregisterScrollbar( ScrollbarLayerImplBase* scrollbar_layer) { - int scroll_layer_id = scrollbar_layer->ScrollLayerId(); - if (scroll_layer_id == Layer::INVALID_ID) + ElementId scroll_element_id = scrollbar_layer->scroll_element_id(); + if (!scroll_element_id) return; - auto scrollbar_range = scrollbar_map_.equal_range(scroll_layer_id); + auto scrollbar_range = + element_id_to_scrollbar_layer_ids_.equal_range(scroll_element_id); for (auto i = scrollbar_range.first; i != scrollbar_range.second; ++i) if (i->second == scrollbar_layer->id()) { - scrollbar_map_.erase(i); + element_id_to_scrollbar_layer_ids_.erase(i); break; } - if (IsActiveTree() && scrollbar_map_.count(scroll_layer_id) == 0) { + if (IsActiveTree() && + element_id_to_scrollbar_layer_ids_.count(scroll_element_id) == 0) { layer_tree_host_impl_->UnregisterScrollbarAnimationController( - scrollbar_layer->scroll_element_id()); + scroll_element_id); } } -ScrollbarSet LayerTreeImpl::ScrollbarsFor(int scroll_layer_id) const { +ScrollbarSet LayerTreeImpl::ScrollbarsFor(ElementId scroll_element_id) const { ScrollbarSet scrollbars; - auto scrollbar_range = scrollbar_map_.equal_range(scroll_layer_id); + auto scrollbar_range = + element_id_to_scrollbar_layer_ids_.equal_range(scroll_element_id); for (auto i = scrollbar_range.first; i != scrollbar_range.second; ++i) scrollbars.insert(LayerById(i->second)->ToScrollbarLayer()); return scrollbars;
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h index 1d785f8..7998290 100644 --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h
@@ -95,7 +95,7 @@ gfx::Size DrawViewportSize() const; const gfx::Rect ViewportRectForTilePriority() const; std::unique_ptr<ScrollbarAnimationController> - CreateScrollbarAnimationController(int scroll_layer_id); + CreateScrollbarAnimationController(ElementId scroll_element_id); void DidAnimateScrollOffset(); bool use_gpu_rasterization() const; GpuRasterizationStatus GetGpuRasterizationStatus() const; @@ -395,7 +395,7 @@ void RegisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer); void UnregisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer); - ScrollbarSet ScrollbarsFor(int scroll_layer_id) const; + ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const; void RegisterScrollLayer(LayerImpl* layer); void UnregisterScrollLayer(LayerImpl* layer); @@ -532,11 +532,13 @@ // derived from LayerImpl::scroll_clip_layer_ and exists to avoid O(n) walks.) std::unordered_map<int, int> clip_scroll_map_; - // Maps scroll layer ids to scrollbar layer ids. For each scroll layer, there - // may be 1 or 2 scrollbar layers (for vertical and horizontal). (This is - // derived from ScrollbarLayerImplBase::scroll_layer_id_ and exists to avoid - // O(n) walks.) - std::multimap<int, int> scrollbar_map_; + // Maps scroll element ids to scrollbar layer ids. For each scroll layer, + // there may be 1 or 2 scrollbar layers (for vertical and horizontal). (This + // is derived from ScrollbarLayerImplBase::scroll_element_id_ and exists to + // avoid O(n) walks.) + // TODO(pdr): Refactor this to be more efficient--likely a map where the value + // is a pair of scrollbar layer ids instead of using a multimap. + std::multimap<ElementId, int> element_id_to_scrollbar_layer_ids_; std::vector<PictureLayerImpl*> picture_layers_; LayerImplList surface_layers_;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index 36ce866..83310c0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -130,6 +130,7 @@ import org.chromium.chrome.browser.toolbar.Toolbar; import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; import org.chromium.chrome.browser.toolbar.ToolbarManager; +import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.browser.util.ChromeFileProvider; import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.browser.util.FeatureUtilities; @@ -1361,7 +1362,7 @@ } private void checkAccessibility() { - onAccessibilityModeChanged(DeviceClassManager.isAccessibilityModeEnabled(this)); + onAccessibilityModeChanged(AccessibilityUtil.isAccessibilityEnabled()); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 26f38a77..3a9b80d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -358,7 +358,7 @@ @Override public void didAddTab(Tab tab, TabLaunchType type) { if (type == TabLaunchType.FROM_LONGPRESS_BACKGROUND - && !DeviceClassManager.enableAnimations(getApplicationContext())) { + && !DeviceClassManager.enableAnimations()) { Toast.makeText(ChromeTabbedActivity.this, R.string.open_in_new_tab_toast, Toast.LENGTH_SHORT).show(); @@ -627,7 +627,7 @@ } else { mLayoutManager = new LayoutManagerChromePhone(compositorViewHolder); } - mLayoutManager.setEnableAnimations(DeviceClassManager.enableAnimations(this)); + mLayoutManager.setEnableAnimations(DeviceClassManager.enableAnimations()); mLayoutManager.addOverviewModeObserver(this); // TODO(yusufo): get rid of findViewById(R.id.url_bar). @@ -904,8 +904,7 @@ super.onAccessibilityModeChanged(enabled); if (mLayoutManager != null) { - mLayoutManager.setEnableAnimations( - DeviceClassManager.enableAnimations(getApplicationContext())); + mLayoutManager.setEnableAnimations(DeviceClassManager.enableAnimations()); } if (isTablet()) { if (getCompositorViewHolder() != null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java index e1225b9a..551a219 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java
@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver; import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; import org.chromium.chrome.browser.tabmodel.TabModelUtils; +import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.browser.widget.OverviewListLayout; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; @@ -548,7 +549,7 @@ * @return Whether or not to use the accessibility layout. */ protected boolean useAccessibilityLayout() { - return DeviceClassManager.isAccessibilityModeEnabled(mHost.getContext()) + return AccessibilityUtil.isAccessibilityEnabled() || DeviceClassManager.enableAccessibilityLayout(); } @@ -656,8 +657,7 @@ } if (direction == ScrollDirection.DOWN) { - boolean isAccessibility = - DeviceClassManager.isAccessibilityModeEnabled(mHost.getContext()); + boolean isAccessibility = AccessibilityUtil.isAccessibilityEnabled(); return mOverviewLayout != null && !isAccessibility; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java b/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java index 46d59d4a..02060071 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java
@@ -4,14 +4,11 @@ package org.chromium.chrome.browser.device; -import android.content.Context; -import android.view.accessibility.AccessibilityManager; - import org.chromium.base.CommandLine; import org.chromium.base.ContextUtils; import org.chromium.base.SysUtils; -import org.chromium.base.TraceEvent; import org.chromium.chrome.browser.ChromeSwitches; +import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.ui.base.DeviceFormFactor; /** @@ -109,11 +106,10 @@ } /** - * @param context A {@link Context} instance. - * @return Whether or not we are showing animations. + * @return Whether or not we are showing animations. */ - public static boolean enableAnimations(Context context) { - return getInstance().mEnableAnimations && !isAccessibilityModeEnabled(context); + public static boolean enableAnimations() { + return getInstance().mEnableAnimations && !AccessibilityUtil.isAccessibilityEnabled(); } /** @@ -136,14 +132,4 @@ public static boolean disableDomainReliability() { return getInstance().mDisableDomainReliability; } - - public static boolean isAccessibilityModeEnabled(Context context) { - TraceEvent.begin("DeviceClassManager::isAccessibilityModeEnabled"); - AccessibilityManager manager = (AccessibilityManager) - context.getSystemService(Context.ACCESSIBILITY_SERVICE); - boolean enabled = manager != null && manager.isEnabled() - && manager.isTouchExplorationEnabled(); - TraceEvent.end("DeviceClassManager::isAccessibilityModeEnabled"); - return enabled; - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java index a406ac4d..4c03b7e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java
@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.PanelState; import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason; import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModePanel; -import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.infobar.InfoBar; import org.chromium.chrome.browser.infobar.InfoBarContainer; import org.chromium.chrome.browser.infobar.InfoBarContainer.InfoBarContainerObserver; @@ -27,6 +26,7 @@ import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; +import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.browser.widget.findinpage.FindToolbarObserver; import org.chromium.components.dom_distiller.content.DistillablePageUtils; import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; @@ -534,7 +534,7 @@ || mIsFindToolbarShowing || mIsFullscreenModeEntered || mIsKeyboardShowing - || DeviceClassManager.isAccessibilityModeEnabled(mChromeActivity)) { + || AccessibilityUtil.isAccessibilityEnabled()) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ChromeHomeNewTabPageBase.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ChromeHomeNewTabPageBase.java index 443b5b95..4515d97 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ChromeHomeNewTabPageBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ChromeHomeNewTabPageBase.java
@@ -24,7 +24,6 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetMetrics; -import org.chromium.content_public.browser.LoadUrlParams; /** * The base class for the new tab pages displayed in Chrome Home. @@ -91,11 +90,6 @@ mFadingBackgroundView.setEnabled(true); if (!mTab.isClosing()) mShowOverviewOnClose = false; } - - @Override - public void onLoadUrl(Tab tab, LoadUrlParams params, int loadType) { - mBottomSheet.setSheetState(BottomSheet.SHEET_STATE_PEEK, true); - } }; mTab.addObserver(mTabObserver);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java index fbccf8637..38630c82 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java
@@ -45,10 +45,6 @@ // VariationsAssociatedData configs private static final String FIELD_TRIAL_NAME = "UpdateMenuItem"; private static final String ENABLED_VALUE = "true"; - private static final String ENABLE_UPDATE_MENU_ITEM = "enable_update_menu_item"; - private static final String ENABLE_UPDATE_BADGE = "enable_update_badge"; - private static final String SHOW_SUMMARY = "show_summary"; - private static final String USE_NEW_FEATURES_SUMMARY = "use_new_features_summary"; private static final String CUSTOM_SUMMARY = "custom_summary"; // UMA constants for logging whether the menu item was clicked. @@ -101,12 +97,6 @@ * @param activity The current {@link ChromeActivity}. */ public void checkForUpdateOnBackgroundThread(final ChromeActivity activity) { - if (!getBooleanParam(ENABLE_UPDATE_MENU_ITEM) - && !getBooleanParam(ChromeSwitches.FORCE_SHOW_UPDATE_MENU_ITEM) - && !getBooleanParam(ChromeSwitches.FORCE_SHOW_UPDATE_MENU_BADGE)) { - return; - } - ThreadUtils.assertOnUiThread(); if (mAlreadyCheckedForUpdates) { @@ -160,10 +150,6 @@ return true; } - if (!getBooleanParam(ENABLE_UPDATE_MENU_ITEM)) { - return false; - } - return updateAvailable(activity); } @@ -172,20 +158,11 @@ * @return The string to use for summary text or the empty string if no summary should be shown. */ public String getMenuItemSummaryText(Context context) { - if (!getBooleanParam(SHOW_SUMMARY) && !getBooleanParam(USE_NEW_FEATURES_SUMMARY) - && !getBooleanParam(CUSTOM_SUMMARY)) { - return ""; - } - String customSummary = getStringParamValue(CUSTOM_SUMMARY); if (!TextUtils.isEmpty(customSummary)) { return customSummary; } - if (getBooleanParam(USE_NEW_FEATURES_SUMMARY)) { - return context.getResources().getString(R.string.menu_update_summary_new_features); - } - return context.getResources().getString(R.string.menu_update_summary_default); } @@ -202,8 +179,7 @@ // even newer version of Chrome available. String latestVersionWhenClicked = PrefServiceBridge.getInstance().getLatestVersionWhenClickedUpdateMenuItem(); - if (!getBooleanParam(ENABLE_UPDATE_BADGE) - || TextUtils.equals(latestVersionWhenClicked, mLatestVersion)) { + if (TextUtils.equals(latestVersionWhenClicked, mLatestVersion)) { return false; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationSnackbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationSnackbarController.java index 04b65fdf..8b1352d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationSnackbarController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationSnackbarController.java
@@ -15,13 +15,13 @@ import org.chromium.base.ContextUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeFeatureList; -import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.preferences.PreferencesLauncher; import org.chromium.chrome.browser.preferences.SearchEnginePreference; import org.chromium.chrome.browser.search_engines.TemplateUrlService; import org.chromium.chrome.browser.snackbar.Snackbar; import org.chromium.chrome.browser.snackbar.SnackbarManager; import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; +import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.ui.UiUtils; import org.chromium.ui.text.SpanApplier; import org.chromium.ui.text.SpanApplier.SpanInfo; @@ -80,7 +80,7 @@ SpannableString message = SpanApplier.applySpans(messageWithoutSpans, new SpanInfo("<b>", "</b>", robotoMediumSpan)); String settings = context.getResources().getString(R.string.preferences); - int durationMs = DeviceClassManager.isAccessibilityModeEnabled(view.getContext()) + int durationMs = AccessibilityUtil.isAccessibilityEnabled() ? ACCESSIBILITY_SNACKBAR_DURATION_MS : SNACKBAR_DURATION_MS; final GeolocationSnackbarController controller = new GeolocationSnackbarController(); final Snackbar snackbar = Snackbar
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarManager.java index cdfa6d5..d85eacbd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarManager.java
@@ -13,7 +13,7 @@ import org.chromium.base.VisibleForTesting; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.chrome.browser.device.DeviceClassManager; +import org.chromium.chrome.browser.util.AccessibilityUtil; /** * Manager for the snackbar showing at the bottom of activity. There should be only one @@ -214,7 +214,7 @@ private int getDuration(Snackbar snackbar) { int durationMs = snackbar.getDuration(); if (durationMs == 0) { - durationMs = DeviceClassManager.isAccessibilityModeEnabled(mActivity) + durationMs = AccessibilityUtil.isAccessibilityEnabled() ? sAccessibilitySnackbarDurationMs : sSnackbarDurationMs; } return durationMs;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/undo/UndoBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/undo/UndoBarController.java index 92a0ac9..d90ccc3a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/undo/UndoBarController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/undo/UndoBarController.java
@@ -16,6 +16,7 @@ import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModelObserver; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.util.AccessibilityUtil; import java.util.List; import java.util.Locale; @@ -62,7 +63,7 @@ mContext = context; mTabModelObserver = new EmptyTabModelObserver() { private boolean disableUndo() { - return DeviceClassManager.isAccessibilityModeEnabled(mContext) + return AccessibilityUtil.isAccessibilityEnabled() || DeviceClassManager.enableAccessibilityLayout(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java index 6073a14..15d42b05 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java
@@ -142,8 +142,7 @@ enableHidingBrowserControls &= (securityState != ConnectionSecurityLevel.DANGEROUS && securityState != ConnectionSecurityLevel.SECURITY_WARNING); - enableHidingBrowserControls &= - !AccessibilityUtil.isAccessibilityEnabled(mTab.getApplicationContext()); + enableHidingBrowserControls &= !AccessibilityUtil.isAccessibilityEnabled(); ContentViewCore cvc = mTab.getContentViewCore(); enableHidingBrowserControls &= cvc == null || !cvc.isFocusedNodeEditable();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java index 9a525cb..22307e7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java
@@ -18,13 +18,13 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.NavigationPopup; -import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.download.DownloadUtils; import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.omnibox.LocationBar; import org.chromium.chrome.browser.omnibox.LocationBarTablet; import org.chromium.chrome.browser.partnercustomizations.HomepageManager; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.browser.widget.TintedImageButton; import org.chromium.ui.base.DeviceFormFactor; @@ -94,7 +94,7 @@ mBackButton = (TintedImageButton) findViewById(R.id.back_button); mForwardButton = (TintedImageButton) findViewById(R.id.forward_button); mReloadButton = (TintedImageButton) findViewById(R.id.refresh_button); - mShowTabStack = DeviceClassManager.isAccessibilityModeEnabled(getContext()); + mShowTabStack = AccessibilityUtil.isAccessibilityEnabled(); mTabSwitcherButtonDrawable = TabSwitcherDrawable.createTabSwitcherDrawable(getResources(), false);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java index 9d6368d..9d4a6ce 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java
@@ -12,7 +12,9 @@ import android.support.v7.app.AlertDialog; import android.view.accessibility.AccessibilityManager; +import org.chromium.base.ContextUtils; import org.chromium.base.PackageUtils; +import org.chromium.base.TraceEvent; import org.chromium.chrome.R; import java.util.List; @@ -40,13 +42,17 @@ /** * Checks to see that this device has accessibility and touch exploration enabled. - * @param context A {@link Context} instance. * @return Whether or not accessibility and touch exploration are enabled. */ - public static boolean isAccessibilityEnabled(Context context) { - AccessibilityManager manager = (AccessibilityManager) - context.getSystemService(Context.ACCESSIBILITY_SERVICE); - return manager != null && manager.isEnabled() && manager.isTouchExplorationEnabled(); + public static boolean isAccessibilityEnabled() { + TraceEvent.begin("AccessibilityManager::isAccessibilityEnabled"); + AccessibilityManager manager = + (AccessibilityManager) ContextUtils.getApplicationContext().getSystemService( + Context.ACCESSIBILITY_SERVICE); + boolean retVal = + manager != null && manager.isEnabled() && manager.isTouchExplorationEnabled(); + TraceEvent.end("AccessibilityManager::isAccessibilityEnabled"); + return retVal; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java index 11cbb723..e1e1fb78 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
@@ -152,7 +152,11 @@ public void unregister() { ChromeActivity activity = mTargetActivity.get(); if (activity == null) return; - activity.unregisterReceiver(VrBroadcastReceiver.this); + try { + activity.unregisterReceiver(VrBroadcastReceiver.this); + } catch (IllegalArgumentException e) { + // Ignore this. This means our receiver was already unregistered somehow. + } } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActivityTest.java index c81fc3b..075956f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActivityTest.java
@@ -124,7 +124,7 @@ return getActivity().getLayoutManager().animationsEnabled(); } }); - assertEquals(animationsEnabled, DeviceClassManager.enableAnimations(getActivity())); + assertEquals(animationsEnabled, DeviceClassManager.enableAnimations()); } @Override
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index a6f23c9..e79dfdae 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -1928,32 +1928,13 @@ desc="Text for the search button in the touch bar when Google is not the default search provider. Pressing the button will bring focus to the omnibox. $1 is the name of the search provider)"> Search <ph name="SEARCH_ENGINE">$1<ex>Bing</ex></ph> </message> + <message name="IDS_TOOLTIP_TOUCH_BAR_BACK" desc="The tooltip for the touch bar back button."> Touch to go back. </message> <message name="IDS_TOOLTIP_TOUCH_BAR_FORWARD" desc="The tooltip for the touch bar forward button."> Touch to go forward. </message> - <message name="IDS_TOUCH_BAR_BACK_FORWARD_CUSTOMIZATION_LABEL" - desc="Customization label for the back and forward buttons in the touch bar."> - Back/Forward - </message> - <message name="IDS_TOUCH_BAR_STOP_RELOAD_CUSTOMIZATION_LABEL" - desc="Customization label for the stop or reload button in the touch bar."> - Stop/Reload - </message> - <message name="IDS_TOUCH_BAR_HOME_CUSTOMIZATION_LABEL" - desc="Customization label for the home button in the touch bar."> - Home - </message> - <message name="IDS_TOUCH_BAR_BOOKMARK_CUSTOMIZATION_LABEL" - desc="Customization label for the bookmark button in the touch bar."> - Bookmark - </message> - <message name="IDS_TOUCH_BAR_NEW_TAB_CUSTOMIZATION_LABEL" - desc="Customization label for the new tab button in the touch bar."> - New Tab - </message> </if> <!-- Remove in-progress downloads confirmation dialog -->
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index f163dbf..6adc45b 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1309,8 +1309,6 @@ "sync/sync_startup_tracker.h", "tab_contents/navigation_metrics_recorder.cc", "tab_contents/navigation_metrics_recorder.h", - "tab_contents/origins_seen_service_factory.cc", - "tab_contents/origins_seen_service_factory.h", "tab_contents/retargeting_details.h", "tab_contents/tab_util.cc", "tab_contents/tab_util.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index c0d7d0fb..64d07df 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -653,18 +653,6 @@ #endif // OS_ANDROID #if defined(OS_ANDROID) -const FeatureEntry::Choice kUpdateMenuItemSummaryChoices[] = { - {flag_descriptions::kUpdateMenuItemNoSummary, "", ""}, - {flag_descriptions::kUpdateMenuItemDefaultSummary, - switches::kForceShowUpdateMenuItemSummary, ""}, - {flag_descriptions::kUpdateMenuItemNewFeaturesSummary, - switches::kForceShowUpdateMenuItemNewFeaturesSummary, ""}, - {flag_descriptions::kUpdateMenuItemCustomSummary, - switches::kForceShowUpdateMenuItemCustomSummary, "Custom summary"}, -}; -#endif // OS_ANDROID - -#if defined(OS_ANDROID) const FeatureEntry::Choice kHerbPrototypeChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {flags_ui::kGenericExperimentChoiceDisabled, @@ -2117,9 +2105,12 @@ {"force-show-update-menu-item", flag_descriptions::kUpdateMenuItemName, flag_descriptions::kUpdateMenuItemDescription, kOsAndroid, SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuItem)}, - {"update-menu-item-summary", flag_descriptions::kUpdateMenuItemSummaryName, - flag_descriptions::kUpdateMenuItemSummaryDescription, kOsAndroid, - MULTI_VALUE_TYPE(kUpdateMenuItemSummaryChoices)}, + {"update-menu-item-custom-summary", + flag_descriptions::kUpdateMenuItemCustomSummaryName, + flag_descriptions::kUpdateMenuItemCustomSummaryDescription, kOsAndroid, + SINGLE_VALUE_TYPE_AND_VALUE( + switches::kForceShowUpdateMenuItemCustomSummary, + "Custom Summary")}, {"force-show-update-menu-badge", flag_descriptions::kUpdateMenuBadgeName, flag_descriptions::kUpdateMenuBadgeDescription, kOsAndroid, SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuBadge)},
diff --git a/chrome/browser/android/webapk/webapk_icon_hasher.cc b/chrome/browser/android/webapk/webapk_icon_hasher.cc index 51a4432..afc12dc 100644 --- a/chrome/browser/android/webapk/webapk_icon_hasher.cc +++ b/chrome/browser/android/webapk/webapk_icon_hasher.cc
@@ -39,6 +39,17 @@ net::URLRequestContextGetter* request_context_getter, const GURL& icon_url, const Murmur2HashCallback& callback) { + DownloadAndComputeMurmur2HashWithTimeout(request_context_getter, icon_url, + kDownloadTimeoutInMilliseconds, + callback); +} + +// static +void WebApkIconHasher::DownloadAndComputeMurmur2HashWithTimeout( + net::URLRequestContextGetter* request_context_getter, + const GURL& icon_url, + int timeout_ms, + const Murmur2HashCallback& callback) { if (!icon_url.is_valid()) { base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, base::Bind(callback, "")); @@ -58,17 +69,17 @@ } // The icon hasher will delete itself when it is done. - new WebApkIconHasher(request_context_getter, icon_url, callback); + new WebApkIconHasher(request_context_getter, icon_url, timeout_ms, callback); } WebApkIconHasher::WebApkIconHasher( net::URLRequestContextGetter* url_request_context_getter, const GURL& icon_url, + int timeout_ms, const Murmur2HashCallback& callback) : callback_(callback) { download_timeout_timer_.Start( - FROM_HERE, - base::TimeDelta::FromMilliseconds(kDownloadTimeoutInMilliseconds), + FROM_HERE, base::TimeDelta::FromMilliseconds(timeout_ms), base::Bind(&WebApkIconHasher::OnDownloadTimedOut, base::Unretained(this)));
diff --git a/chrome/browser/android/webapk/webapk_icon_hasher.h b/chrome/browser/android/webapk/webapk_icon_hasher.h index ff54b977..2c5b7b5 100644 --- a/chrome/browser/android/webapk/webapk_icon_hasher.h +++ b/chrome/browser/android/webapk/webapk_icon_hasher.h
@@ -35,11 +35,17 @@ const GURL& icon_url, const Murmur2HashCallback& callback); - private: - WebApkIconHasher( + static void DownloadAndComputeMurmur2HashWithTimeout( net::URLRequestContextGetter* request_context_getter, const GURL& icon_url, + int timeout_ms, const Murmur2HashCallback& callback); + + private: + WebApkIconHasher(net::URLRequestContextGetter* request_context_getter, + const GURL& icon_url, + int timeout_ms, + const Murmur2HashCallback& callback); ~WebApkIconHasher() override; // net::URLFetcherDelegate:
diff --git a/chrome/browser/android/webapk/webapk_icon_hasher_unittest.cc b/chrome/browser/android/webapk/webapk_icon_hasher_unittest.cc index c23d51d..c96f86a 100644 --- a/chrome/browser/android/webapk/webapk_icon_hasher_unittest.cc +++ b/chrome/browser/android/webapk/webapk_icon_hasher_unittest.cc
@@ -37,8 +37,8 @@ ~WebApkIconHasherRunner() {} void Run(const GURL& icon_url) { - WebApkIconHasher::DownloadAndComputeMurmur2Hash( - url_request_context_getter_.get(), icon_url, + WebApkIconHasher::DownloadAndComputeMurmur2HashWithTimeout( + url_request_context_getter_.get(), icon_url, 100, base::Bind(&WebApkIconHasherRunner::OnCompleted, base::Unretained(this)));
diff --git a/chrome/browser/android/webapk/webapk_installer_unittest.cc b/chrome/browser/android/webapk/webapk_installer_unittest.cc index bd885d49..87abf28 100644 --- a/chrome/browser/android/webapk/webapk_installer_unittest.cc +++ b/chrome/browser/android/webapk/webapk_installer_unittest.cc
@@ -349,10 +349,10 @@ } // Test that installation fails if fetching the bitmap at the best primary icon -// URL times out. In a perfect world the fetch would never time out because the -// bitmap at the best primary icon URL should be in the HTTP cache. +// URL returns no content. In a perfect world the fetch would always succeed +// because the fetch for the same icon succeeded recently. TEST_F(WebApkInstallerTest, BestPrimaryIconUrlDownloadTimesOut) { - SetBestPrimaryIconUrl(test_server()->GetURL("/slow?1000")); + SetBestPrimaryIconUrl(test_server()->GetURL("/nocontent")); std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); runner->RunInstallWebApk(); @@ -360,10 +360,10 @@ } // Test that installation fails if fetching the bitmap at the best badge icon -// URL times out. In a perfect world the fetch would never time out because the -// bitmap at the best badge icon URL should be in the HTTP cache. +// URL returns no content. In a perfect world the fetch would always succeed +// because the fetch for the same icon succeeded recently. TEST_F(WebApkInstallerTest, BestBadgeIconUrlDownloadTimesOut) { - SetBestBadgeIconUrl(test_server()->GetURL("/slow?1000")); + SetBestBadgeIconUrl(test_server()->GetURL("/nocontent")); std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); runner->RunInstallWebApk();
diff --git a/chrome/browser/android/webapk/webapk_update_manager.cc b/chrome/browser/android/webapk/webapk_update_manager.cc index be9ab62..8c3bcce4 100644 --- a/chrome/browser/android/webapk/webapk_update_manager.cc +++ b/chrome/browser/android/webapk/webapk_update_manager.cc
@@ -83,8 +83,8 @@ info.display = static_cast<blink::WebDisplayMode>(java_display_mode); info.orientation = static_cast<blink::WebScreenOrientationLockType>(java_orientation); - info.theme_color = (long)java_theme_color; - info.background_color = (long)java_background_color; + info.theme_color = (int64_t)java_theme_color; + info.background_color = (int64_t)java_background_color; info.best_primary_icon_url = best_primary_icon_url; info.manifest_url = web_manifest_url;
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index f6e6ec57..78d27e24 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -741,12 +741,6 @@ handoff_active_url_observer_bridge_.reset( new HandoffActiveURLObserverBridge(self)); - - NSApplication* application = [NSApplication sharedApplication]; - if ([application respondsToSelector: - @selector(setAutomaticCustomizeTouchBarMenuItemEnabled:)]) { - [application setAutomaticCustomizeTouchBarMenuItemEnabled:YES]; - } } // Helper function for populating and displaying the in progress downloads at
diff --git a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.cc b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.cc index b9b9ba15..40d7840 100644 --- a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.cc +++ b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.cc
@@ -8,11 +8,12 @@ #include "base/logging.h" #include "chrome/browser/speech/tts_controller.h" #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" +#include "chrome/common/extensions/api/automation_api_constants.h" #include "content/public/browser/browser_thread.h" +#include "ui/accessibility/ax_tree_id_registry.h" #include "ui/aura/window.h" #include "ui/display/display.h" #include "ui/events/event.h" -#include "ui/views/focus/view_storage.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" @@ -121,42 +122,15 @@ CancelEvent(event); - // Find the View to post the accessibility event on. - aura::Window* event_target = static_cast<aura::Window*>(event->target()); - aura::Window* hit_window = event_target; - if (!hit_window) - return; - - views::Widget* hit_widget = views::Widget::GetWidgetForNativeView(hit_window); - while (!hit_widget) { - hit_window = hit_window->parent(); - if (!hit_window) - break; - - hit_widget = views::Widget::GetWidgetForNativeView(hit_window); - } - - if (!hit_window || !hit_widget) - return; - - gfx::Point window_location = event->location(); - aura::Window::ConvertPointToTarget(event_target, hit_window, - &window_location); - - views::View* root_view = hit_widget->GetRootView(); - views::View* hit_view = root_view->GetEventHandlerForPoint(window_location); - - if (hit_view) { - // Send the accessibility event, then save the view so we can post the - // cancel event on the same view if possible. - hit_view->NotifyAccessibilityEvent(ax_event, true); - if (!last_view_storage_id_) { - last_view_storage_id_ = - views::ViewStorage::GetInstance()->CreateStorageID(); - } - views::ViewStorage::GetInstance()->RemoveView(last_view_storage_id_); - views::ViewStorage::GetInstance()->StoreView(last_view_storage_id_, - hit_view); + ui::AXTreeIDRegistry* registry = ui::AXTreeIDRegistry::GetInstance(); + ui::AXHostDelegate* delegate = + registry->GetHostDelegate(extensions::api::automation::kDesktopTreeID); + if (delegate) { + ui::AXActionData action; + action.action = ui::AX_ACTION_HIT_TEST; + action.target_point = event->root_location(); + action.hit_test_event_to_fire = ax_event; + delegate->PerformAction(action); } } @@ -169,20 +143,8 @@ } void SelectToSpeakEventHandler::SendCancelAXEvent() { - // If the user releases Search while the button is still down, cancel - // the Select-to-speak gesture. Try to post it on the same View that - // was last targeted, but if that's impossible, post it on the desktop. - views::View* last_view = - last_view_storage_id_ - ? views::ViewStorage::GetInstance()->RetrieveView( - last_view_storage_id_) - : nullptr; - if (last_view) { - last_view->NotifyAccessibilityEvent(ui::AX_EVENT_MOUSE_CANCELED, true); - } else { - AutomationManagerAura::GetInstance()->HandleEvent( - nullptr, nullptr, ui::AX_EVENT_MOUSE_CANCELED); - } + AutomationManagerAura::GetInstance()->HandleEvent( + nullptr, nullptr, ui::AX_EVENT_MOUSE_CANCELED); } } // namespace chromeos
diff --git a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.h b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.h index 012fb9e..048e2cf 100644 --- a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.h +++ b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler.h
@@ -62,8 +62,6 @@ // is pressed, and only cleared when all keys are released. std::set<ui::KeyboardCode> keys_pressed_together_; - int last_view_storage_id_ = 0; - DISALLOW_COPY_AND_ASSIGN(SelectToSpeakEventHandler); };
diff --git a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc index 20167745..d3a9865 100644 --- a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc +++ b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc
@@ -219,30 +219,6 @@ EXPECT_FALSE(event_capturer_.last_key_event()); } -TEST_F(SelectToSpeakEventHandlerTest, SearchPlusMouseThenCancel) { - // If the user holds the Search key and then presses the mouse button, - // but then releases the Search key first while the mouse is still down, - // a cancel AX event is sent and the subsequent mouse up is canceled too. - - generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); - ASSERT_TRUE(event_capturer_.last_key_event()); - EXPECT_FALSE(event_capturer_.last_key_event()->handled()); - - generator_->set_current_location(gfx::Point(100, 12)); - generator_->PressLeftButton(); - EXPECT_FALSE(event_capturer_.last_mouse_event()); - EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); - - event_capturer_.Reset(); - generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); - EXPECT_FALSE(event_capturer_.last_key_event()); - - EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_CANCELED)); - - generator_->ReleaseLeftButton(); - EXPECT_FALSE(event_capturer_.last_mouse_event()); -} - TEST_F(SelectToSpeakEventHandlerTest, SearchPlusKeyIgnoresClicks) { // If the user presses the Search key and then some other key, // we should assume the user does not want select-to-speak, and
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc index 8eb0e41b..e4c0251 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
@@ -43,7 +43,6 @@ #include "ui/base/x/x11_util.h" #include "ui/display/display.h" #include "ui/display/screen.h" -#include "ui/keyboard/keyboard_controller.h" #include "ui/keyboard/keyboard_util.h" #include "ui/views/controls/webview/webview.h" @@ -126,21 +125,14 @@ weak_factory_(this) { set_should_emit_login_prompt_visible(false); ash::ShellPort::Get()->AddLockStateObserver(this); - ash::Shell::Get()->AddShellObserver(this); display::Screen::GetScreen()->AddObserver(this); DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); - - if (keyboard::KeyboardController::GetInstance()) { - keyboard::KeyboardController::GetInstance()->AddObserver(this); - is_observing_keyboard_ = true; - } } WebUIScreenLocker::~WebUIScreenLocker() { DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); display::Screen::GetScreen()->RemoveObserver(this); ash::ShellPort::Get()->RemoveLockStateObserver(this); - ash::Shell::Get()->RemoveShellObserver(this); // In case of shutdown, lock_window_ may be deleted before WebUIScreenLocker. if (lock_window_) { lock_window_->RemoveObserver(this); @@ -151,11 +143,6 @@ if (login_display_.get() && GetOobeUI()) GetOobeUI()->ResetSigninScreenHandlerDelegate(); - if (keyboard::KeyboardController::GetInstance() && is_observing_keyboard_) { - keyboard::KeyboardController::GetInstance()->RemoveObserver(this); - is_observing_keyboard_ = false; - } - ResetKeyboardOverscrollOverride(); RequestPreload(); @@ -414,47 +401,6 @@ } //////////////////////////////////////////////////////////////////////////////// -// ash::ShellObserver: - -void WebUIScreenLocker::OnVirtualKeyboardStateChanged( - bool activated, - ash::WmWindow* root_window) { - if (keyboard::KeyboardController::GetInstance()) { - if (activated) { - if (!is_observing_keyboard_) { - keyboard::KeyboardController::GetInstance()->AddObserver(this); - is_observing_keyboard_ = true; - } - } else { - keyboard::KeyboardController::GetInstance()->RemoveObserver(this); - is_observing_keyboard_ = false; - } - } -} - -//////////////////////////////////////////////////////////////////////////////// -// keyboard::KeyboardControllerObserver: - -void WebUIScreenLocker::OnKeyboardBoundsChanging( - const gfx::Rect& new_bounds) { - if (new_bounds.IsEmpty()) { - // Keyboard has been hidden. - if (GetOobeUI()) { - GetOobeUI()->GetCoreOobeView()->ShowControlBar(true); - GetOobeUI()->GetCoreOobeView()->ShowPinKeyboard(true); - } - } else { - // Keyboard has been shown. - if (GetOobeUI()) { - GetOobeUI()->GetCoreOobeView()->ShowControlBar(false); - GetOobeUI()->GetCoreOobeView()->ShowPinKeyboard(false); - } - } -} - -void WebUIScreenLocker::OnKeyboardClosed() {} - -//////////////////////////////////////////////////////////////////////////////// // display::DisplayObserver: void WebUIScreenLocker::OnDisplayAdded(const display::Display& new_display) {}
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.h b/chrome/browser/chromeos/login/lock/webui_screen_locker.h index abac16e..fea1b72 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.h +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.h
@@ -10,7 +10,6 @@ #include <memory> #include <string> -#include "ash/shell_observer.h" #include "ash/wm/lock_state_observer.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" @@ -23,7 +22,6 @@ #include "chromeos/dbus/power_manager_client.h" #include "content/public/browser/web_contents_observer.h" #include "ui/display/display_observer.h" -#include "ui/keyboard/keyboard_controller_observer.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_observer.h" @@ -50,8 +48,6 @@ public ash::LockStateObserver, public views::WidgetObserver, public PowerManagerClient::Observer, - public ash::ShellObserver, - public keyboard::KeyboardControllerObserver, public display::DisplayObserver, public content::WebContentsObserver { public: @@ -138,14 +134,6 @@ // content::WebContentsObserver: void RenderProcessGone(base::TerminationStatus status) override; - // ash::ShellObserver: - void OnVirtualKeyboardStateChanged(bool activated, - ash::WmWindow* root_window) override; - - // keyboard::KeyboardControllerObserver: - void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override; - void OnKeyboardClosed() override; - // display::DisplayObserver: void OnDisplayAdded(const display::Display& new_display) override; void OnDisplayRemoved(const display::Display& old_display) override; @@ -193,9 +181,6 @@ std::unique_ptr<login::NetworkStateHelper> network_state_helper_; - // True iff this object is observing a keyboard controller. - bool is_observing_keyboard_ = false; - base::WeakPtrFactory<WebUIScreenLocker> weak_factory_; DISALLOW_COPY_AND_ASSIGN(WebUIScreenLocker);
diff --git a/chrome/browser/chromeos/login/screens/core_oobe_view.h b/chrome/browser/chromeos/login/screens/core_oobe_view.h index 4b5a0f9..8b459bc 100644 --- a/chrome/browser/chromeos/login/screens/core_oobe_view.h +++ b/chrome/browser/chromeos/login/screens/core_oobe_view.h
@@ -36,7 +36,7 @@ virtual void ClearErrors() = 0; virtual void ReloadContent(const base::DictionaryValue& dictionary) = 0; virtual void ShowControlBar(bool show) = 0; - virtual void ShowPinKeyboard(bool show) = 0; + virtual void SetVirtualKeyboardShown(bool shown) = 0; virtual void SetClientAreaSize(int width, int height) = 0; virtual void ShowDeviceResetScreen() = 0; virtual void ShowEnableDebuggingScreen() = 0;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc index 9bc5db7..d7b9de4 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
@@ -373,15 +373,7 @@ DBusThreadManager::Get()->GetSessionManagerClient()->AddObserver(this); CrasAudioHandler::Get()->AddAudioObserver(this); - if (keyboard::KeyboardController::GetInstance()) { - keyboard::KeyboardController::GetInstance()->AddObserver(this); - is_observing_keyboard_ = true; - } - if (!ash_util::IsRunningInMash()) - ash::Shell::Get()->AddShellObserver(this); - else - NOTIMPLEMENTED(); display::Screen::GetScreen()->AddObserver(this); // We need to listen to CLOSE_ALL_BROWSERS_REQUEST but not APP_TERMINATING @@ -492,15 +484,6 @@ LoginDisplayHostImpl::~LoginDisplayHostImpl() { DBusThreadManager::Get()->GetSessionManagerClient()->RemoveObserver(this); CrasAudioHandler::Get()->RemoveAudioObserver(this); - if (keyboard::KeyboardController::GetInstance() && is_observing_keyboard_) { - keyboard::KeyboardController::GetInstance()->RemoveObserver(this); - is_observing_keyboard_ = false; - } - - if (!ash_util::IsRunningInMash()) - ash::Shell::Get()->RemoveShellObserver(this); - else - NOTIMPLEMENTED(); display::Screen::GetScreen()->RemoveObserver(this); if (login_view_ && login_window_) @@ -1022,43 +1005,6 @@ } //////////////////////////////////////////////////////////////////////////////// -// LoginDisplayHostImpl, ash::ShellObserver: - -void LoginDisplayHostImpl::OnVirtualKeyboardStateChanged( - bool activated, - ash::WmWindow* root_window) { - if (keyboard::KeyboardController::GetInstance()) { - if (activated) { - if (!is_observing_keyboard_) { - keyboard::KeyboardController::GetInstance()->AddObserver(this); - is_observing_keyboard_ = true; - } - } else { - keyboard::KeyboardController::GetInstance()->RemoveObserver(this); - is_observing_keyboard_ = false; - } - } -} - -//////////////////////////////////////////////////////////////////////////////// -// LoginDisplayHostImpl, keyboard::KeyboardControllerObserver: - -void LoginDisplayHostImpl::OnKeyboardBoundsChanging( - const gfx::Rect& new_bounds) { - if (new_bounds.IsEmpty()) { - // Keyboard has been hidden. - if (GetOobeUI()) - GetOobeUI()->GetCoreOobeView()->ShowControlBar(true); - } else if (!new_bounds.IsEmpty()) { - // Keyboard has been shown. - if (GetOobeUI()) - GetOobeUI()->GetCoreOobeView()->ShowControlBar(false); - } -} - -void LoginDisplayHostImpl::OnKeyboardClosed() {} - -//////////////////////////////////////////////////////////////////////////////// // LoginDisplayHostImpl, display::DisplayObserver: void LoginDisplayHostImpl::OnDisplayAdded(const display::Display& new_display) {
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.h b/chrome/browser/chromeos/login/ui/login_display_host_impl.h index 8b70416..7878640b 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.h +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.h
@@ -11,7 +11,6 @@ #include <string> #include <vector> -#include "ash/shell_observer.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/chromeos/login/app_launch_controller.h" @@ -30,7 +29,6 @@ #include "content/public/browser/web_contents_observer.h" #include "ui/display/display_observer.h" #include "ui/gfx/geometry/rect.h" -#include "ui/keyboard/keyboard_controller_observer.h" #include "ui/views/widget/widget_removals_observer.h" #include "ui/wm/public/scoped_drag_drop_disabler.h" @@ -52,8 +50,6 @@ public content::WebContentsObserver, public chromeos::SessionManagerClient::Observer, public chromeos::CrasAudioHandler::AudioObserver, - public ash::ShellObserver, - public keyboard::KeyboardControllerObserver, public display::DisplayObserver, public views::WidgetRemovalsObserver, public chrome::MultiUserWindowManager::Observer { @@ -121,14 +117,6 @@ // Overridden from chromeos::CrasAudioHandler::AudioObserver: void OnActiveOutputNodeChanged() override; - // ash::ShellObserver: - void OnVirtualKeyboardStateChanged(bool activated, - ash::WmWindow* root_window) override; - - // Overridden from keyboard::KeyboardControllerObserver: - void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override; - void OnKeyboardClosed() override; - // Overridden from display::DisplayObserver: void OnDisplayAdded(const display::Display& new_display) override; void OnDisplayRemoved(const display::Display& old_display) override; @@ -316,9 +304,6 @@ // in any case. bool startup_sound_honors_spoken_feedback_ = false; - // True is subscribed as keyboard controller observer. - bool is_observing_keyboard_ = false; - // Keeps a copy of the old Drag'n'Drop client, so that it would be disabled // during a login session and restored afterwards. std::unique_ptr<aura::client::ScopedDragDropDisabler>
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.cc b/chrome/browser/chromeos/login/ui/webui_login_view.cc index 1dcb1fc..87bcbbd 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.cc +++ b/chrome/browser/chromeos/login/ui/webui_login_view.cc
@@ -54,6 +54,7 @@ #include "third_party/WebKit/public/platform/WebInputEvent.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" +#include "ui/keyboard/keyboard_controller.h" #include "ui/views/controls/webview/webview.h" #include "ui/views/widget/widget.h" @@ -111,6 +112,14 @@ WebUILoginView::WebUILoginView(const WebViewSettings& settings) : settings_(settings) { + if (keyboard::KeyboardController::GetInstance()) + keyboard::KeyboardController::GetInstance()->AddObserver(this); + // TODO(crbug.com/648733): OnVirtualKeyboardStateChanged not supported in mash + if (!ash_util::IsRunningInMash()) + ash::Shell::Get()->AddShellObserver(this); + else + NOTIMPLEMENTED(); + registrar_.Add(this, chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, content::NotificationService::AllSources()); @@ -171,6 +180,12 @@ for (auto& observer : observer_list_) observer.OnHostDestroying(); + // TODO(crbug.com/648733): OnVirtualKeyboardStateChanged not supported in mash + if (!ash_util::IsRunningInMash()) + ash::Shell::Get()->RemoveShellObserver(this); + if (keyboard::KeyboardController::GetInstance()) + keyboard::KeyboardController::GetInstance()->RemoveObserver(this); + if (!ash_util::IsRunningInMash() && ash::Shell::Get()->HasPrimaryStatusArea()) { ash::Shell::Get()->GetPrimarySystemTray()->SetNextFocusableView(nullptr); @@ -406,6 +421,42 @@ return webui_login_.get(); } +//////////////////////////////////////////////////////////////////////////////// +// ash::ShellObserver: + +void WebUILoginView::OnVirtualKeyboardStateChanged(bool activated, + ash::WmWindow* root_window) { + auto* keyboard_controller = keyboard::KeyboardController::GetInstance(); + if (keyboard_controller) { + if (activated) { + if (!keyboard_controller->HasObserver(this)) + keyboard_controller->AddObserver(this); + } else { + keyboard_controller->RemoveObserver(this); + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +// keyboard::KeyboardControllerObserver: + +void WebUILoginView::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) { + if (!GetOobeUI()) + return; + CoreOobeView* view = GetOobeUI()->GetCoreOobeView(); + if (new_bounds.IsEmpty()) { + // Keyboard has been hidden. + view->ShowControlBar(true); + view->SetVirtualKeyboardShown(false); + } else { + // Keyboard has been shown. + view->ShowControlBar(false); + view->SetVirtualKeyboardShown(true); + } +} + +void WebUILoginView::OnKeyboardClosed() {} + // WebUILoginView private: ----------------------------------------------------- bool WebUILoginView::HandleContextMenu(
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.h b/chrome/browser/chromeos/login/ui/webui_login_view.h index 59006f9..0fc9684 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.h +++ b/chrome/browser/chromeos/login/ui/webui_login_view.h
@@ -8,6 +8,7 @@ #include <map> #include <string> +#include "ash/shell_observer.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/observer_list.h" @@ -16,6 +17,7 @@ #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_contents_delegate.h" +#include "ui/keyboard/keyboard_controller_observer.h" #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" @@ -38,6 +40,8 @@ // View used to render a WebUI supporting Widget. This widget is used for the // WebUI based start up and lock screens. It contains a WebView. class WebUILoginView : public views::View, + public ash::ShellObserver, + public keyboard::KeyboardControllerObserver, public content::WebContentsDelegate, public content::NotificationObserver, public ChromeWebModalDialogManagerDelegate, @@ -135,6 +139,14 @@ // Map type for the accelerator-to-identifier map. typedef std::map<ui::Accelerator, std::string> AccelMap; + // ash::ShellObserver: + void OnVirtualKeyboardStateChanged(bool activated, + ash::WmWindow* root_window) override; + + // keyboard::KeyboardControllerObserver: + void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override; + void OnKeyboardClosed() override; + // Overridden from content::WebContentsDelegate. bool HandleContextMenu(const content::ContextMenuParams& params) override; void HandleKeyboardEvent(
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc index 8ccffdc..42bbe9f 100644 --- a/chrome/browser/extensions/api/automation/automation_apitest.cc +++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -233,6 +233,11 @@ << message_; } +IN_PROC_BROWSER_TEST_F(AutomationApiTest, DesktopHitTest) { + ASSERT_TRUE(RunExtensionSubtest("automation/tests/desktop", "hit_test.html")) + << message_; +} + // Flaky, see http://crbug.com/435449 IN_PROC_BROWSER_TEST_F(AutomationApiTest, DISABLED_DesktopLoadTabs) { ASSERT_TRUE(RunExtensionSubtest("automation/tests/desktop", "load_tabs.html"))
diff --git a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc index 916d440..3871193 100644 --- a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc +++ b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
@@ -44,6 +44,7 @@ #if defined(USE_AURA) #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" +#include "ui/aura/env.h" #endif namespace extensions { @@ -177,6 +178,9 @@ params.event_type = event.event_type; params.update = event.update; params.event_from = event.event_from; +#if defined(USE_AURA) + params.mouse_location = aura::Env::GetInstance()->last_mouse_location(); +#endif AutomationEventRouter* router = AutomationEventRouter::GetInstance(); router->DispatchAccessibilityEvent(params);
diff --git a/chrome/browser/extensions/native_bindings_apitest.cc b/chrome/browser/extensions/native_bindings_apitest.cc index a2891dc..c19ec63 100644 --- a/chrome/browser/extensions/native_bindings_apitest.cc +++ b/chrome/browser/extensions/native_bindings_apitest.cc
@@ -202,4 +202,47 @@ EXPECT_TRUE(listener.WaitUntilSatisfied()); } +// Tests that unchecked errors don't impede future calls. +IN_PROC_BROWSER_TEST_F(NativeBindingsApiTest, ErrorsInCallbackTest) { + host_resolver()->AddRule("*", "127.0.0.1"); + embedded_test_server()->ServeFilesFromDirectory(test_data_dir_); + ASSERT_TRUE(StartEmbeddedTestServer()); + + TestExtensionDir test_dir; + test_dir.WriteManifest( + R"({ + "name": "Errors In Callback", + "manifest_version": 2, + "version": "0.1", + "permissions": ["contextMenus"], + "background": { + "scripts": ["background.js"] + } + })"); + test_dir.WriteFile( + FILE_PATH_LITERAL("background.js"), + R"(chrome.tabs.query({}, function(tabs) { + chrome.tabs.executeScript(tabs[0].id, {code: 'x'}, function() { + // There's an error here (we don't have permission to access the + // host), but we don't check it so that it gets surfaced as an + // unchecked runtime.lastError. + // We should still be able to invoke other APIs and get correct + // callbacks. + chrome.tabs.query({}, function(tabs) { + chrome.tabs.query({}, function(tabs) { + chrome.test.sendMessage('callback'); + }); + }); + }); + });)"); + + ui_test_utils::NavigateToURL( + browser(), embedded_test_server()->GetURL( + "example.com", "/native_bindings/simple.html")); + + ExtensionTestMessageListener listener("callback", false); + ASSERT_TRUE(LoadExtension(test_dir.UnpackedPath())); + EXPECT_TRUE(listener.WaitUntilSatisfied()); +} + } // namespace extensions
diff --git a/chrome/browser/extensions/updater/OWNERS b/chrome/browser/extensions/updater/OWNERS index c827c89b..86b408c 100644 --- a/chrome/browser/extensions/updater/OWNERS +++ b/chrome/browser/extensions/updater/OWNERS
@@ -1,5 +1,4 @@ asargent@chromium.org -mek@chromium.org # TEAM: extensions-dev@chromium.org # COMPONENT: Platform>Extensions
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index dc70967..0fa90f75 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2210,19 +2210,12 @@ R"*(When enabled, an "Update Chrome" item will be shown in the app )*" R"*(menu.)*"; -const char kUpdateMenuItemSummaryName[] = "Update menu item summary"; - -const char kUpdateMenuItemSummaryDescription[] = +const char kUpdateMenuItemCustomSummaryDescription[] = "When this flag and the force show update menu item flag are enabled, a " - "summary will be displayed below the update menu item."; + "custom summary string will be displayed below the update menu item."; -const char kUpdateMenuItemNoSummary[] = "No summary"; - -const char kUpdateMenuItemDefaultSummary[] = "Default summary"; - -const char kUpdateMenuItemNewFeaturesSummary[] = "New features summary"; - -const char kUpdateMenuItemCustomSummary[] = "Custom summary"; +const char kUpdateMenuItemCustomSummaryName[] = + "Update menu item custom summary"; const char kUpdateMenuBadgeName[] = "Force show update menu badge";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 3edd7a2d..e255b37 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2416,24 +2416,11 @@ // Description of the flag to force show the update menu item. extern const char kUpdateMenuItemDescription[]; -// Name of the flag to show a summary below the update menu item. -extern const char kUpdateMenuItemSummaryName[]; +// Description of the flag to show a custom summary below the update menu item. +extern const char kUpdateMenuItemCustomSummaryDescription[]; -// Description of the flag to show a summary below the update menu item. -extern const char kUpdateMenuItemSummaryDescription[]; - -// Option to not show a summary for the update menu item. -extern const char kUpdateMenuItemNoSummary[]; - -// Option to show the default summary for the update menu item. -extern const char kUpdateMenuItemDefaultSummary[]; - -// Option to show a summary for the update menu item prompting users to 'get the -// latest features'. -extern const char kUpdateMenuItemNewFeaturesSummary[]; - -// Option to show a custom summary for the update menu item. -extern const char kUpdateMenuItemCustomSummary[]; +// Name of the flag to show a custom summary below the update menu item. +extern const char kUpdateMenuItemCustomSummaryName[]; // Name of the flag to force show the update menu badge. extern const char kUpdateMenuBadgeName[];
diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc index 63bbc865..65c5d43c 100644 --- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc +++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc
@@ -741,8 +741,16 @@ EXPECT_TRUE(BrowserList::GetInstance()->empty()); } +// TODO(crbug/713201): +// BrowserCloseManagerBrowserTest.AddBeforeUnloadDuringClosing flaky on Mac. +#if defined(OS_MACOSX) +#define MAYBE_AddBeforeUnloadDuringClosing DISABLED_AddBeforeUnloadDuringClosing +#else +#define MAYBE_AddBeforeUnloadDuringClosing AddBeforeUnloadDuringClosing +#endif + IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, - AddBeforeUnloadDuringClosing) { + MAYBE_AddBeforeUnloadDuringClosing) { // TODO(crbug.com/250305): Currently FastUnloadController is broken. // And it is difficult to fix this issue without fixing that one. if (GetParam())
diff --git a/chrome/browser/media/android/router/media_router_android.cc b/chrome/browser/media/android/router/media_router_android.cc index a971721..949e8778 100644 --- a/chrome/browser/media/android/router/media_router_android.cc +++ b/chrome/browser/media/android/router/media_router_android.cc
@@ -13,9 +13,9 @@ #include "chrome/browser/android/tab_android.h" #include "chrome/browser/media/router/media_routes_observer.h" #include "chrome/browser/media/router/media_sinks_observer.h" -#include "chrome/browser/media/router/route_message.h" #include "chrome/browser/media/router/route_message_observer.h" -#include "chrome/browser/media/router/route_request_result.h" +#include "chrome/common/media_router/route_message.h" +#include "chrome/common/media_router/route_request_result.h" #include "content/public/browser/browser_context.h" #include "url/gurl.h"
diff --git a/chrome/browser/media/android/router/media_router_android_bridge.h b/chrome/browser/media/android/router/media_router_android_bridge.h index 9669b3b..cab095e 100644 --- a/chrome/browser/media/android/router/media_router_android_bridge.h +++ b/chrome/browser/media/android/router/media_router_android_bridge.h
@@ -9,9 +9,9 @@ #include "base/android/scoped_java_ref.h" #include "base/macros.h" -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" #include "url/origin.h" namespace media_router {
diff --git a/chrome/browser/media/android/router/media_router_dialog_controller_android.cc b/chrome/browser/media/android/router/media_router_dialog_controller_android.cc index 394ec70..d58107c0 100644 --- a/chrome/browser/media/android/router/media_router_dialog_controller_android.cc +++ b/chrome/browser/media/android/router/media_router_dialog_controller_android.cc
@@ -9,8 +9,8 @@ #include "chrome/browser/media/android/router/media_router_android.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_router_factory.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/presentation_request.h" +#include "chrome/common/media_router/media_source.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/media/cast_remoting_connector.cc b/chrome/browser/media/cast_remoting_connector.cc index 2e5e3b5..f6db5f3 100644 --- a/chrome/browser/media/cast_remoting_connector.cc +++ b/chrome/browser/media/cast_remoting_connector.cc
@@ -14,10 +14,11 @@ #include "chrome/browser/media/cast_remoting_sender.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_router_factory.h" -#include "chrome/browser/media/router/media_source_helper.h" -#include "chrome/browser/media/router/route_message.h" #include "chrome/browser/media/router/route_message_observer.h" +#include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/common/chrome_features.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_message.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" @@ -142,7 +143,9 @@ connector = new CastRemotingConnector( media_router::MediaRouterFactory::GetApiForBrowserContext( contents->GetBrowserContext()), - media_router::MediaSourceForTabContentRemoting(contents).id()); + media_router::MediaSourceForTabContentRemoting( + SessionTabHelper::IdForTab(contents)) + .id()); contents->SetUserData(kUserDataKey, connector); } return connector;
diff --git a/chrome/browser/media/cast_remoting_connector.h b/chrome/browser/media/cast_remoting_connector.h index 4a10f196..989fb7c3 100644 --- a/chrome/browser/media/cast_remoting_connector.h +++ b/chrome/browser/media/cast_remoting_connector.h
@@ -10,7 +10,7 @@ #include "base/memory/weak_ptr.h" #include "base/supports_user_data.h" #include "chrome/browser/media/router/media_routes_observer.h" -#include "chrome/browser/media/router/route_message.h" +#include "chrome/common/media_router/route_message.h" #include "media/mojo/interfaces/remoting.mojom.h" namespace content {
diff --git a/chrome/browser/media/cast_remoting_connector_unittest.cc b/chrome/browser/media/cast_remoting_connector_unittest.cc index bf613be2..b7afed3 100644 --- a/chrome/browser/media/cast_remoting_connector_unittest.cc +++ b/chrome/browser/media/cast_remoting_connector_unittest.cc
@@ -10,12 +10,12 @@ #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/run_loop.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_routes_observer.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/mock_media_router.h" -#include "chrome/browser/media/router/route_message.h" #include "chrome/browser/media/router/route_message_observer.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_source.h" +#include "chrome/common/media_router/route_message.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/test_browser_thread_bundle.h" #include "media/mojo/interfaces/remoting.mojom.h"
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn index 5749c9b..449a9d0 100644 --- a/chrome/browser/media/router/BUILD.gn +++ b/chrome/browser/media/router/BUILD.gn
@@ -3,12 +3,10 @@ # found in the LICENSE file. # -import("//mojo/public/tools/bindings/mojom.gni") import("//testing/test.gni") static_library("router") { deps = [ - ":mojo_bindings_common", "//base", "//chrome/common:constants", "//components/keyed_service/content", @@ -19,21 +17,18 @@ "//third_party/icu", "//url", ] + public_deps = [ + "//chrome/common/media_router:router", + ] sources = [ "browser_presentation_connection_proxy.cc", "browser_presentation_connection_proxy.h", "create_presentation_connection_request.cc", "create_presentation_connection_request.h", - "discovery/media_sink_internal.cc", - "discovery/media_sink_internal.h", - "issue.cc", - "issue.h", "issue_manager.cc", "issue_manager.h", "issues_observer.cc", "issues_observer.h", - "media_route.cc", - "media_route.h", "media_router.h", "media_router_base.cc", "media_router_base.h", @@ -45,18 +40,10 @@ "media_router_metrics.h", "media_routes_observer.cc", "media_routes_observer.h", - "media_sink.cc", - "media_sink.h", "media_sink_service.cc", "media_sink_service.h", "media_sinks_observer.cc", "media_sinks_observer.h", - "media_source.cc", - "media_source.h", - "media_source_helper.cc", - "media_source_helper.h", - "media_status.cc", - "media_status.h", "mojo/media_route_controller.cc", "mojo/media_route_controller.h", "offscreen_presentation_manager.cc", @@ -74,17 +61,12 @@ "receiver_presentation_service_delegate_impl.cc", "receiver_presentation_service_delegate_impl.h", "render_frame_host_id.h", - "route_message.cc", - "route_message.h", "route_message_observer.cc", "route_message_observer.h", - "route_request_result.cc", - "route_request_result.h", ] if (!is_android) { deps += [ - ":mojo_bindings", "discovery", "//extensions/browser", "//mojo/public/cpp/bindings", @@ -106,41 +88,6 @@ } } -mojom("mojo_bindings_common") { - sources = [ - "mojo/media_controller.mojom", - "mojo/media_status.mojom", - ] - - public_deps = [ - "//mojo/common:common_custom_types", - ] -} - -mojom("mojo_bindings") { - sources = [ - "mojo/media_router.mojom", - ] - - public_deps = [ - ":mojo_bindings_common", - "//mojo/common:common_custom_types", - "//net/interfaces:interfaces", - "//url/mojo:url_mojom_gurl", - "//url/mojo:url_mojom_origin", - ] -} - -mojom("mojo_test_interfaces") { - sources = [ - "mojo/media_router_traits_test_service.mojom", - ] - - public_deps = [ - ":mojo_bindings", - ] -} - static_library("test_support") { testonly = true deps = [ @@ -159,8 +106,8 @@ if (!is_android) { deps += [ - ":mojo_bindings", - ":mojo_test_interfaces", + "//chrome/common/media_router/mojo:media_router", + "//chrome/common/media_router/mojo:media_router_test_interfaces", "//extensions/common", ] sources += [
diff --git a/chrome/browser/media/router/browser_presentation_connection_proxy.h b/chrome/browser/media/router/browser_presentation_connection_proxy.h index ad768075..58e5ce8 100644 --- a/chrome/browser/media/router/browser_presentation_connection_proxy.h +++ b/chrome/browser/media/router/browser_presentation_connection_proxy.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_MEDIA_ROUTER_BROWSER_PRESENTATION_CONNECTION_PROXY_H_ #define CHROME_BROWSER_MEDIA_ROUTER_BROWSER_PRESENTATION_CONNECTION_PROXY_H_ -#include "chrome/browser/media/router/media_route.h" +#include "chrome/common/media_router/media_route.h" #include "content/public/browser/presentation_service_delegate.h" #include "content/public/common/presentation_connection_message.h" #include "content/public/common/presentation_info.h"
diff --git a/chrome/browser/media/router/browser_presentation_connection_proxy_unittest.cc b/chrome/browser/media/router/browser_presentation_connection_proxy_unittest.cc index 641cdaf6..d064bf8 100644 --- a/chrome/browser/media/router/browser_presentation_connection_proxy_unittest.cc +++ b/chrome/browser/media/router/browser_presentation_connection_proxy_unittest.cc
@@ -6,9 +6,9 @@ #include "base/run_loop.h" #include "base/test/mock_callback.h" -#include "chrome/browser/media/router/media_source.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" +#include "chrome/common/media_router/media_source.h" +#include "chrome/common/media_router/media_source_helper.h" #include "content/public/common/presentation_connection_message.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/media/router/create_presentation_connection_request.cc b/chrome/browser/media/router/create_presentation_connection_request.cc index 0dceafa..23071ff 100644 --- a/chrome/browser/media/router/create_presentation_connection_request.cc +++ b/chrome/browser/media/router/create_presentation_connection_request.cc
@@ -4,8 +4,8 @@ #include "chrome/browser/media/router/create_presentation_connection_request.h" -#include "chrome/browser/media/router/media_source_helper.h" -#include "chrome/browser/media/router/route_request_result.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_request_result.h" #include "url/origin.h" using content::PresentationInfo;
diff --git a/chrome/browser/media/router/create_presentation_connection_request.h b/chrome/browser/media/router/create_presentation_connection_request.h index 1422fe1..4c9d5aa 100644 --- a/chrome/browser/media/router/create_presentation_connection_request.h +++ b/chrome/browser/media/router/create_presentation_connection_request.h
@@ -10,10 +10,9 @@ #include <vector> #include "base/macros.h" -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/presentation_request.h" #include "chrome/browser/media/router/render_frame_host_id.h" +#include "chrome/common/media_router/media_route.h" #include "content/public/browser/presentation_service_delegate.h" namespace content {
diff --git a/chrome/browser/media/router/create_presentation_connection_request_unittest.cc b/chrome/browser/media/router/create_presentation_connection_request_unittest.cc index 1597df2e..4392ff6 100644 --- a/chrome/browser/media/router/create_presentation_connection_request_unittest.cc +++ b/chrome/browser/media/router/create_presentation_connection_request_unittest.cc
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/bind.h" #include "chrome/browser/media/router/create_presentation_connection_request.h" -#include "chrome/browser/media/router/media_source_helper.h" + +#include "base/bind.h" +#include "chrome/common/media_router/media_source_helper.h" #include "content/public/browser/presentation_service_delegate.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.h b/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.h index 87d2db3c..360725b 100644 --- a/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.h +++ b/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/optional.h" #include "base/threading/thread_checker.h" -#include "chrome/common/media_router/dial_device_description_parser.mojom.h" +#include "chrome/common/media_router/mojo/dial_device_description_parser.mojom.h" #include "content/public/browser/utility_process_mojo_client.h" namespace media_router {
diff --git a/chrome/browser/media/router/issue_manager.h b/chrome/browser/media/router/issue_manager.h index b276a14..93afcfc 100644 --- a/chrome/browser/media/router/issue_manager.h +++ b/chrome/browser/media/router/issue_manager.h
@@ -13,8 +13,8 @@ #include "base/containers/hash_tables.h" #include "base/macros.h" #include "base/observer_list.h" -#include "chrome/browser/media/router/issue.h" #include "chrome/browser/media/router/issues_observer.h" +#include "chrome/common/media_router/issue.h" namespace media_router {
diff --git a/chrome/browser/media/router/issues_observer.h b/chrome/browser/media/router/issues_observer.h index 974ece7..ae003249 100644 --- a/chrome/browser/media/router/issues_observer.h +++ b/chrome/browser/media/router/issues_observer.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_MEDIA_ROUTER_ISSUES_OBSERVER_H_ #include "base/macros.h" -#include "chrome/browser/media/router/issue.h" +#include "chrome/common/media_router/issue.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_router.h b/chrome/browser/media/router/media_router.h index d727876..c14a730 100644 --- a/chrome/browser/media/router/media_router.h +++ b/chrome/browser/media/router/media_router.h
@@ -13,12 +13,12 @@ #include "base/callback.h" #include "base/callback_list.h" #include "base/time/time.h" -#include "chrome/browser/media/router/discovery/media_sink_internal.h" -#include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/route_message_observer.h" +#include "chrome/common/media_router/discovery/media_sink_internal.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/presentation_service_delegate.h"
diff --git a/chrome/browser/media/router/media_router_base.h b/chrome/browser/media/router/media_router_base.h index aa84494..c482662 100644 --- a/chrome/browser/media/router/media_router_base.h +++ b/chrome/browser/media/router/media_router_base.h
@@ -12,9 +12,9 @@ #include "base/callback_list.h" #include "base/gtest_prod_util.h" #include "base/macros.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_routes_observer.h" +#include "chrome/common/media_router/media_route.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_routes_observer.h b/chrome/browser/media/router/media_routes_observer.h index f801e133..8447812d 100644 --- a/chrome/browser/media/router/media_routes_observer.h +++ b/chrome/browser/media/router/media_routes_observer.h
@@ -8,7 +8,7 @@ #include <vector> #include "base/macros.h" -#include "chrome/browser/media/router/media_route.h" +#include "chrome/common/media_router/media_route.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_sink_service.h b/chrome/browser/media/router/media_sink_service.h index ed433b22..9b910c6 100644 --- a/chrome/browser/media/router/media_sink_service.h +++ b/chrome/browser/media/router/media_sink_service.h
@@ -9,7 +9,7 @@ #include <vector> #include "base/callback.h" -#include "chrome/browser/media/router/media_sink.h" +#include "chrome/common/media_router/media_sink.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_sinks_observer.h b/chrome/browser/media/router/media_sinks_observer.h index 91741ab..7fb7f54 100644 --- a/chrome/browser/media/router/media_sinks_observer.h +++ b/chrome/browser/media/router/media_sinks_observer.h
@@ -8,8 +8,8 @@ #include <vector> #include "base/macros.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" #include "url/origin.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_sinks_observer_unittest.cc b/chrome/browser/media/router/media_sinks_observer_unittest.cc index cbcc83a..d90c6113 100644 --- a/chrome/browser/media/router/media_sinks_observer_unittest.cc +++ b/chrome/browser/media/router/media_sinks_observer_unittest.cc
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" #include "chrome/browser/media/router/test_helper.h" +#include "chrome/common/media_router/media_source_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/media/router/mock_media_router.h b/chrome/browser/media/router/mock_media_router.h index 2a91575..b37f6f4 100644 --- a/chrome/browser/media/router/mock_media_router.h +++ b/chrome/browser/media/router/mock_media_router.h
@@ -10,12 +10,12 @@ #include <string> #include <vector> -#include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_router_base.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/mojo/media_route_controller.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" #include "testing/gmock/include/gmock/gmock.h" #include "url/origin.h"
diff --git a/chrome/browser/media/router/mojo/media_route_controller.h b/chrome/browser/media/router/mojo/media_route_controller.h index b8c16e2..3d92a4b 100644 --- a/chrome/browser/media/router/mojo/media_route_controller.h +++ b/chrome/browser/media/router/mojo/media_route_controller.h
@@ -9,8 +9,8 @@ #include "base/memory/ref_counted.h" #include "base/observer_list.h" -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/mojo/media_controller.mojom.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/mojo/media_controller.mojom.h" #include "mojo/public/cpp/bindings/binding.h" namespace media_router {
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc index 9d640c64..b021891 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
@@ -19,13 +19,13 @@ #include "chrome/browser/media/router/media_router_factory.h" #include "chrome/browser/media/router/media_routes_observer.h" #include "chrome/browser/media/router/media_sinks_observer.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mojo/media_route_controller.h" #include "chrome/browser/media/router/mojo/media_route_provider_util_win.h" #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h" -#include "chrome/browser/media/router/route_message.h" #include "chrome/browser/media/router/route_message_observer.h" #include "chrome/browser/sessions/session_tab_helper.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_message.h" #include "content/public/browser/browser_thread.h" #include "extensions/browser/process_manager.h"
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.h b/chrome/browser/media/router/mojo/media_router_mojo_impl.h index bcfbd50..8f311c9 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.h +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
@@ -23,12 +23,12 @@ #include "base/optional.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" -#include "chrome/browser/media/router/issue.h" #include "chrome/browser/media/router/issue_manager.h" #include "chrome/browser/media/router/media_router_base.h" #include "chrome/browser/media/router/media_routes_observer.h" -#include "chrome/browser/media/router/mojo/media_router.mojom.h" -#include "chrome/browser/media/router/route_request_result.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/mojo/media_router.mojom.h" +#include "chrome/common/media_router/route_request_result.h" #include "mojo/public/cpp/bindings/binding.h" namespace content {
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc index 7f437f3..2d18b45 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
@@ -18,15 +18,15 @@ #include "base/test/histogram_tester.h" #include "base/test/mock_callback.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h" #include "chrome/browser/media/router/mojo/media_router_mojo_test.h" -#include "chrome/browser/media/router/route_message.h" #include "chrome/browser/media/router/route_message_observer.h" #include "chrome/browser/media/router/test_helper.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_message.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_metrics.h b/chrome/browser/media/router/mojo/media_router_mojo_metrics.h index 9cc8b616..a9f79b3 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_metrics.h +++ b/chrome/browser/media/router/mojo/media_router_mojo_metrics.h
@@ -7,7 +7,7 @@ #include "base/gtest_prod_util.h" #include "base/time/time.h" -#include "chrome/browser/media/router/route_request_result.h" +#include "chrome/common/media_router/route_request_result.h" namespace base { class Version;
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_test.h b/chrome/browser/media/router/mojo/media_router_mojo_test.h index b90e43e..4149d41 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_test.h +++ b/chrome/browser/media/router/mojo/media_router_mojo_test.h
@@ -10,9 +10,9 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "chrome/browser/media/router/mock_media_router.h" -#include "chrome/browser/media/router/mojo/media_router.mojom.h" #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h" #include "chrome/browser/media/router/test_helper.h" +#include "chrome/common/media_router/mojo/media_router.mojom.h" #include "chrome/test/base/testing_profile.h" #include "content/public/test/test_browser_thread_bundle.h" #include "extensions/browser/event_page_tracker.h"
diff --git a/chrome/browser/media/router/mojo/media_status.typemap b/chrome/browser/media/router/mojo/media_status.typemap deleted file mode 100644 index fef7db1..0000000 --- a/chrome/browser/media/router/mojo/media_status.typemap +++ /dev/null
@@ -1,12 +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. - -mojom = "//chrome/browser/media/router/mojo/media_status.mojom" -public_headers = [ "//chrome/browser/media/router/media_status.h" ] -traits_headers = - [ "//chrome/browser/media/router/mojo/media_status_struct_traits.h" ] -sources = [ - "//chrome/browser/media/router/mojo/media_status_struct_traits.cc", -] -type_mappings = [ "media_router.mojom.MediaStatus=media_router::MediaStatus" ]
diff --git a/chrome/browser/media/router/mojo/typemaps.gni b/chrome/browser/media/router/mojo/typemaps.gni deleted file mode 100644 index 1b82d583..0000000 --- a/chrome/browser/media/router/mojo/typemaps.gni +++ /dev/null
@@ -1,8 +0,0 @@ -# Copyright 2016 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. - -typemaps = [ - "//chrome/browser/media/router/mojo/media_router.typemap", - "//chrome/browser/media/router/mojo/media_status.typemap", -]
diff --git a/chrome/browser/media/router/offscreen_presentation_manager.h b/chrome/browser/media/router/offscreen_presentation_manager.h index a833488..9871a58 100644 --- a/chrome/browser/media/router/offscreen_presentation_manager.h +++ b/chrome/browser/media/router/offscreen_presentation_manager.h
@@ -13,8 +13,8 @@ #include "base/macros.h" #include "base/optional.h" #include "base/threading/thread_checker.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/render_frame_host_id.h" +#include "chrome/common/media_router/media_route.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/presentation_service_delegate.h"
diff --git a/chrome/browser/media/router/presentation_media_sinks_observer.cc b/chrome/browser/media/router/presentation_media_sinks_observer.cc index 5a8d6281..48de88b 100644 --- a/chrome/browser/media/router/presentation_media_sinks_observer.cc +++ b/chrome/browser/media/router/presentation_media_sinks_observer.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/media/router/presentation_media_sinks_observer.h" #include "chrome/browser/media/router/media_router.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" #include "content/public/browser/presentation_screen_availability_listener.h" namespace media_router {
diff --git a/chrome/browser/media/router/presentation_media_sinks_observer_unittest.cc b/chrome/browser/media/router/presentation_media_sinks_observer_unittest.cc index 7e9cc6b..12dac7a2 100644 --- a/chrome/browser/media/router/presentation_media_sinks_observer_unittest.cc +++ b/chrome/browser/media/router/presentation_media_sinks_observer_unittest.cc
@@ -7,9 +7,9 @@ #include <memory> #include "base/macros.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" #include "chrome/browser/media/router/mock_screen_availability_listener.h" +#include "chrome/common/media_router/media_source_helper.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "content/public/browser/presentation_screen_availability_listener.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/media/router/presentation_request.cc b/chrome/browser/media/router/presentation_request.cc index 3952d0a..dfc0074 100644 --- a/chrome/browser/media/router/presentation_request.cc +++ b/chrome/browser/media/router/presentation_request.cc
@@ -4,7 +4,7 @@ #include "chrome/browser/media/router/presentation_request.h" -#include "chrome/browser/media/router/media_source_helper.h" +#include "chrome/common/media_router/media_source_helper.h" namespace media_router {
diff --git a/chrome/browser/media/router/presentation_request.h b/chrome/browser/media/router/presentation_request.h index e305673..c3ddc116 100644 --- a/chrome/browser/media/router/presentation_request.h +++ b/chrome/browser/media/router/presentation_request.h
@@ -8,14 +8,15 @@ #include <string> #include <vector> -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/render_frame_host_id.h" +#include "chrome/common/media_router/media_source.h" #include "url/origin.h" namespace media_router { // Represents a presentation request made from a render frame. Contains the // presentation URL of the request, and information on the originating frame. +// TODO(crbug.com/708209): Move this class to content/browser/. class PresentationRequest { public: PresentationRequest(const RenderFrameHostId& render_frame_host_id,
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.cc b/chrome/browser/media/router/presentation_service_delegate_impl.cc index 784a226..762df74 100644 --- a/chrome/browser/media/router/presentation_service_delegate_impl.cc +++ b/chrome/browser/media/router/presentation_service_delegate_impl.cc
@@ -15,19 +15,19 @@ #include "base/strings/string_util.h" #include "chrome/browser/media/router/browser_presentation_connection_proxy.h" #include "chrome/browser/media/router/create_presentation_connection_request.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_router_dialog_controller.h" #include "chrome/browser/media/router/media_router_factory.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/offscreen_presentation_manager.h" #include "chrome/browser/media/router/offscreen_presentation_manager_factory.h" #include "chrome/browser/media/router/presentation_media_sinks_observer.h" -#include "chrome/browser/media/router/route_message.h" #include "chrome/browser/media/router/route_message_observer.h" -#include "chrome/browser/media/router/route_request_result.h" #include "chrome/browser/sessions/session_tab_helper.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_message.h" +#include "chrome/common/media_router/route_request_result.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/presentation_screen_availability_listener.h" #include "content/public/browser/render_frame_host.h"
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.h b/chrome/browser/media/router/presentation_service_delegate_impl.h index c9e92fc..ac069764 100644 --- a/chrome/browser/media/router/presentation_service_delegate_impl.h +++ b/chrome/browser/media/router/presentation_service_delegate_impl.h
@@ -16,10 +16,10 @@ #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "chrome/browser/media/router/media_router.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/presentation_request.h" #include "chrome/browser/media/router/presentation_service_delegate_observers.h" #include "chrome/browser/media/router/render_frame_host_id.h" +#include "chrome/common/media_router/media_source.h" #include "content/public/browser/presentation_service_delegate.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h"
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc index 5557b8a..29d87f0 100644 --- a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc +++ b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
@@ -6,15 +6,15 @@ #include "base/memory/ptr_util.h" #include "base/test/mock_callback.h" -#include "chrome/browser/media/router/media_source.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" #include "chrome/browser/media/router/mock_screen_availability_listener.h" #include "chrome/browser/media/router/offscreen_presentation_manager.h" #include "chrome/browser/media/router/offscreen_presentation_manager_factory.h" -#include "chrome/browser/media/router/route_request_result.h" #include "chrome/browser/media/router/test_helper.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/common/media_router/media_source.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_request_result.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/media/router/route_message_observer.h b/chrome/browser/media/router/route_message_observer.h index 8731c02..c4f0e69 100644 --- a/chrome/browser/media/router/route_message_observer.h +++ b/chrome/browser/media/router/route_message_observer.h
@@ -11,7 +11,7 @@ #include <vector> #include "base/macros.h" -#include "chrome/browser/media/router/media_route.h" +#include "chrome/common/media_router/media_route.h" namespace media_router {
diff --git a/chrome/browser/media/router/test_helper.cc b/chrome/browser/media/router/test_helper.cc index 184c87a..24f678e 100644 --- a/chrome/browser/media/router/test_helper.cc +++ b/chrome/browser/media/router/test_helper.cc
@@ -4,7 +4,7 @@ #include "chrome/browser/media/router/test_helper.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" namespace media_router {
diff --git a/chrome/browser/media_galleries/fileapi/iapps_finder_impl.cc b/chrome/browser/media_galleries/fileapi/iapps_finder_impl.cc index ac8357f..aa186067 100644 --- a/chrome/browser/media_galleries/fileapi/iapps_finder_impl.cc +++ b/chrome/browser/media_galleries/fileapi/iapps_finder_impl.cc
@@ -23,7 +23,7 @@ device_id = storage_monitor::StorageInfo::MakeDeviceId(type, unique_id); content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, - base::Bind(callback, device_id)); + base::BindOnce(callback, device_id)); } } // namespace @@ -36,9 +36,8 @@ DCHECK(!callback.is_null()); content::BrowserThread::PostTask( - content::BrowserThread::FILE, - FROM_HERE, - base::Bind(task, base::Bind(PostResultToUIThread, type, callback))); + content::BrowserThread::FILE, FROM_HERE, + base::BindOnce(task, base::Bind(PostResultToUIThread, type, callback))); } // iTunes is only support on OSX and Windows.
diff --git a/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc b/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc index c5a0a780..b58329ca 100644 --- a/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc +++ b/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc
@@ -75,7 +75,7 @@ if (!contents) { content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, - base::Bind(callback, base::File::FILE_ERROR_FAILED)); + base::BindOnce(callback, base::File::FILE_ERROR_FAILED)); return; } MediaFileSystemRegistry* registry = @@ -123,9 +123,8 @@ } content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, base::File::FILE_ERROR_NOT_FOUND)); + content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, base::File::FILE_ERROR_NOT_FOUND)); } } // namespace @@ -223,9 +222,9 @@ content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, - base::Bind(&AttemptAutoMountOnUIThread, - request_info->GetWebContentsGetterForRequest(), storage_domain, - mount_point, callback)); + base::BindOnce(&AttemptAutoMountOnUIThread, + request_info->GetWebContentsGetterForRequest(), + storage_domain, mount_point, callback)); return true; } @@ -252,11 +251,8 @@ const OpenFileSystemCallback& callback) { // We never allow opening a new FileSystem via usual ResolveURL. base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::Bind(callback, - GURL(), - std::string(), - base::File::FILE_ERROR_SECURITY)); + FROM_HERE, base::BindOnce(callback, GURL(), std::string(), + base::File::FILE_ERROR_SECURITY)); } storage::AsyncFileUtil* MediaFileSystemBackend::GetAsyncFileUtil(
diff --git a/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc b/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc index 86cff95..89b7897 100644 --- a/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc +++ b/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc
@@ -93,10 +93,10 @@ void MoveTest(const std::string& filename, const std::string& content, bool expected_result) { content::BrowserThread::PostTask( - content::BrowserThread::FILE, - FROM_HERE, - base::Bind(&MediaFileValidatorTest::SetupOnFileThread, - base::Unretained(this), filename, content, expected_result)); + content::BrowserThread::FILE, FROM_HERE, + base::BindOnce(&MediaFileValidatorTest::SetupOnFileThread, + base::Unretained(this), filename, content, + expected_result)); loop_runner_ = new content::MessageLoopRunner; loop_runner_->Run(); } @@ -106,10 +106,10 @@ void MoveTestFromFile(const std::string& filename, const base::FilePath& source, bool expected_result) { content::BrowserThread::PostTask( - content::BrowserThread::FILE, - FROM_HERE, - base::Bind(&MediaFileValidatorTest::SetupFromFileOnFileThread, - base::Unretained(this), filename, source, expected_result)); + content::BrowserThread::FILE, FROM_HERE, + base::BindOnce(&MediaFileValidatorTest::SetupFromFileOnFileThread, + base::Unretained(this), filename, source, + expected_result)); loop_runner_ = new content::MessageLoopRunner; loop_runner_->Run(); } @@ -163,12 +163,11 @@ dest_root_fs_url + "move_dest" + extension)); content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(&MediaFileValidatorTest::CheckFiles, - base::Unretained(this), true, - base::Bind(&MediaFileValidatorTest::OnTestFilesReady, - base::Unretained(this), expected_result))); + content::BrowserThread::IO, FROM_HERE, + base::BindOnce(&MediaFileValidatorTest::CheckFiles, + base::Unretained(this), true, + base::Bind(&MediaFileValidatorTest::OnTestFilesReady, + base::Unretained(this), expected_result))); } void SetupFromFileOnFileThread(const std::string& filename,
diff --git a/chrome/browser/media_galleries/fileapi/native_media_file_util.cc b/chrome/browser/media_galleries/fileapi/native_media_file_util.cc index af3c52a..810a26d8 100644 --- a/chrome/browser/media_galleries/fileapi/native_media_file_util.cc +++ b/chrome/browser/media_galleries/fileapi/native_media_file_util.cc
@@ -156,9 +156,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - url, exclusive, recursive, callback)); + base::BindOnce(&NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), url, + exclusive, recursive, callback)); DCHECK(success); } @@ -171,9 +171,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - url, callback)); + base::BindOnce(&NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), url, + callback)); DCHECK(success); } @@ -185,9 +185,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - url, callback)); + base::BindOnce(&NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), url, + callback)); DCHECK(success); } @@ -221,9 +221,10 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - src_url, dest_url, option, true /* copy */, callback)); + base::BindOnce( + &NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), src_url, dest_url, + option, true /* copy */, callback)); DCHECK(success); } @@ -237,9 +238,10 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - src_url, dest_url, option, false /* copy */, callback)); + base::BindOnce( + &NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), src_url, dest_url, + option, false /* copy */, callback)); DCHECK(success); } @@ -252,9 +254,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - src_file_path, dest_url, callback)); + base::BindOnce(&NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), + src_file_path, dest_url, callback)); DCHECK(success); } @@ -266,9 +268,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::DeleteFileOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - url, callback)); + base::BindOnce(&NativeMediaFileUtil::DeleteFileOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), url, + callback)); DCHECK(success); } @@ -281,9 +283,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - url, callback)); + base::BindOnce(&NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), url, + callback)); DCHECK(success); } @@ -303,9 +305,9 @@ storage::FileSystemOperationContext* context_ptr = context.get(); const bool success = context_ptr->task_runner()->PostTask( FROM_HERE, - base::Bind(&NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread, - weak_factory_.GetWeakPtr(), base::Passed(&context), - url, callback)); + base::BindOnce(&NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread, + weak_factory_.GetWeakPtr(), base::Passed(&context), url, + callback)); DCHECK(success); } @@ -318,10 +320,8 @@ DCHECK(IsOnTaskRunnerThread(context.get())); base::File::Error error = CreateDirectorySync(context.get(), url, exclusive, recursive); - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error)); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error)); } void NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread( @@ -332,10 +332,8 @@ base::File::Info file_info; base::File::Error error = GetFileInfoSync(context.get(), url, &file_info, NULL); - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error, file_info)); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error, file_info)); } void NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread( @@ -347,9 +345,8 @@ base::File::Error error = ReadDirectorySync(context.get(), url, &entry_list); content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error, entry_list, false /* has_more */)); + content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error, entry_list, false /* has_more */)); } void NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread( @@ -362,10 +359,8 @@ DCHECK(IsOnTaskRunnerThread(context.get())); base::File::Error error = CopyOrMoveFileSync(context.get(), src_url, dest_url, option, copy); - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error)); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error)); } void NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread( @@ -376,10 +371,8 @@ DCHECK(IsOnTaskRunnerThread(context.get())); base::File::Error error = CopyInForeignFileSync(context.get(), src_file_path, dest_url); - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error)); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error)); } void NativeMediaFileUtil::DeleteFileOnTaskRunnerThread( @@ -388,10 +381,8 @@ const StatusCallback& callback) { DCHECK(IsOnTaskRunnerThread(context.get())); base::File::Error error = DeleteFileSync(context.get(), url); - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error)); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error)); } void NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread( @@ -400,10 +391,8 @@ const StatusCallback& callback) { DCHECK(IsOnTaskRunnerThread(context.get())); base::File::Error error = DeleteDirectorySync(context.get(), url); - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error)); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error)); } void NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread( @@ -417,9 +406,8 @@ base::File::Error error = CreateSnapshotFileSync( context.get(), url, &file_info, &platform_path, &file_ref); content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(callback, error, file_info, platform_path, file_ref)); + content::BrowserThread::IO, FROM_HERE, + base::BindOnce(callback, error, file_info, platform_path, file_ref)); } base::File::Error NativeMediaFileUtil::CreateDirectorySync(
diff --git a/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc b/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc index 675f30e..bc32433 100644 --- a/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc +++ b/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc
@@ -58,7 +58,8 @@ content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, - base::Bind(&SafeMediaMetadataParser::StartOnIOThread, this, callback)); + base::BindOnce(&SafeMediaMetadataParser::StartOnIOThread, this, + callback)); } SafeMediaMetadataParser::~SafeMediaMetadataParser() = default; @@ -99,8 +100,8 @@ content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, - base::Bind(callback_, false, base::Passed(&metadata_dictionary), - base::Passed(&attached_images))); + base::BindOnce(callback_, false, base::Passed(&metadata_dictionary), + base::Passed(&attached_images))); } void SafeMediaMetadataParser::ParseMediaMetadataDone( @@ -119,8 +120,9 @@ content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, - base::Bind(callback_, parse_success, base::Passed(&metadata_dictionary), - base::Passed(&attached_images_copy))); + base::BindOnce(callback_, parse_success, + base::Passed(&metadata_dictionary), + base::Passed(&attached_images_copy))); } void SafeMediaMetadataParser::StartBlobRequest( @@ -131,8 +133,8 @@ content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, - base::Bind(&SafeMediaMetadataParser::StartBlobReaderOnUIThread, this, - callback, position, length)); + base::BindOnce(&SafeMediaMetadataParser::StartBlobReaderOnUIThread, this, + callback, position, length)); } void SafeMediaMetadataParser::StartBlobReaderOnUIThread( @@ -157,8 +159,8 @@ content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, - base::Bind(&SafeMediaMetadataParser::FinishBlobRequest, this, callback, - base::Passed(std::move(data)))); + base::BindOnce(&SafeMediaMetadataParser::FinishBlobRequest, this, + callback, base::Passed(std::move(data)))); } void SafeMediaMetadataParser::FinishBlobRequest(
diff --git a/chrome/browser/media_galleries/gallery_watch_manager.cc b/chrome/browser/media_galleries/gallery_watch_manager.cc index de4ece78..1714176a 100644 --- a/chrome/browser/media_galleries/gallery_watch_manager.cc +++ b/chrome/browser/media_galleries/gallery_watch_manager.cc
@@ -111,8 +111,8 @@ // This can occur if the GalleryWatchManager attempts to watch the same path // again before recieving the callback. It's benign. if (base::ContainsKey(watchers_, path)) { - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, base::Bind(callback, false)); + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::BindOnce(callback, false)); return; } @@ -125,8 +125,8 @@ if (success) watchers_[path] = watcher; - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, base::Bind(callback, success)); + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::BindOnce(callback, success)); } void GalleryWatchManager::FileWatchManager::RemoveFileWatch( @@ -147,8 +147,8 @@ DCHECK_CURRENTLY_ON(BrowserThread::FILE); if (error) RemoveFileWatch(path); - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, base::Bind(callback_, path, error)); + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::BindOnce(callback_, path, error)); } GalleryWatchManager::WatchOwner::WatchOwner(BrowserContext* browser_context, @@ -290,12 +290,10 @@ owner, path, callback); - BrowserThread::PostTask(BrowserThread::FILE, - FROM_HERE, - base::Bind(&FileWatchManager::AddFileWatch, - watch_manager_->GetWeakPtr(), - path, - on_watch_added)); + BrowserThread::PostTask( + BrowserThread::FILE, FROM_HERE, + base::BindOnce(&FileWatchManager::AddFileWatch, + watch_manager_->GetWeakPtr(), path, on_watch_added)); } } @@ -369,11 +367,9 @@ it->second.owners.erase(owner); if (it->second.owners.empty()) { watched_paths_.erase(it); - BrowserThread::PostTask(BrowserThread::FILE, - FROM_HERE, - base::Bind(&FileWatchManager::RemoveFileWatch, - watch_manager_->GetWeakPtr(), - path)); + BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, + base::BindOnce(&FileWatchManager::RemoveFileWatch, + watch_manager_->GetWeakPtr(), path)); } } @@ -425,12 +421,9 @@ base::TimeDelta::FromSeconds(kMinNotificationDelayInSeconds) - base::Time::Now(); BrowserThread::PostDelayedTask( - BrowserThread::UI, - FROM_HERE, - base::Bind(&GalleryWatchManager::OnFilePathChanged, - weak_factory_.GetWeakPtr(), - path, - error), + BrowserThread::UI, FROM_HERE, + base::BindOnce(&GalleryWatchManager::OnFilePathChanged, + weak_factory_.GetWeakPtr(), path, error), delay_to_next_valid_time); } return;
diff --git a/chrome/browser/media_galleries/media_file_system_registry.cc b/chrome/browser/media_galleries/media_file_system_registry.cc index f6c5d7e..5fa4aab6 100644 --- a/chrome/browser/media_galleries/media_file_system_registry.cc +++ b/chrome/browser/media_galleries/media_file_system_registry.cc
@@ -464,7 +464,7 @@ CleanUp(); } BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, - base::Bind(callback, result)); + base::BindOnce(callback, result)); } std::string GetTransientIdForRemovableDeviceId(const std::string& device_id) { @@ -560,7 +560,7 @@ !base::ContainsKey(permitted_galleries, pref_id)) { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind(callback, base::File::FILE_ERROR_NOT_FOUND)); + base::BindOnce(callback, base::File::FILE_ERROR_NOT_FOUND)); return; }
diff --git a/chrome/browser/media_galleries/media_galleries_preferences.cc b/chrome/browser/media_galleries/media_galleries_preferences.cc index 649e310..e87fa6d 100644 --- a/chrome/browser/media_galleries/media_galleries_preferences.cc +++ b/chrome/browser/media_galleries/media_galleries_preferences.cc
@@ -670,10 +670,9 @@ if (!gallery_name.empty()) { pre_initialization_callbacks_waiting_++; content::BrowserThread::PostTaskAndReply( - content::BrowserThread::FILE, - FROM_HERE, - base::Bind(&InitializeImportedMediaGalleryRegistryOnFileThread), - base::Bind( + content::BrowserThread::FILE, FROM_HERE, + base::BindOnce(&InitializeImportedMediaGalleryRegistryOnFileThread), + base::BindOnce( &MediaGalleriesPreferences::OnInitializationCallbackReturned, weak_factory_.GetWeakPtr())); }
diff --git a/chrome/browser/printing/print_preview_data_service.cc b/chrome/browser/printing/print_preview_data_service.cc index 4f6c1e9..1dd26be 100644 --- a/chrome/browser/printing/print_preview_data_service.cc +++ b/chrome/browser/printing/print_preview_data_service.cc
@@ -30,12 +30,13 @@ PrintPreviewDataStore() {} // Get the preview page for the specified |index|. - void GetPreviewDataForIndex(int index, - scoped_refptr<base::RefCountedBytes>* data) { + void GetPreviewDataForIndex( + int index, + scoped_refptr<base::RefCountedBytes>* data) const { if (IsInvalidIndex(index)) return; - PreviewPageDataMap::iterator it = page_data_map_.find(index); + PreviewPageDataMap::const_iterator it = page_data_map_.find(index); if (it != page_data_map_.end()) *data = it->second.get(); } @@ -50,7 +51,7 @@ } // Returns the available draft page count. - int GetAvailableDraftPageCount() { + int GetAvailableDraftPageCount() const { int page_data_map_size = page_data_map_.size(); if (base::ContainsKey(page_data_map_, printing::COMPLETE_PREVIEW_DOCUMENT_INDEX)) @@ -95,7 +96,7 @@ void PrintPreviewDataService::GetDataEntry( int32_t preview_ui_id, int index, - scoped_refptr<base::RefCountedBytes>* data_bytes) { + scoped_refptr<base::RefCountedBytes>* data_bytes) const { *data_bytes = nullptr; PreviewDataStoreMap::const_iterator it = data_store_map_.find(preview_ui_id); if (it != data_store_map_.end()) @@ -119,7 +120,8 @@ data_store_map_.erase(preview_ui_id); } -int PrintPreviewDataService::GetAvailableDraftPageCount(int32_t preview_ui_id) { +int PrintPreviewDataService::GetAvailableDraftPageCount( + int32_t preview_ui_id) const { PreviewDataStoreMap::const_iterator it = data_store_map_.find(preview_ui_id); return (it == data_store_map_.end()) ? 0 : it->second->GetAvailableDraftPageCount();
diff --git a/chrome/browser/printing/print_preview_data_service.h b/chrome/browser/printing/print_preview_data_service.h index 9136c49..9052528 100644 --- a/chrome/browser/printing/print_preview_data_service.h +++ b/chrome/browser/printing/print_preview_data_service.h
@@ -31,8 +31,9 @@ // |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to represent complete preview // data. Use |index| to retrieve a specific preview page data. |data| is set // to NULL if the requested page is not yet available. - void GetDataEntry(int32_t preview_ui_id, int index, - scoped_refptr<base::RefCountedBytes>* data); + void GetDataEntry(int32_t preview_ui_id, + int index, + scoped_refptr<base::RefCountedBytes>* data) const; // Set/Update the data entry in PrintPreviewDataStore. |index| is zero-based // or |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to represent complete @@ -47,7 +48,7 @@ void RemoveEntry(int32_t preview_ui_id); // Returns the available draft page count. - int GetAvailableDraftPageCount(int32_t preview_ui_id); + int GetAvailableDraftPageCount(int32_t preview_ui_id) const; private: friend struct base::DefaultSingletonTraits<PrintPreviewDataService>; @@ -59,7 +60,7 @@ std::map<int32_t, scoped_refptr<PrintPreviewDataStore>>; PrintPreviewDataService(); - virtual ~PrintPreviewDataService(); + ~PrintPreviewDataService(); PreviewDataStoreMap data_store_map_;
diff --git a/chrome/browser/resources/chromeos/login/login_shared.js b/chrome/browser/resources/chromeos/login/login_shared.js index 857bba5..58d3aafe 100644 --- a/chrome/browser/resources/chromeos/login/login_shared.js +++ b/chrome/browser/resources/chromeos/login/login_shared.js
@@ -412,10 +412,11 @@ }; /** - * Shows/hides pin keyboard on the lock screen. + * Changes some UI which depends on the virtual keyboard being shown/hidden. */ - Oobe.showPinKeyboard = function(show) { - Oobe.getInstance().pinHidden = !show; + Oobe.setVirtualKeyboardShown = function(shown) { + Oobe.getInstance().virtualKeyboardShown = shown; + $('pod-row').setFocusedPodPinVisibility(!shown); }; /**
diff --git a/chrome/browser/resources/feedback/css/feedback.css b/chrome/browser/resources/feedback/css/feedback.css index e3b3116..bde797c7 100644 --- a/chrome/browser/resources/feedback/css/feedback.css +++ b/chrome/browser/resources/feedback/css/feedback.css
@@ -9,6 +9,8 @@ body { background-color: #fbfbfb; + display: flex; + flex-direction: column; height: 100%; margin: 0; overflow: auto; @@ -42,6 +44,7 @@ .content { color: #646464; + flex-grow: 1; font-size: 12px; margin: 20px; } @@ -146,6 +149,7 @@ display: -webkit-flex; justify-content: flex-end; left: 20px; + position: absolute; right: 20px; }
diff --git a/chrome/browser/resources/feedback/js/feedback.js b/chrome/browser/resources/feedback/js/feedback.js index a60b24a..ba6e6c1 100644 --- a/chrome/browser/resources/feedback/js/feedback.js +++ b/chrome/browser/resources/feedback/js/feedback.js
@@ -201,7 +201,7 @@ // this window right away. The FeedbackRequest object that represents this // report will take care of sending the report in the background. sendFeedbackReport(useSystemInfo); - window.close(); + scheduleWindowClose(); return true; } @@ -211,7 +211,7 @@ */ function cancel(e) { e.preventDefault(); - window.close(); + scheduleWindowClose(); } /** @@ -281,6 +281,13 @@ } /** + * Close the window after 100ms delay. + */ +function scheduleWindowClose() { + setTimeout(function() { window.close();}, 100); +} + +/** * Initializes our page. * Flow: * .) DOMContent Loaded -> . Request feedbackInfo object @@ -312,7 +319,7 @@ $('srt-accept-button').onclick = function() { chrome.feedbackPrivate.logSrtPromptResult(SrtPromptResult.ACCEPTED); window.open(SRT_DOWNLOAD_PAGE, '_blank'); - window.close(); + scheduleWindowClose(); }; $('close-button').addEventListener('click', function() {
diff --git a/chrome/browser/resources/feedback/js/topbar_handlers.js b/chrome/browser/resources/feedback/js/topbar_handlers.js index 03e43e0..3683364 100644 --- a/chrome/browser/resources/feedback/js/topbar_handlers.js +++ b/chrome/browser/resources/feedback/js/topbar_handlers.js
@@ -23,7 +23,7 @@ }); $('close-button').addEventListener('click', function() { - window.close(); + scheduleWindowClose(); }); $('close-button').addEventListener('mousedown', function(e) {
diff --git a/chrome/browser/resources/settings/site_settings/add_site_dialog.html b/chrome/browser/resources/settings/site_settings/add_site_dialog.html index 30d34f6..9ba2675 100644 --- a/chrome/browser/resources/settings/site_settings/add_site_dialog.html +++ b/chrome/browser/resources/settings/site_settings/add_site_dialog.html
@@ -15,6 +15,10 @@ margin-bottom: 2px; margin-top: 15px; } + + [invisible] { + visibility: hidden; + } </style> <dialog is="cr-dialog" id="dialog" close-text="$i18n{close}"> <div class="title">$i18n{addSiteTitle}</div> @@ -23,7 +27,8 @@ placeholder="$i18n{addSiteExceptionPlaceholder}" value="{{site_}}" on-input="validate_" error-message="$i18n{notValidWebAddress}" autofocus></paper-input> - <paper-checkbox id="incognito" hidden$="[[!showIncognitoSessionOnly_]]"> + <paper-checkbox id="incognito" + invisible$="[[!showIncognitoSessionOnly_]]"> $i18n{incognitoSiteOnly} </paper-checkbox> </div> @@ -31,8 +36,8 @@ <paper-button class="cancel-button" on-tap="onCancelTap_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" id="add" - on-tap="onSubmit_" disabled> + <paper-button class="action-button" id="add" on-tap="onSubmit_" + disabled> $i18n{add} </paper-button> </div>
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.h b/chrome/browser/safe_browsing/chrome_password_protection_service.h index 0bc5e84..4124c86 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.h +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.h
@@ -20,6 +20,7 @@ public: ChromePasswordProtectionService(SafeBrowsingService* sb_service, Profile* profile); + ~ChromePasswordProtectionService() override; protected:
diff --git a/chrome/browser/safe_browsing/srt_fetcher_win.cc b/chrome/browser/safe_browsing/srt_fetcher_win.cc index 2405a4a2..6f2ee0f 100644 --- a/chrome/browser/safe_browsing/srt_fetcher_win.cc +++ b/chrome/browser/safe_browsing/srt_fetcher_win.cc
@@ -650,6 +650,10 @@ pending_process_connection.CreateMessagePipe(&mojo_pipe_token); invocation_.command_line.AppendSwitchASCII( chrome_cleaner::kChromeMojoPipeTokenSwitch, mojo_pipe_token); + invocation_.command_line.AppendSwitchASCII( + chrome_cleaner::kExecutionModeSwitch, + base::IntToString( + static_cast<int>(chrome_cleaner::ExecutionMode::kScanning))); mojo::edk::PlatformChannelPair channel; base::HandlesToInheritVector handles_to_inherit;
diff --git a/chrome/browser/site_per_process_interactive_browsertest.cc b/chrome/browser/site_per_process_interactive_browsertest.cc index 22b41eb..0e0eac4c 100644 --- a/chrome/browser/site_per_process_interactive_browsertest.cc +++ b/chrome/browser/site_per_process_interactive_browsertest.cc
@@ -302,11 +302,12 @@ EXPECT_EQ(main_frame, web_contents->GetFocusedFrame()); } -// TODO(https://crbug.com/702330): Enable this test. +#if (defined(OS_LINUX) && !defined(USE_OZONE)) || defined(OS_WIN) // Ensures that renderers know to advance focus to sibling frames and parent // frames in the presence of mouse click initiated focus changes. +// Verifies against regression of https://crbug.com/702330 IN_PROC_BROWSER_TEST_F(SitePerProcessInteractiveBrowserTest, - DISABLED_TabAndMouseFocusNavigation) { + TabAndMouseFocusNavigation) { GURL main_url(embedded_test_server()->GetURL( "a.com", "/cross_site_iframe_factory.html?a(b,c)")); ui_test_utils::NavigateToURL(browser(), main_url); @@ -320,6 +321,10 @@ content::RenderFrameHost* child2 = ChildFrameAt(main_frame, 1); ASSERT_NE(nullptr, child2); + // Needed to avoid flakiness with --enable-browser-side-navigation. + content::WaitForChildFrameSurfaceReady(child1); + content::WaitForChildFrameSurfaceReady(child2); + // Assign a name to each frame. This will be sent along in test messages // from focus events. EXPECT_TRUE(ExecuteScript(main_frame, "window.name = 'root';")); @@ -336,7 +341,6 @@ // iframe: 55,18;55,67 std::string script = "function onFocus(e) {" - " console.log(window.name+'-focused-'+ e.target.id);" " domAutomationController.setAutomationId(0);" " domAutomationController.send(window.name + '-focused-' + e.target.id);" "}" @@ -433,47 +437,59 @@ EXPECT_EQ("\"root-focused-input1\"", click_element_and_wait_for_message(main_frame_input_coords[0])); EXPECT_EQ(main_frame, web_contents->GetFocusedFrame()); + auto frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child1); EXPECT_EQ("\"child1-focused-input1\"", click_element_and_wait_for_message(child1_input_coords[0])); - EXPECT_EQ(child1, web_contents->GetFocusedFrame()); + frame_focused->Wait(); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(main_frame); EXPECT_EQ("\"root-focused-input1\"", press_tab_and_wait_for_message(true)); - EXPECT_EQ(main_frame, web_contents->GetFocusedFrame()); + frame_focused->Wait(); // Tab from child2 forward to root. EXPECT_EQ("\"root-focused-input2\"", click_element_and_wait_for_message(main_frame_input_coords[1])); EXPECT_EQ(main_frame, web_contents->GetFocusedFrame()); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child2); EXPECT_EQ("\"child2-focused-input2\"", click_element_and_wait_for_message(child2_input_coords[1])); - EXPECT_EQ(child2, web_contents->GetFocusedFrame()); + frame_focused->Wait(); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(main_frame); EXPECT_EQ("\"root-focused-input2\"", press_tab_and_wait_for_message(false)); - EXPECT_EQ(main_frame, web_contents->GetFocusedFrame()); + frame_focused->Wait(); // Tab forward from child1 to child2. + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child2); EXPECT_EQ("\"child2-focused-input1\"", click_element_and_wait_for_message(child2_input_coords[0])); - EXPECT_EQ(child2, web_contents->GetFocusedFrame()); + frame_focused->Wait(); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child1); EXPECT_EQ("\"child1-focused-input2\"", click_element_and_wait_for_message(child1_input_coords[1])); - EXPECT_EQ(child1, web_contents->GetFocusedFrame()); + frame_focused->Wait(); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child2); EXPECT_EQ("\"child2-focused-input1\"", press_tab_and_wait_for_message(false)); - EXPECT_EQ(child2, web_contents->GetFocusedFrame()); + frame_focused->Wait(); // Tab backward from child2 to child1. + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child1); EXPECT_EQ("\"child1-focused-input2\"", click_element_and_wait_for_message(child1_input_coords[1])); - EXPECT_EQ(child1, web_contents->GetFocusedFrame()); + frame_focused->Wait(); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child2); EXPECT_EQ("\"child2-focused-input1\"", click_element_and_wait_for_message(child2_input_coords[0])); - EXPECT_EQ(child2, web_contents->GetFocusedFrame()); + frame_focused->Wait(); + frame_focused = base::MakeUnique<content::FrameFocusedObserver>(child1); EXPECT_EQ("\"child1-focused-input2\"", press_tab_and_wait_for_message(true)); - EXPECT_EQ(child1, web_contents->GetFocusedFrame()); + // EXPECT_EQ(child1, web_contents->GetFocusedFrame()); + frame_focused->Wait(); // Ensure there are no pending focus events after tabbing. EXPECT_EQ("\"root-focused-input1\"", click_element_and_wait_for_message(main_frame_input_coords[0])) << "Unexpected extra focus events."; } +#endif namespace {
diff --git a/chrome/browser/tab_contents/navigation_metrics_recorder.cc b/chrome/browser/tab_contents/navigation_metrics_recorder.cc index 1152f0b..cebf0281 100644 --- a/chrome/browser/tab_contents/navigation_metrics_recorder.cc +++ b/chrome/browser/tab_contents/navigation_metrics_recorder.cc
@@ -7,9 +7,7 @@ #include "base/metrics/histogram_macros.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/tab_contents/origins_seen_service_factory.h" #include "components/navigation_metrics/navigation_metrics.h" -#include "components/navigation_metrics/origins_seen_service.h" #include "components/rappor/public/rappor_utils.h" #include "components/rappor/rappor_service_impl.h" #include "content/public/browser/browser_context.h" @@ -77,17 +75,12 @@ return; content::BrowserContext* context = web_contents()->GetBrowserContext(); - navigation_metrics::OriginsSeenService* service = - OriginsSeenServiceFactory::GetForBrowserContext(context); content::NavigationEntry* last_committed_entry = web_contents()->GetController().GetLastCommittedEntry(); - const url::Origin origin(last_committed_entry->GetVirtualURL()); - bool have_already_seen_origin = service->Insert(origin); navigation_metrics::RecordMainFrameNavigation( last_committed_entry->GetVirtualURL(), - navigation_handle->IsSameDocument(), context->IsOffTheRecord(), - have_already_seen_origin); + navigation_handle->IsSameDocument(), context->IsOffTheRecord()); // Record the domain and registry of the URL that resulted in a navigation to // a |data:| URL, either by redirects or user clicking a link.
diff --git a/chrome/browser/tab_contents/origins_seen_service_factory.cc b/chrome/browser/tab_contents/origins_seen_service_factory.cc deleted file mode 100644 index fc14b96e..0000000 --- a/chrome/browser/tab_contents/origins_seen_service_factory.cc +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright 2016 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/tab_contents/origins_seen_service_factory.h" - -#include "chrome/browser/profiles/incognito_helpers.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/navigation_metrics/origins_seen_service.h" - -// static -navigation_metrics::OriginsSeenService* -OriginsSeenServiceFactory::GetForBrowserContext( - content::BrowserContext* context) { - return static_cast<navigation_metrics::OriginsSeenService*>( - GetInstance()->GetServiceForBrowserContext(context, true)); -} - -// static -OriginsSeenServiceFactory* OriginsSeenServiceFactory::GetInstance() { - return base::Singleton<OriginsSeenServiceFactory>::get(); -} - -// static -KeyedService* OriginsSeenServiceFactory::BuildInstanceFor( - content::BrowserContext* context) { - return new navigation_metrics::OriginsSeenService(); -} - -OriginsSeenServiceFactory::OriginsSeenServiceFactory() - : BrowserContextKeyedServiceFactory( - "OriginsSeenService", - BrowserContextDependencyManager::GetInstance()) {} - -OriginsSeenServiceFactory::~OriginsSeenServiceFactory() {} - -content::BrowserContext* OriginsSeenServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - -KeyedService* OriginsSeenServiceFactory::BuildServiceInstanceFor( - content::BrowserContext* context) const { - return BuildInstanceFor(context); -}
diff --git a/chrome/browser/tab_contents/origins_seen_service_factory.h b/chrome/browser/tab_contents/origins_seen_service_factory.h deleted file mode 100644 index a38f6f3..0000000 --- a/chrome/browser/tab_contents/origins_seen_service_factory.h +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2016 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_TAB_CONTENTS_ORIGINS_SEEN_SERVICE_FACTORY_H_ -#define CHROME_BROWSER_TAB_CONTENTS_ORIGINS_SEEN_SERVICE_FACTORY_H_ - -#include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" - -namespace navigation_metrics { -class OriginsSeenService; -} - -class OriginsSeenServiceFactory : public BrowserContextKeyedServiceFactory { - public: - static navigation_metrics::OriginsSeenService* GetForBrowserContext( - content::BrowserContext* context); - - static OriginsSeenServiceFactory* GetInstance(); - - // Used to create instances for testing. - static KeyedService* BuildInstanceFor(content::BrowserContext* context); - - private: - friend struct base::DefaultSingletonTraits<OriginsSeenServiceFactory>; - - OriginsSeenServiceFactory(); - ~OriginsSeenServiceFactory() override; - - // BrowserContextKeyedServiceFactory: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; - KeyedService* BuildServiceInstanceFor( - content::BrowserContext* context) const override; -}; - -#endif // CHROME_BROWSER_TAB_CONTENTS_ORIGINS_SEEN_SERVICE_FACTORY_H_
diff --git a/chrome/browser/ui/ash/cast_config_client_media_router.cc b/chrome/browser/ui/ash/cast_config_client_media_router.cc index 9074423..a2b6afa 100644 --- a/chrome/browser/ui/ash/cast_config_client_media_router.cc +++ b/chrome/browser/ui/ash/cast_config_client_media_router.cc
@@ -20,8 +20,8 @@ #include "chrome/browser/media/router/media_router_feature.h" #include "chrome/browser/media/router/media_routes_observer.h" #include "chrome/browser/media/router/media_sinks_observer.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/common/media_router/media_source_helper.h" #include "chrome/common/url_constants.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_source.h"
diff --git a/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc b/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc index ab0441ea..79ecb4de 100644 --- a/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc +++ b/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc
@@ -11,9 +11,9 @@ #include "base/macros.h" #include "chrome/browser/media/router/media_routes_observer.h" #include "chrome/browser/media/router/media_sinks_observer.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" #include "chrome/browser/ui/ash/cast_config_client_media_router.h" +#include "chrome/common/media_router/media_source_helper.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/test/test_utils.h" #include "url/gurl.h"
diff --git a/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc b/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc index 462a087..1818c11 100644 --- a/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc +++ b/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc
@@ -15,9 +15,11 @@ #include "chrome/common/extensions/chrome_extension_messages.h" #include "content/public/browser/ax_event_notification_details.h" #include "content/public/browser/browser_context.h" +#include "content/public/browser/render_frame_host.h" #include "ui/accessibility/ax_action_data.h" #include "ui/accessibility/ax_enums.h" #include "ui/accessibility/ax_tree_id_registry.h" +#include "ui/accessibility/platform/aura_window_properties.h" #include "ui/aura/env.h" #include "ui/aura/window.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" @@ -25,6 +27,7 @@ #include "ui/views/widget/widget.h" #if defined(OS_CHROMEOS) +#include "ash/shell.h" // nogncheck #include "ash/wm/window_util.h" // nogncheck #endif @@ -81,10 +84,16 @@ SendEvent(context, obj, ui::AX_EVENT_ALERT); } -void AutomationManagerAura::PerformAction( - const ui::AXActionData& data) { +void AutomationManagerAura::PerformAction(const ui::AXActionData& data) { CHECK(enabled_); + // Unlike all of the other actions, a hit test requires determining the + // node to perform the action on first. + if (data.action == ui::AX_ACTION_HIT_TEST) { + PerformHitTest(data); + return; + } + current_tree_->HandleAccessibleAction(data); } @@ -161,3 +170,60 @@ pending_events_copy[i].second); } } + +void AutomationManagerAura::PerformHitTest( + const ui::AXActionData& original_action) { +#if defined(OS_CHROMEOS) + ui::AXActionData action = original_action; + aura::Window* root_window = ash::Shell::Get()->GetPrimaryRootWindow(); + if (!root_window) + return; + + // Determine which aura Window is associated with the target point. + aura::Window* window = + root_window->GetEventHandlerForPoint(action.target_point); + if (!window) + return; + + // Convert point to local coordinates of the hit window. + aura::Window::ConvertPointToTarget(root_window, window, &action.target_point); + + // If the window has a child AX tree ID, forward the action to the + // associated AXHostDelegate or RenderFrameHost. + ui::AXTreeIDRegistry::AXTreeID child_ax_tree_id = + window->GetProperty(ui::kChildAXTreeID); + if (child_ax_tree_id != ui::AXTreeIDRegistry::kNoAXTreeID) { + ui::AXTreeIDRegistry* registry = ui::AXTreeIDRegistry::GetInstance(); + ui::AXHostDelegate* delegate = registry->GetHostDelegate(child_ax_tree_id); + if (delegate) { + delegate->PerformAction(action); + return; + } + + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromAXTreeID(child_ax_tree_id); + if (rfh) + rfh->AccessibilityPerformAction(action); + return; + } + + // If the window doesn't have a child tree ID, try to fire the event + // on a View. + views::Widget* widget = views::Widget::GetWidgetForNativeView(window); + if (widget) { + views::View* root_view = widget->GetRootView(); + views::View* hit_view = + root_view->GetEventHandlerForPoint(action.target_point); + if (hit_view) { + hit_view->NotifyAccessibilityEvent(action.hit_test_event_to_fire, true); + return; + } + } + + // Otherwise, fire the event directly on the Window. + views::AXAuraObjWrapper* window_wrapper = + views::AXAuraObjCache::GetInstance()->GetOrCreate(window); + if (window_wrapper) + SendEvent(nullptr, window_wrapper, action.hit_test_event_to_fire); +#endif +}
diff --git a/chrome/browser/ui/aura/accessibility/automation_manager_aura.h b/chrome/browser/ui/aura/accessibility/automation_manager_aura.h index 1d1baef..ecb3c60 100644 --- a/chrome/browser/ui/aura/accessibility/automation_manager_aura.h +++ b/chrome/browser/ui/aura/accessibility/automation_manager_aura.h
@@ -78,6 +78,8 @@ views::AXAuraObjWrapper* aura_obj, ui::AXEvent event_type); + void PerformHitTest(const ui::AXActionData& data); + // Whether automation support for views is enabled. bool enabled_;
diff --git a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm index d884dd1..a840011 100644 --- a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm +++ b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
@@ -6,7 +6,6 @@ #include <memory> -#include "base/mac/foundation_util.h" #include "base/mac/mac_util.h" #import "base/mac/scoped_nsobject.h" #import "base/mac/sdk_forward_declarations.h" @@ -54,15 +53,16 @@ }; // The touch bar's identifier. -NSString* const kBrowserWindowTouchBarId = @"browser-window"; +const NSTouchBarCustomizationIdentifier kBrowserWindowTouchBarId = + @"BrowserWindowTouchBarId"; // Touch bar items identifiers. -NSString* const kBackForwardTouchId = @"BACK-FWD"; -NSString* const kReloadOrStopTouchId = @"RELOAD-STOP"; -NSString* const kHomeTouchId = @"HOME"; -NSString* const kSearchTouchId = @"SEARCH"; -NSString* const kStarTouchId = @"BOOKMARK"; -NSString* const kNewTabTouchId = @"NEW-TAB"; +const NSTouchBarItemIdentifier kBackForwardTouchId = @"BackForwardTouchId"; +const NSTouchBarItemIdentifier kReloadOrStopTouchId = @"ReloadOrStopTouchId"; +const NSTouchBarItemIdentifier kHomeTouchId = @"HomeTouchId"; +const NSTouchBarItemIdentifier kSearchTouchId = @"SearchTouchId"; +const NSTouchBarItemIdentifier kStarTouchId = @"StarTouchId"; +const NSTouchBarItemIdentifier kNewTabTouchId = @"NewTabTouchId"; // The button indexes in the back and forward segment control. const int kBackSegmentIndex = 0; @@ -75,8 +75,9 @@ // The size of the touch bar icons. const int kTouchBarIconSize = 16; -// The min width of the search button in the touch bar. -const int kSearchBtnMinWidth = 205; +// The width of the search button in the touch bar. +const int kSearchBtnWidthWithHomeBtn = 205; +const int kSearchBtnWidthWithoutHomeBtn = 280; // Creates an NSImage from the given VectorIcon. NSImage* CreateNSImageFromIcon(const gfx::VectorIcon& icon, @@ -101,18 +102,6 @@ return button; } -NSString* GetTouchBarId(NSString* const touch_bar_id) { - NSString* chrome_bundle_id = - base::SysUTF8ToNSString(base::mac::BaseBundleID()); - return [NSString stringWithFormat:@"%@.%@", chrome_bundle_id, touch_bar_id]; -} - -NSString* GetTouchBarItemId(NSString* const touch_bar_id, - NSString* const item_id) { - return [NSString - stringWithFormat:@"%@-%@", GetTouchBarId(touch_bar_id), item_id]; -} - TouchBarAction TouchBarActionFromCommand(int command) { switch (command) { case IDC_BACK: @@ -216,29 +205,22 @@ base::scoped_nsobject<NSTouchBar> touchBar( [[NSClassFromString(@"NSTouchBar") alloc] init]); - NSMutableArray* customIdentifiers = [NSMutableArray arrayWithCapacity:7]; - NSMutableArray* defaultIdentifiers = [NSMutableArray arrayWithCapacity:6]; - - NSArray* touchBarItems = @[ - kBackForwardTouchId, kReloadOrStopTouchId, kHomeTouchId, kSearchTouchId, - kStarTouchId, kNewTabTouchId - ]; - - for (NSString* item in touchBarItems) { - NSString* itemIdentifier = - GetTouchBarItemId(kBrowserWindowTouchBarId, item); - [customIdentifiers addObject:itemIdentifier]; - - // Don't add the home button if it's not shown in the toolbar. - if (showHomeButton_.GetValue() || ![item isEqualTo:kHomeTouchId]) - [defaultIdentifiers addObject:itemIdentifier]; + NSArray* touchBarItemIdentifiers; + if (showHomeButton_.GetValue()) { + touchBarItemIdentifiers = @[ + kBackForwardTouchId, kReloadOrStopTouchId, kHomeTouchId, kSearchTouchId, + kStarTouchId, kNewTabTouchId + ]; + } else { + touchBarItemIdentifiers = @[ + kBackForwardTouchId, kReloadOrStopTouchId, kSearchTouchId, kStarTouchId, + kNewTabTouchId + ]; } - [customIdentifiers addObject:NSTouchBarItemIdentifierFlexibleSpace]; - - [touchBar setCustomizationIdentifier:GetTouchBarId(kBrowserWindowTouchBarId)]; - [touchBar setDefaultItemIdentifiers:defaultIdentifiers]; - [touchBar setCustomizationAllowedItemIdentifiers:customIdentifiers]; + [touchBar setCustomizationIdentifier:kBrowserWindowTouchBarId]; + [touchBar setDefaultItemIdentifiers:touchBarItemIdentifiers]; + [touchBar setCustomizationAllowedItemIdentifiers:touchBarItemIdentifiers]; [touchBar setDelegate:self]; return touchBar.autorelease(); @@ -251,35 +233,23 @@ base::scoped_nsobject<NSCustomTouchBarItem> touchBarItem([[NSClassFromString( @"NSCustomTouchBarItem") alloc] initWithIdentifier:identifier]); - if ([identifier hasSuffix:kBackForwardTouchId]) { + if ([identifier isEqualTo:kBackForwardTouchId]) { [touchBarItem setView:[self backOrForwardTouchBarView]]; - [touchBarItem setCustomizationLabel: - l10n_util::GetNSString( - IDS_TOUCH_BAR_BACK_FORWARD_CUSTOMIZATION_LABEL)]; - } else if ([identifier hasSuffix:kReloadOrStopTouchId]) { + } else if ([identifier isEqualTo:kReloadOrStopTouchId]) { const gfx::VectorIcon& icon = isPageLoading_ ? kNavigateStopIcon : kNavigateReloadIcon; int commandId = isPageLoading_ ? IDC_STOP : IDC_RELOAD; int tooltipId = isPageLoading_ ? IDS_TOOLTIP_STOP : IDS_TOOLTIP_RELOAD; [touchBarItem setView:CreateTouchBarButton(icon, self, commandId, tooltipId)]; - [touchBarItem setCustomizationLabel: - l10n_util::GetNSString( - IDS_TOUCH_BAR_STOP_RELOAD_CUSTOMIZATION_LABEL)]; - } else if ([identifier hasSuffix:kHomeTouchId]) { + } else if ([identifier isEqualTo:kHomeTouchId]) { [touchBarItem setView:CreateTouchBarButton(kNavigateHomeIcon, self, IDC_HOME, IDS_TOOLTIP_HOME)]; - [touchBarItem - setCustomizationLabel:l10n_util::GetNSString( - IDS_TOUCH_BAR_HOME_CUSTOMIZATION_LABEL)]; - } else if ([identifier hasSuffix:kNewTabTouchId]) { + } else if ([identifier isEqualTo:kNewTabTouchId]) { [touchBarItem setView:CreateTouchBarButton(kNewTabMacTouchbarIcon, self, IDC_NEW_TAB, IDS_TOOLTIP_NEW_TAB)]; - [touchBarItem - setCustomizationLabel:l10n_util::GetNSString( - IDS_TOUCH_BAR_NEW_TAB_CUSTOMIZATION_LABEL)]; - } else if ([identifier hasSuffix:kStarTouchId]) { + } else if ([identifier isEqualTo:kStarTouchId]) { const gfx::VectorIcon& icon = isStarred_ ? toolbar::kStarActiveIcon : toolbar::kStarIcon; SkColor iconColor = @@ -287,13 +257,8 @@ int tooltipId = isStarred_ ? IDS_TOOLTIP_STARRED : IDS_TOOLTIP_STAR; [touchBarItem setView:CreateTouchBarButton(icon, self, IDC_BOOKMARK_PAGE, tooltipId, iconColor)]; - [touchBarItem - setCustomizationLabel:l10n_util::GetNSString( - IDS_TOUCH_BAR_BOOKMARK_CUSTOMIZATION_LABEL)]; - } else if ([identifier hasSuffix:kSearchTouchId]) { + } else if ([identifier isEqualTo:kSearchTouchId]) { [touchBarItem setView:[self searchTouchBarView]]; - [touchBarItem setCustomizationLabel:l10n_util::GetNSString( - IDS_TOUCH_BAR_GOOGLE_SEARCH)]; } return touchBarItem.autorelease(); @@ -364,12 +329,9 @@ action:@selector(executeCommand:)]; searchButton.imageHugsTitle = YES; searchButton.tag = IDC_FOCUS_LOCATION; - [searchButton.widthAnchor - constraintGreaterThanOrEqualToConstant:kSearchBtnMinWidth] - .active = YES; - [searchButton - setContentHuggingPriority:1.0 - forOrientation:NSLayoutConstraintOrientationHorizontal]; + int width = showHomeButton_.GetValue() ? kSearchBtnWidthWithHomeBtn + : kSearchBtnWidthWithoutHomeBtn; + [searchButton.widthAnchor constraintEqualToConstant:width].active = YES; return searchButton; }
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc b/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc index 5ebc37b..d7a472a2 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc
@@ -6,7 +6,7 @@ #include "base/command_line.h" #include "chrome/browser/ui/startup/startup_tab_provider.h" -#include "chrome/common/url_constants.cc" +#include "chrome/common/url_constants.h" #include "testing/gtest/include/gtest/gtest.h" using Creator = StartupBrowserCreatorImpl;
diff --git a/chrome/browser/ui/toolbar/media_router_action.cc b/chrome/browser/ui/toolbar/media_router_action.cc index 87bbc08..cec28275e 100644 --- a/chrome/browser/ui/toolbar/media_router_action.cc +++ b/chrome/browser/ui/toolbar/media_router_action.cc
@@ -6,8 +6,6 @@ #include "base/metrics/user_metrics.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_router_factory.h" #include "chrome/browser/media/router/media_router_metrics.h" @@ -18,6 +16,8 @@ #include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h" #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h" #include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/media_route.h" #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/color_palette.h"
diff --git a/chrome/browser/ui/views/frame/browser_frame_mus.cc b/chrome/browser/ui/views/frame/browser_frame_mus.cc index 44dbe82..5cec3a1 100644 --- a/chrome/browser/ui/views/frame/browser_frame_mus.cc +++ b/chrome/browser/ui/views/frame/browser_frame_mus.cc
@@ -12,6 +12,7 @@ #include "chrome/common/extensions/extension_constants.h" #include "services/ui/public/cpp/property_type_converters.h" #include "services/ui/public/interfaces/window_tree.mojom.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/views/mus/desktop_window_tree_host_mus.h" #include "ui/views/mus/mus_client.h" #include "ui/views/mus/window_manager_frame_values.h" @@ -47,9 +48,12 @@ mojo::ConvertTo<std::vector<uint8_t>>( static_cast<int32_t>(ash::mojom::WindowStyle::BROWSER)); #endif + aura::WindowTreeHostMusInitParams window_tree_host_init_params = + aura::CreateInitParamsForTopLevel( + views::MusClient::Get()->window_tree_client(), std::move(properties)); std::unique_ptr<views::DesktopWindowTreeHostMus> desktop_window_tree_host = base::MakeUnique<views::DesktopWindowTreeHostMus>( - browser_frame_, this, cc::FrameSinkId(), &properties); + std::move(window_tree_host_init_params), browser_frame_, this); // BrowserNonClientFrameViewMus::OnBoundsChanged() takes care of updating // the insets. desktop_window_tree_host->set_auto_update_client_area(false);
diff --git a/chrome/browser/ui/views/hung_renderer_view_browsertest.cc b/chrome/browser/ui/views/hung_renderer_view_browsertest.cc index 63087759..e6d85b8 100644 --- a/chrome/browser/ui/views/hung_renderer_view_browsertest.cc +++ b/chrome/browser/ui/views/hung_renderer_view_browsertest.cc
@@ -8,7 +8,7 @@ #include "base/command_line.h" #include "chrome/browser/platform_util.h" -#include "chrome/browser/ui/browser.cc" +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tab_dialogs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/test/test_browser_dialog.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/base_webui_handler.h b/chrome/browser/ui/webui/chromeos/login/base_webui_handler.h index 9d8c121..e0d3f57 100644 --- a/chrome/browser/ui/webui/chromeos/login/base_webui_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/base_webui_handler.h
@@ -225,12 +225,6 @@ void SetBaseScreen(BaseScreen* base_screen); - // Returns true if JS side has sent a screenStateInitialize event. - // TODO(jdufault): Remove after resolving crbug.com/699798 - bool is_js_initialized_and_ready() const { - return js_calls_container_->is_initialized(); - } - private: // Calls Javascript method. //
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc index 428e632..4b1cd8b 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -256,8 +256,8 @@ CallJSOrDefer("showControlBar", show); } -void CoreOobeHandler::ShowPinKeyboard(bool show) { - CallJSOrDefer("showPinKeyboard", show); +void CoreOobeHandler::SetVirtualKeyboardShown(bool shown) { + CallJSOrDefer("setVirtualKeyboardShown", shown); } void CoreOobeHandler::SetClientAreaSize(int width, int height) { @@ -301,6 +301,15 @@ void CoreOobeHandler::HandleSetForceDisableVirtualKeyboard(bool disable) { scoped_keyboard_disabler_.SetForceDisableVirtualKeyboard(disable); + + if (disable) { + keyboard::KeyboardController* controller = + keyboard::KeyboardController::GetInstance(); + if (controller) { + controller->HideKeyboard( + keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); + } + } } void CoreOobeHandler::HandleEnableScreenMagnifier(bool enabled) { @@ -441,7 +450,7 @@ if (keyboard_controller) { gfx::Rect bounds = keyboard_controller->current_keyboard_bounds(); ShowControlBar(bounds.IsEmpty()); - ShowPinKeyboard(bounds.IsEmpty()); + SetVirtualKeyboardShown(!bounds.IsEmpty()); } }
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h index cdf33b6..959d02a 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
@@ -91,7 +91,7 @@ void ClearErrors() override; void ReloadContent(const base::DictionaryValue& dictionary) override; void ShowControlBar(bool show) override; - void ShowPinKeyboard(bool show) override; + void SetVirtualKeyboardShown(bool displayed) override; void SetClientAreaSize(int width, int height) override; void ShowDeviceResetScreen() override; void ShowEnableDebuggingScreen() override;
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index c67657c9..c2e02ebf 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -1034,8 +1034,6 @@ void SigninScreenHandler::OnUserImageChanged(const user_manager::User& user) { if (page_is_ready()) { - // TODO(jdufault): Remove DCHECK after resolving crbug.com/699798 - DCHECK(is_js_initialized_and_ready()); CallJSOrDefer("login.AccountPickerScreen.updateUserImage", user.GetAccountId()); } @@ -1308,8 +1306,6 @@ void SigninScreenHandler::LoadUsers(const base::ListValue& users_list, bool showGuest) { - // TODO(jdufault): Remove DCHECK after resolving crbug.com/699798 - DCHECK(is_js_initialized_and_ready()); CallJSOrDefer("login.AccountPickerScreen.loadUsers", users_list, delegate_->IsShowGuest()); }
diff --git a/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources.h b/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources.h index 72fad40f..d6fb466 100644 --- a/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources.h +++ b/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources.h
@@ -8,8 +8,8 @@ #include <map> #include <unordered_set> -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" +#include "chrome/common/media_router/media_source.h" namespace media_router {
diff --git a/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources_unittest.cc b/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources_unittest.cc index 0e2c24c..a056b7a83 100644 --- a/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources_unittest.cc +++ b/chrome/browser/ui/webui/media_router/cast_modes_with_media_sources_unittest.cc
@@ -4,7 +4,7 @@ #include "chrome/browser/ui/webui/media_router/cast_modes_with_media_sources.h" -#include "chrome/browser/media/router/media_source_helper.h" +#include "chrome/common/media_router/media_source_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.cc b/chrome/browser/ui/webui/media_router/media_router_ui.cc index 5a1c888..96ff4e6 100644 --- a/chrome/browser/ui/webui/media_router/media_router_ui.cc +++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc
@@ -18,25 +18,25 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/media/router/create_presentation_connection_request.h" -#include "chrome/browser/media/router/issue.h" #include "chrome/browser/media/router/issues_observer.h" -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_router_factory.h" #include "chrome/browser/media/router/media_router_metrics.h" #include "chrome/browser/media/router/media_routes_observer.h" -#include "chrome/browser/media/router/media_sink.h" #include "chrome/browser/media/router/media_sinks_observer.h" -#include "chrome/browser/media/router/media_source.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h" #include "chrome/browser/media/router/presentation_service_delegate_impl.h" -#include "chrome/browser/media/router/route_request_result.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h" #include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h" #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_request_result.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "chrome/grit/generated_resources.h"
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.h b/chrome/browser/ui/webui/media_router/media_router_ui.h index c2d1dca..2fb4a2c4 100644 --- a/chrome/browser/ui/webui/media_router/media_router_ui.h +++ b/chrome/browser/ui/webui/media_router/media_router_ui.h
@@ -14,13 +14,13 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/timer/timer.h" -#include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/media/router/presentation_service_delegate_impl.h" #include "chrome/browser/ui/webui/constrained_web_dialog_ui.h" #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" #include "chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h" #include "chrome/browser/ui/webui/media_router/query_result_manager.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/media_source.h" #include "content/public/browser/web_ui_data_source.h" #include "third_party/icu/source/common/unicode/uversion.h" #include "url/gurl.h"
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 c79cf6ea..716d1a78 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
@@ -10,13 +10,13 @@ #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/media/router/create_presentation_connection_request.h" -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" -#include "chrome/browser/media/router/route_request_result.h" #include "chrome/browser/media/router/test_helper.h" #include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" +#include "chrome/common/media_router/media_route.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_request_result.h" #include "chrome/grit/generated_resources.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc index dd933f0..1e22dd81 100644 --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
@@ -15,13 +15,13 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/values.h" -#include "chrome/browser/media/router/issue.h" #include "chrome/browser/media/router/media_router_metrics.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" #include "chrome/browser/ui/webui/media_router/media_router_ui.h" +#include "chrome/common/media_router/issue.h" #include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" #include "components/browser_sync/profile_sync_service.h" @@ -31,7 +31,6 @@ #include "extensions/common/constants.h" #include "ui/base/l10n/l10n_util.h" - namespace media_router { namespace {
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h index bdb28fc..33a005be 100644 --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
@@ -9,9 +9,9 @@ #include <vector> #include "base/macros.h" -#include "chrome/browser/media/router/issue.h" #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" #include "chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h" +#include "chrome/common/media_router/issue.h" #include "components/signin/core/browser/account_info.h" #include "content/public/browser/web_ui_message_handler.h" #include "ui/gfx/geometry/size.h"
diff --git a/chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h b/chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h index 4393553ed..7006f68 100644 --- a/chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h +++ b/chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h
@@ -7,8 +7,8 @@ #include <set> -#include "chrome/browser/media/router/media_sink.h" #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" +#include "chrome/common/media_router/media_sink.h" namespace media_router {
diff --git a/chrome/browser/ui/webui/media_router/query_result_manager.h b/chrome/browser/ui/webui/media_router/query_result_manager.h index da4681f..a1ab37e 100644 --- a/chrome/browser/ui/webui/media_router/query_result_manager.h +++ b/chrome/browser/ui/webui/media_router/query_result_manager.h
@@ -15,11 +15,11 @@ #include "base/macros.h" #include "base/observer_list.h" #include "chrome/browser/media/router/media_routes_observer.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source.h" #include "chrome/browser/ui/webui/media_router/cast_modes_with_media_sources.h" #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" #include "chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" namespace url { class Origin;
diff --git a/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc b/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc index 8a9bbe98..571a83b8 100644 --- a/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc +++ b/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc
@@ -2,14 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/ui/webui/media_router/query_result_manager.h" + #include "base/bind.h" #include "base/containers/hash_tables.h" #include "base/json/json_writer.h" #include "base/macros.h" #include "chrome/browser/media/router/media_sinks_observer.h" -#include "chrome/browser/media/router/media_source_helper.h" #include "chrome/browser/media/router/mock_media_router.h" -#include "chrome/browser/ui/webui/media_router/query_result_manager.h" +#include "chrome/common/media_router/media_source_helper.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc index 8ab3ddd..9dc9d445 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -1019,7 +1019,7 @@ !select_file_dialog_->IsRunning(platform_util::GetTopLevel( preview_web_contents()->GetNativeView()))) { // Pre-populating select file dialog with print job title. - base::string16 print_job_title_utf16 = + const base::string16& print_job_title_utf16 = print_preview_ui()->initiator_title(); #if defined(OS_WIN)
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index 0378569..af6bab18 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -66,6 +66,8 @@ const char kBasicPrintShortcut[] = "(Ctrl+Shift+P)"; #endif +PrintPreviewUI::TestingDelegate* g_testing_delegate = nullptr; + // Thread-safe wrapper around a std::map to keep track of mappings from // PrintPreviewUI IDs to most recent print preview request IDs. class PrintPreviewRequestIdMapWithLock { @@ -434,8 +436,6 @@ return source; } -PrintPreviewUI::TestingDelegate* g_testing_delegate = NULL; - } // namespace PrintPreviewUI::PrintPreviewUI(content::WebUI* web_ui) @@ -463,29 +463,31 @@ } PrintPreviewUI::~PrintPreviewUI() { - print_preview_data_service()->RemoveEntry(id_); + PrintPreviewDataService::GetInstance()->RemoveEntry(id_); g_print_preview_request_id_map.Get().Erase(id_); g_print_preview_ui_id_map.Get().Remove(id_); } void PrintPreviewUI::GetPrintPreviewDataForIndex( int index, - scoped_refptr<base::RefCountedBytes>* data) { - print_preview_data_service()->GetDataEntry(id_, index, data); + scoped_refptr<base::RefCountedBytes>* data) const { + PrintPreviewDataService::GetInstance()->GetDataEntry(id_, index, data); } void PrintPreviewUI::SetPrintPreviewDataForIndex( int index, scoped_refptr<base::RefCountedBytes> data) { - print_preview_data_service()->SetDataEntry(id_, index, std::move(data)); + PrintPreviewDataService::GetInstance()->SetDataEntry(id_, index, + std::move(data)); } void PrintPreviewUI::ClearAllPreviewData() { - print_preview_data_service()->RemoveEntry(id_); + PrintPreviewDataService::GetInstance()->RemoveEntry(id_); } -int PrintPreviewUI::GetAvailableDraftPageCount() { - return print_preview_data_service()->GetAvailableDraftPageCount(id_); +int PrintPreviewUI::GetAvailableDraftPageCount() const { + return PrintPreviewDataService::GetInstance()->GetAvailableDraftPageCount( + id_); } void PrintPreviewUI::SetInitiatorTitle( @@ -641,10 +643,6 @@ web_ui()->CallJavascriptFunctionUnsafe("invalidPrinterSettings"); } -PrintPreviewDataService* PrintPreviewUI::print_preview_data_service() { - return PrintPreviewDataService::GetInstance(); -} - void PrintPreviewUI::OnHidePreviewDialog() { WebContents* preview_dialog = web_ui()->GetWebContents(); printing::BackgroundPrintingManager* background_printing_manager =
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chrome/browser/ui/webui/print_preview/print_preview_ui.h index 143917b..360a1cd2 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.h +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.h
@@ -17,7 +17,6 @@ #include "chrome/browser/ui/webui/constrained_web_dialog_ui.h" #include "printing/features/features.h" -class PrintPreviewDataService; class PrintPreviewHandler; struct PrintHostMsg_DidGetPreviewPageCount_Params; struct PrintHostMsg_RequestPrintPreview_Params; @@ -44,8 +43,9 @@ // Gets the print preview |data|. |index| is zero-based, and can be // |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to get the entire preview // document. - void GetPrintPreviewDataForIndex(int index, - scoped_refptr<base::RefCountedBytes>* data); + void GetPrintPreviewDataForIndex( + int index, + scoped_refptr<base::RefCountedBytes>* data) const; // Sets the print preview |data|. |index| is zero-based, and can be // |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to set the entire preview @@ -57,18 +57,18 @@ void ClearAllPreviewData(); // Returns the available draft page count. - int GetAvailableDraftPageCount(); + int GetAvailableDraftPageCount() const; // Setters void SetInitiatorTitle(const base::string16& initiator_title); - base::string16 initiator_title() { return initiator_title_; } + const base::string16& initiator_title() const { return initiator_title_; } - bool source_is_modifiable() { return source_is_modifiable_; } + bool source_is_modifiable() const { return source_is_modifiable_; } - bool source_has_selection() { return source_has_selection_; } + bool source_has_selection() const { return source_has_selection_; } - bool print_selection_only() { return print_selection_only_; } + bool print_selection_only() const { return print_selection_only_; } // Set initial settings for PrintPreviewUI. static void SetInitialParams( @@ -162,9 +162,6 @@ FRIEND_TEST_ALL_PREFIXES(PrintPreviewDialogControllerUnitTest, TitleAfterReload); - // Returns the Singleton instance of the PrintPreviewDataService. - PrintPreviewDataService* print_preview_data_service(); - base::TimeTicks initial_preview_start_time_; // The unique ID for this class instance. Stored here to avoid calling
diff --git a/chrome/browser/win/jumplist.cc b/chrome/browser/win/jumplist.cc index 18c7922..461c5a4 100644 --- a/chrome/browser/win/jumplist.cc +++ b/chrome/browser/win/jumplist.cc
@@ -196,6 +196,8 @@ // and 40% to "recently-closed" items, respectively. // Nevertheless, if there are not so many items in |recently_closed_pages|, // we give the remaining slots to "most-visited" items. + // The default maximum number of items to display in JumpList is 10. + // https://msdn.microsoft.com/en-us/library/windows/desktop/dd378398(v=vs.85).aspx const int kMostVisited = 60; const int kRecentlyClosed = 40; const int kTotal = kMostVisited + kRecentlyClosed; @@ -208,6 +210,9 @@ recently_closed_items = recently_closed_pages.size(); } + // Delete the content in JumpListIcons folder and log the results to UMA. + DeleteDirectoryContentAndLogResults(icon_dir, kFileDeleteLimit); + // If JumpListIcons directory doesn't exist (we have tried to create it // already) or is not empty, skip updating the jumplist icons. The jumplist // links should be updated anyway, as it doesn't involve disk IO. In this @@ -277,9 +282,6 @@ local_recently_closed_pages = data->recently_closed_pages_; } - // Delete the content in JumpListIcons folder and log the results to UMA. - DeleteDirectoryContentAndLogResults(icon_dir, kFileDeleteLimit); - // Create a new JumpList and replace the current JumpList with it. The // jumplist links are updated anyway, while the jumplist icons may not as // mentioned above.
diff --git a/chrome/browser/win/jumplist_file_util.h b/chrome/browser/win/jumplist_file_util.h index f9ab7a8..b2263879 100644 --- a/chrome/browser/win/jumplist_file_util.h +++ b/chrome/browser/win/jumplist_file_util.h
@@ -8,7 +8,7 @@ #include "base/files/file_path.h" // Maximum number of icon files allowed to delete per jumplist update. -const int kFileDeleteLimit = 60; +const int kFileDeleteLimit = 30; // Folder delete status enumeration, used in Delete* methods below. // This is used for UMA. Do not delete entries, and keep in sync with
diff --git a/chrome/browser/win/jumplist_updater.cc b/chrome/browser/win/jumplist_updater.cc index b4231686..4265de11 100644 --- a/chrome/browser/win/jumplist_updater.cc +++ b/chrome/browser/win/jumplist_updater.cc
@@ -190,7 +190,8 @@ // Add items to the "Task" category. for (ShellLinkItemList::const_iterator it = link_items.begin(); it != link_items.end(); ++it) { - AddShellLink(collection, application_path.value(), *it); + if (!AddShellLink(collection, application_path.value(), *it)) + return false; } // We can now add the new list to the JumpList. @@ -236,8 +237,8 @@ for (ShellLinkItemList::const_iterator item = link_items.begin(); item != link_items.end() && max_items > 0; ++item, --max_items) { - scoped_refptr<ShellLinkItem> link(*item); - AddShellLink(collection, application_path.value(), link); + if (!AddShellLink(collection, application_path.value(), *item)) + return false; } // We can now add the new list to the JumpList.
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index 624c08c..29c4a01 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -543,7 +543,8 @@ } if (enable_media_router) { - public_deps += [ "//chrome/common/media_router:interfaces" ] + public_deps += + [ "//chrome/common/media_router/mojo:dial_utility_interfaces" ] } }
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 4633374..d3a7262 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -907,13 +907,6 @@ // Forces a custom summary to be displayed below the update menu item. const char kForceShowUpdateMenuItemCustomSummary[] = "custom_summary"; -// Forces the new features summary to be displayed below the update menu item. -const char kForceShowUpdateMenuItemNewFeaturesSummary[] = - "use_new_features_summary"; - -// Forces a summary to be displayed below the update menu item. -const char kForceShowUpdateMenuItemSummary[] = "show_summary"; - // Sets the market URL for Chrome for use in testing. const char kMarketUrlForTesting[] = "market-url-for-testing";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 45b40b78..8404b98b 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -262,8 +262,6 @@ extern const char kForceShowUpdateMenuBadge[]; extern const char kForceShowUpdateMenuItem[]; extern const char kForceShowUpdateMenuItemCustomSummary[]; -extern const char kForceShowUpdateMenuItemNewFeaturesSummary[]; -extern const char kForceShowUpdateMenuItemSummary[]; extern const char kMarketUrlForTesting[]; extern const char kNtpSwitchToExistingTab[]; extern const char kProgressBarAnimation[];
diff --git a/chrome/common/media_router/BUILD.gn b/chrome/common/media_router/BUILD.gn index 8e5f0ba..ac867ed 100644 --- a/chrome/common/media_router/BUILD.gn +++ b/chrome/common/media_router/BUILD.gn
@@ -2,14 +2,63 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//mojo/public/tools/bindings/mojom.gni") - -mojom("interfaces") { - sources = [ - "dial_device_description_parser.mojom", - ] - +static_library("router") { public_deps = [ - "//mojo/common:common_custom_types", + "mojo:media_controller", + "//base:base", + "//base:i18n", + "//net:net", + "//third_party/icu", + "//url:url", ] + + sources = [ + "discovery/media_sink_internal.cc", + "discovery/media_sink_internal.h", + "issue.cc", + "issue.h", + "media_route.cc", + "media_route.h", + "media_sink.cc", + "media_sink.h", + "media_source.cc", + "media_source.h", + "media_source_helper.cc", + "media_source_helper.h", + "media_status.cc", + "media_status.h", + "route_message.cc", + "route_message.h", + "route_request_result.cc", + "route_request_result.h", + ] + + if (!is_android) { + public_deps += [ "mojo:media_router" ] + } +} + +source_set("unit_tests") { + testonly = true + public_deps = [ + ":router", + "//base/test:test_support", + "//testing/gmock", + "//testing/gtest", + "//third_party/icu", + ] + + sources = [ + "discovery/media_sink_internal_unittest.cc", + "issue_unittest.cc", + "media_route_unittest.cc", + "media_sink_unittest.cc", + "media_source_helper_unittest.cc", + "media_source_unittest.cc", + ] + + if (!is_android) { + public_deps += [ "mojo:media_router_test_interfaces" ] + sources += [ "mojo/media_router_struct_traits_unittest.cc" ] + } }
diff --git a/chrome/common/media_router/OWNERS b/chrome/common/media_router/OWNERS index ce372ec..dd66178 100644 --- a/chrome/common/media_router/OWNERS +++ b/chrome/common/media_router/OWNERS
@@ -1,8 +1 @@ file://chrome/browser/media/router/OWNERS - -per-file *.mojom=set noparent -per-file *.mojom=file://ipc/SECURITY_OWNERS -per-file *_struct_traits*.*=set noparent -per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/chrome/browser/media/router/discovery/media_sink_internal.cc b/chrome/common/media_router/discovery/media_sink_internal.cc similarity index 98% rename from chrome/browser/media/router/discovery/media_sink_internal.cc rename to chrome/common/media_router/discovery/media_sink_internal.cc index fe381f2..3b9a77f 100644 --- a/chrome/browser/media/router/discovery/media_sink_internal.cc +++ b/chrome/common/media_router/discovery/media_sink_internal.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/discovery/media_sink_internal.h" +#include "chrome/common/media_router/discovery/media_sink_internal.h" #include "base/logging.h" #include "base/strings/string_util.h"
diff --git a/chrome/browser/media/router/discovery/media_sink_internal.h b/chrome/common/media_router/discovery/media_sink_internal.h similarity index 93% rename from chrome/browser/media/router/discovery/media_sink_internal.h rename to chrome/common/media_router/discovery/media_sink_internal.h index 9d57beb0..3a9c2bb6 100644 --- a/chrome/browser/media/router/discovery/media_sink_internal.h +++ b/chrome/common/media_router/discovery/media_sink_internal.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ +#define CHROME_COMMON_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ #include <utility> #include "base/memory/manual_constructor.h" -#include "chrome/browser/media/router/media_sink.h" +#include "chrome/common/media_router/media_sink.h" #include "net/base/ip_address.h" #include "url/gurl.h" @@ -125,4 +125,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_
diff --git a/chrome/browser/media/router/discovery/media_sink_internal_unittest.cc b/chrome/common/media_router/discovery/media_sink_internal_unittest.cc similarity index 98% rename from chrome/browser/media/router/discovery/media_sink_internal_unittest.cc rename to chrome/common/media_router/discovery/media_sink_internal_unittest.cc index 138208b..220ecda 100644 --- a/chrome/browser/media/router/discovery/media_sink_internal_unittest.cc +++ b/chrome/common/media_router/discovery/media_sink_internal_unittest.cc
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/discovery/media_sink_internal.h" +#include "chrome/common/media_router/discovery/media_sink_internal.h" + #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/media/router/issue.cc b/chrome/common/media_router/issue.cc similarity index 96% rename from chrome/browser/media/router/issue.cc rename to chrome/common/media_router/issue.cc index 5f40268..29664f1 100644 --- a/chrome/browser/media/router/issue.cc +++ b/chrome/common/media_router/issue.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/issue.h" +#include "chrome/common/media_router/issue.h" #include "base/atomic_sequence_num.h"
diff --git a/chrome/browser/media/router/issue.h b/chrome/common/media_router/issue.h similarity index 93% rename from chrome/browser/media/router/issue.h rename to chrome/common/media_router/issue.h index 2ff5087..f449885 100644 --- a/chrome/browser/media/router/issue.h +++ b/chrome/common/media_router/issue.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_ISSUE_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_ISSUE_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_ISSUE_H_ +#define CHROME_COMMON_MEDIA_ROUTER_ISSUE_H_ #include <string> #include <vector> #include "base/logging.h" -#include "chrome/browser/media/router/media_route.h" +#include "chrome/common/media_router/media_route.h" namespace media_router { @@ -94,4 +94,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_ISSUE_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_ISSUE_H_
diff --git a/chrome/browser/media/router/issue_unittest.cc b/chrome/common/media_router/issue_unittest.cc similarity index 98% rename from chrome/browser/media/router/issue_unittest.cc rename to chrome/common/media_router/issue_unittest.cc index 7cc6afb..8b6235c 100644 --- a/chrome/browser/media/router/issue_unittest.cc +++ b/chrome/common/media_router/issue_unittest.cc
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/issue.h" +#include "chrome/common/media_router/issue.h" + #include "testing/gmock/include/gmock/gmock.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_route.cc b/chrome/common/media_router/media_route.cc similarity index 91% rename from chrome/browser/media/router/media_route.cc rename to chrome/common/media_router/media_route.cc index 8ea225c..4013361 100644 --- a/chrome/browser/media/router/media_route.cc +++ b/chrome/common/media_router/media_route.cc
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_route.h" +#include "chrome/common/media_router/media_route.h" #include "base/logging.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_route.h b/chrome/common/media_router/media_route.h similarity index 93% rename from chrome/browser/media/router/media_route.h rename to chrome/common/media_router/media_route.h index 6d433b6..0b9c1d4 100644 --- a/chrome/browser/media/router/media_route.h +++ b/chrome/common/media_router/media_route.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTE_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTE_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MEDIA_ROUTE_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MEDIA_ROUTE_H_ #include <string> #include "base/logging.h" #include "base/values.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source.h" namespace media_router { @@ -127,4 +127,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTE_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MEDIA_ROUTE_H_
diff --git a/chrome/browser/media/router/media_route_unittest.cc b/chrome/common/media_router/media_route_unittest.cc similarity index 91% rename from chrome/browser/media/router/media_route_unittest.cc rename to chrome/common/media_router/media_route_unittest.cc index 05dd0d8..73aa23a 100644 --- a/chrome/browser/media/router/media_route_unittest.cc +++ b/chrome/common/media_router/media_route_unittest.cc
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_route.h" -#include "chrome/browser/media/router/media_sink.h" -#include "chrome/browser/media/router/media_source_helper.h" +#include "chrome/common/media_router/media_route.h" + +#include "chrome/common/media_router/media_sink.h" +#include "chrome/common/media_router/media_source_helper.h" #include "testing/gmock/include/gmock/gmock.h" namespace {
diff --git a/chrome/browser/media/router/media_sink.cc b/chrome/common/media_router/media_sink.cc similarity index 95% rename from chrome/browser/media/router/media_sink.cc rename to chrome/common/media_router/media_sink.cc index a484350..1e976313 100644 --- a/chrome/browser/media/router/media_sink.cc +++ b/chrome/common/media_router/media_sink.cc
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/common/media_router/media_sink.h" #include "base/i18n/string_compare.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/media/router/media_sink.h" #include "third_party/icu/source/i18n/unicode/coll.h" namespace media_router { @@ -18,8 +18,7 @@ MediaSink::MediaSink() {} -MediaSink::~MediaSink() { -} +MediaSink::~MediaSink() {} bool MediaSink::Equals(const MediaSink& other) const { return sink_id_ == other.sink_id_;
diff --git a/chrome/browser/media/router/media_sink.h b/chrome/common/media_router/media_sink.h similarity index 94% rename from chrome/browser/media/router/media_sink.h rename to chrome/common/media_router/media_sink.h index 5bd91be..a28a1b7 100644 --- a/chrome/browser/media/router/media_sink.h +++ b/chrome/common/media_router/media_sink.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SINK_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SINK_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MEDIA_SINK_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MEDIA_SINK_H_ #include <string> @@ -99,4 +99,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SINK_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MEDIA_SINK_H_
diff --git a/chrome/browser/media/router/media_sink_unittest.cc b/chrome/common/media_router/media_sink_unittest.cc similarity index 94% rename from chrome/browser/media/router/media_sink_unittest.cc rename to chrome/common/media_router/media_sink_unittest.cc index ccf7012..f8e7317a 100644 --- a/chrome/browser/media/router/media_sink_unittest.cc +++ b/chrome/common/media_router/media_sink_unittest.cc
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_sink.h" +#include "chrome/common/media_router/media_sink.h" + #include "testing/gmock/include/gmock/gmock.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_source.cc b/chrome/common/media_router/media_source.cc similarity index 87% rename from chrome/browser/media/router/media_source.cc rename to chrome/common/media_router/media_source.cc index c5834d4b..e84acab 100644 --- a/chrome/browser/media/router/media_source.cc +++ b/chrome/common/media_router/media_source.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" #include <string> -#include "chrome/browser/media/router/media_source_helper.h" +#include "chrome/common/media_router/media_source_helper.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_source.h b/chrome/common/media_router/media_source.h similarity index 88% rename from chrome/browser/media/router/media_source.h rename to chrome/common/media_router/media_source.h index 4615743..b5b20ad649 100644 --- a/chrome/browser/media/router/media_source.h +++ b/chrome/common/media_router/media_source.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MEDIA_SOURCE_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MEDIA_SOURCE_H_ #include <stddef.h> @@ -54,4 +54,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MEDIA_SOURCE_H_
diff --git a/chrome/browser/media/router/media_source_helper.cc b/chrome/common/media_router/media_source_helper.cc similarity index 86% rename from chrome/browser/media/router/media_source_helper.cc rename to chrome/common/media_router/media_source_helper.cc index fa410f8..944e0b76 100644 --- a/chrome/browser/media/router/media_source_helper.cc +++ b/chrome/common/media_router/media_source_helper.cc
@@ -2,14 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_source_helper.h" +#include "chrome/common/media_router/media_source_helper.h" #include <stdio.h> #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" -#include "chrome/browser/media/router/media_source.h" -#include "chrome/browser/sessions/session_tab_helper.h" +#include "chrome/common/media_router/media_source.h" #include "url/gurl.h" namespace media_router { @@ -35,10 +34,8 @@ return MediaSource(base::StringPrintf(kTabMediaUrnFormat, tab_id)); } -MediaSource MediaSourceForTabContentRemoting(content::WebContents* contents) { - DCHECK(contents); - return MediaSource(base::StringPrintf(kTabRemotingUrnFormat, - SessionTabHelper::IdForTab(contents))); +MediaSource MediaSourceForTabContentRemoting(int tab_id) { + return MediaSource(base::StringPrintf(kTabRemotingUrnFormat, tab_id)); } MediaSource MediaSourceForDesktop() { @@ -57,7 +54,7 @@ bool IsTabMirroringMediaSource(const MediaSource& source) { int tab_id; return sscanf(source.id().c_str(), kTabMediaUrnFormat, &tab_id) == 1 && - tab_id > 0; + tab_id > 0; } bool IsMirroringMediaSource(const MediaSource& source) {
diff --git a/chrome/browser/media/router/media_source_helper.h b/chrome/common/media_router/media_source_helper.h similarity index 81% rename from chrome/browser/media/router/media_source_helper.h rename to chrome/common/media_router/media_source_helper.h index 6081b69..a18b26c 100644 --- a/chrome/browser/media/router/media_source_helper.h +++ b/chrome/common/media_router/media_source_helper.h
@@ -2,25 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_HELPER_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_HELPER_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MEDIA_SOURCE_HELPER_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MEDIA_SOURCE_HELPER_H_ #include <string> -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" class GURL; -namespace content { -class WebContents; -} - namespace media_router { // Helper library for protocol-specific media source object creation. // Returns MediaSource URI depending on the type of source. MediaSource MediaSourceForTab(int tab_id); -MediaSource MediaSourceForTabContentRemoting(content::WebContents* contents); +MediaSource MediaSourceForTabContentRemoting(int tab_id); MediaSource MediaSourceForDesktop(); MediaSource MediaSourceForPresentationUrl(const GURL& presentation_url); @@ -49,4 +45,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_HELPER_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MEDIA_SOURCE_HELPER_H_
diff --git a/chrome/browser/media/router/media_source_helper_unittest.cc b/chrome/common/media_router/media_source_helper_unittest.cc similarity index 95% rename from chrome/browser/media/router/media_source_helper_unittest.cc rename to chrome/common/media_router/media_source_helper_unittest.cc index 1b708fd..318912c 100644 --- a/chrome/browser/media/router/media_source_helper_unittest.cc +++ b/chrome/common/media_router/media_source_helper_unittest.cc
@@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_source.h" -#include "chrome/browser/media/router/media_source_helper.h" +#include "chrome/common/media_router/media_source_helper.h" + +#include "chrome/common/media_router/media_source.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -65,4 +66,3 @@ } } // namespace media_router -
diff --git a/chrome/browser/media/router/media_source_unittest.cc b/chrome/common/media_router/media_source_unittest.cc similarity index 94% rename from chrome/browser/media/router/media_source_unittest.cc rename to chrome/common/media_router/media_source_unittest.cc index ea3f9ee..72fa4f1 100644 --- a/chrome/browser/media/router/media_source_unittest.cc +++ b/chrome/common/media_router/media_source_unittest.cc
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" + #include "testing/gtest/include/gtest/gtest.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_status.cc b/chrome/common/media_router/media_status.cc similarity index 94% rename from chrome/browser/media/router/media_status.cc rename to chrome/common/media_router/media_status.cc index 4861507..f9a4f93 100644 --- a/chrome/browser/media/router/media_status.cc +++ b/chrome/common/media_router/media_status.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/media_status.h" +#include "chrome/common/media_router/media_status.h" namespace media_router {
diff --git a/chrome/browser/media/router/media_status.h b/chrome/common/media_router/media_status.h similarity index 91% rename from chrome/browser/media/router/media_status.h rename to chrome/common/media_router/media_status.h index 2e852c6..4215713 100644 --- a/chrome/browser/media/router/media_status.h +++ b/chrome/common/media_router/media_status.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_STATUS_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_STATUS_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MEDIA_STATUS_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MEDIA_STATUS_H_ #include <string> @@ -60,4 +60,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_STATUS_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MEDIA_STATUS_H_
diff --git a/chrome/common/media_router/mojo/BUILD.gn b/chrome/common/media_router/mojo/BUILD.gn new file mode 100644 index 0000000..84a42d53 --- /dev/null +++ b/chrome/common/media_router/mojo/BUILD.gn
@@ -0,0 +1,50 @@ +# 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. + +import("//mojo/public/tools/bindings/mojom.gni") + +mojom("dial_utility_interfaces") { + sources = [ + "dial_device_description_parser.mojom", + ] + + public_deps = [ + "//mojo/common:common_custom_types", + ] +} + +mojom("media_controller") { + sources = [ + "media_controller.mojom", + "media_status.mojom", + ] + + public_deps = [ + "//mojo/common:common_custom_types", + ] +} + +mojom("media_router") { + sources = [ + "media_router.mojom", + ] + + public_deps = [ + ":media_controller", + "//mojo/common:common_custom_types", + "//net/interfaces:interfaces", + "//url/mojo:url_mojom_gurl", + "//url/mojo:url_mojom_origin", + ] +} + +mojom("media_router_test_interfaces") { + sources = [ + "media_router_traits_test_service.mojom", + ] + + public_deps = [ + ":media_router", + ] +}
diff --git a/chrome/common/media_router/mojo/OWNERS b/chrome/common/media_router/mojo/OWNERS new file mode 100644 index 0000000..2c44a46 --- /dev/null +++ b/chrome/common/media_router/mojo/OWNERS
@@ -0,0 +1,6 @@ +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS +per-file *_struct_traits*.*=set noparent +per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS +per-file *.typemap=set noparent +per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/chrome/common/media_router/dial_device_description_parser.mojom b/chrome/common/media_router/mojo/dial_device_description_parser.mojom similarity index 100% rename from chrome/common/media_router/dial_device_description_parser.mojom rename to chrome/common/media_router/mojo/dial_device_description_parser.mojom
diff --git a/chrome/browser/media/router/mojo/media_controller.mojom b/chrome/common/media_router/mojo/media_controller.mojom similarity index 95% rename from chrome/browser/media/router/mojo/media_controller.mojom rename to chrome/common/media_router/mojo/media_controller.mojom index 497cd41..9f3a494 100644 --- a/chrome/browser/media/router/mojo/media_controller.mojom +++ b/chrome/common/media_router/mojo/media_controller.mojom
@@ -4,7 +4,7 @@ module media_router.mojom; -import "chrome/browser/media/router/mojo/media_status.mojom"; +import "chrome/common/media_router/mojo/media_status.mojom"; import "mojo/common/time.mojom"; // Interface for a controller to change the current state of a media content.
diff --git a/chrome/browser/media/router/mojo/media_router.mojom b/chrome/common/media_router/mojo/media_router.mojom similarity index 98% rename from chrome/browser/media/router/mojo/media_router.mojom rename to chrome/common/media_router/mojo/media_router.mojom index e993afd..f1c6576 100644 --- a/chrome/browser/media/router/mojo/media_router.mojom +++ b/chrome/common/media_router/mojo/media_router.mojom
@@ -4,8 +4,8 @@ module media_router.mojom; -import "chrome/browser/media/router/mojo/media_controller.mojom"; -import "chrome/browser/media/router/mojo/media_status.mojom"; +import "chrome/common/media_router/mojo/media_controller.mojom"; +import "chrome/common/media_router/mojo/media_status.mojom"; import "mojo/common/time.mojom"; import "net/interfaces/ip_address.mojom"; import "url/mojo/origin.mojom";
diff --git a/chrome/browser/media/router/mojo/media_router.typemap b/chrome/common/media_router/mojo/media_router.typemap similarity index 63% rename from chrome/browser/media/router/mojo/media_router.typemap rename to chrome/common/media_router/mojo/media_router.typemap index 18b266cb..7a6dfb3 100644 --- a/chrome/browser/media/router/mojo/media_router.typemap +++ b/chrome/common/media_router/mojo/media_router.typemap
@@ -2,24 +2,27 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -mojom = "//chrome/browser/media/router/mojo/media_router.mojom" +mojom = "//chrome/common/media_router/mojo/media_router.mojom" public_headers = [ - "//chrome/browser/media/router/discovery/media_sink_internal.h", - "//chrome/browser/media/router/issue.h", - "//chrome/browser/media/router/media_route.h", - "//chrome/browser/media/router/route_message.h", - "//chrome/browser/media/router/route_request_result.h", + "//chrome/common/media_router/discovery/media_sink_internal.h", + "//chrome/common/media_router/issue.h", + "//chrome/common/media_router/media_route.h", + "//chrome/common/media_router/media_sink.h", + "//chrome/common/media_router/media_source.h", + "//chrome/common/media_router/route_message.h", + "//chrome/common/media_router/route_request_result.h", "//content/public/common/presentation_info.h", ] deps = [ + "//content/public/common", "//net", "//third_party/icu", # For issue.h "//url", ] traits_headers = - [ "//chrome/browser/media/router/mojo/media_router_struct_traits.h" ] + [ "//chrome/common/media_router/mojo/media_router_struct_traits.h" ] sources = [ - "//chrome/browser/media/router/mojo/media_router_struct_traits.cc", + "//chrome/common/media_router/mojo/media_router_struct_traits.cc", ] type_mappings = [ "media_router.mojom.Issue=media_router::IssueInfo",
diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits.cc b/chrome/common/media_router/mojo/media_router_struct_traits.cc similarity index 97% rename from chrome/browser/media/router/mojo/media_router_struct_traits.cc rename to chrome/common/media_router/mojo/media_router_struct_traits.cc index 6115362..aa44fc6 100644 --- a/chrome/browser/media/router/mojo/media_router_struct_traits.cc +++ b/chrome/common/media_router/mojo/media_router_struct_traits.cc
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/mojo/media_router_struct_traits.h" +#include "chrome/common/media_router/mojo/media_router_struct_traits.h" -#include "chrome/browser/media/router/media_source.h" +#include "chrome/common/media_router/media_source.h" #include "net/interfaces/ip_address_struct_traits.h" #include "url/mojo/url_gurl_struct_traits.h"
diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits.h b/chrome/common/media_router/mojo/media_router_struct_traits.h similarity index 97% rename from chrome/browser/media/router/mojo/media_router_struct_traits.h rename to chrome/common/media_router/mojo/media_router_struct_traits.h index cb732691..7f98146f 100644 --- a/chrome/browser/media/router/mojo/media_router_struct_traits.h +++ b/chrome/common/media_router/mojo/media_router_struct_traits.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_ROUTER_STRUCT_TRAITS_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_ROUTER_STRUCT_TRAITS_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MOJO_MEDIA_ROUTER_STRUCT_TRAITS_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MOJO_MEDIA_ROUTER_STRUCT_TRAITS_H_ #include <string> -#include "chrome/browser/media/router/discovery/media_sink_internal.h" -#include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/mojo/media_router.mojom.h" -#include "chrome/browser/media/router/route_request_result.h" +#include "chrome/common/media_router/discovery/media_sink_internal.h" +#include "chrome/common/media_router/issue.h" +#include "chrome/common/media_router/mojo/media_router.mojom.h" +#include "chrome/common/media_router/route_request_result.h" #include "mojo/common/common_custom_types_struct_traits.h" namespace mojo { @@ -567,4 +567,4 @@ } // namespace mojo -#endif // CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_ROUTER_STRUCT_TRAITS_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MOJO_MEDIA_ROUTER_STRUCT_TRAITS_H_
diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits_unittest.cc b/chrome/common/media_router/mojo/media_router_struct_traits_unittest.cc similarity index 90% rename from chrome/browser/media/router/mojo/media_router_struct_traits_unittest.cc rename to chrome/common/media_router/mojo/media_router_struct_traits_unittest.cc index 08be657..676db6f54 100644 --- a/chrome/browser/media/router/mojo/media_router_struct_traits_unittest.cc +++ b/chrome/common/media_router/mojo/media_router_struct_traits_unittest.cc
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/mojo/media_router_struct_traits.h" +#include "chrome/common/media_router/mojo/media_router_struct_traits.h" #include "base/message_loop/message_loop.h" -#include "chrome/browser/media/router/discovery/media_sink_internal.h" -#include "chrome/browser/media/router/mojo/media_router.mojom.h" -#include "chrome/browser/media/router/mojo/media_router_traits_test_service.mojom.h" +#include "chrome/common/media_router/discovery/media_sink_internal.h" +#include "chrome/common/media_router/mojo/media_router.mojom.h" +#include "chrome/common/media_router/mojo/media_router_traits_test_service.mojom.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/media/router/mojo/media_router_traits_test_service.mojom b/chrome/common/media_router/mojo/media_router_traits_test_service.mojom similarity index 86% rename from chrome/browser/media/router/mojo/media_router_traits_test_service.mojom rename to chrome/common/media_router/mojo/media_router_traits_test_service.mojom index 9229fd8..8431ff6 100644 --- a/chrome/browser/media/router/mojo/media_router_traits_test_service.mojom +++ b/chrome/common/media_router/mojo/media_router_traits_test_service.mojom
@@ -4,7 +4,7 @@ module media_router.mojom; -import "chrome/browser/media/router/mojo/media_router.mojom"; +import "chrome/common/media_router/mojo/media_router.mojom"; // All functions on this interface echo their arguments to test StructTraits // serialization and deserialization.
diff --git a/chrome/browser/media/router/mojo/media_status.mojom b/chrome/common/media_router/mojo/media_status.mojom similarity index 100% rename from chrome/browser/media/router/mojo/media_status.mojom rename to chrome/common/media_router/mojo/media_status.mojom
diff --git a/chrome/common/media_router/mojo/media_status.typemap b/chrome/common/media_router/mojo/media_status.typemap new file mode 100644 index 0000000..81ce6ec5 --- /dev/null +++ b/chrome/common/media_router/mojo/media_status.typemap
@@ -0,0 +1,12 @@ +# 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. + +mojom = "//chrome/common/media_router/mojo/media_status.mojom" +public_headers = [ "//chrome/common/media_router/media_status.h" ] +traits_headers = + [ "//chrome/common/media_router/mojo/media_status_struct_traits.h" ] +sources = [ + "//chrome/common/media_router/mojo/media_status_struct_traits.cc", +] +type_mappings = [ "media_router.mojom.MediaStatus=media_router::MediaStatus" ]
diff --git a/chrome/browser/media/router/mojo/media_status_struct_traits.cc b/chrome/common/media_router/mojo/media_status_struct_traits.cc similarity index 93% rename from chrome/browser/media/router/mojo/media_status_struct_traits.cc rename to chrome/common/media_router/mojo/media_status_struct_traits.cc index 02f5da8..2d043aa 100644 --- a/chrome/browser/media/router/mojo/media_status_struct_traits.cc +++ b/chrome/common/media_router/mojo/media_status_struct_traits.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/mojo/media_status_struct_traits.h" +#include "chrome/common/media_router/mojo/media_status_struct_traits.h" #include "base/strings/string_util.h"
diff --git a/chrome/browser/media/router/mojo/media_status_struct_traits.h b/chrome/common/media_router/mojo/media_status_struct_traits.h similarity index 83% rename from chrome/browser/media/router/mojo/media_status_struct_traits.h rename to chrome/common/media_router/mojo/media_status_struct_traits.h index fbf8a7b..eadd34d1 100644 --- a/chrome/browser/media/router/mojo/media_status_struct_traits.h +++ b/chrome/common/media_router/mojo/media_status_struct_traits.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_STATUS_STRUCT_TRAITS_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_STATUS_STRUCT_TRAITS_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_MOJO_MEDIA_STATUS_STRUCT_TRAITS_H_ +#define CHROME_COMMON_MEDIA_ROUTER_MOJO_MEDIA_STATUS_STRUCT_TRAITS_H_ #include <string> -#include "chrome/browser/media/router/media_status.h" -#include "chrome/browser/media/router/mojo/media_status.mojom.h" +#include "chrome/common/media_router/media_status.h" +#include "chrome/common/media_router/mojo/media_status.mojom.h" #include "mojo/common/common_custom_types_struct_traits.h" namespace mojo { @@ -69,4 +69,4 @@ } // namespace mojo -#endif // CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_STATUS_STRUCT_TRAITS_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_MOJO_MEDIA_STATUS_STRUCT_TRAITS_H_
diff --git a/chrome/common/media_router/mojo/typemaps.gni b/chrome/common/media_router/mojo/typemaps.gni new file mode 100644 index 0000000..7d134e8 --- /dev/null +++ b/chrome/common/media_router/mojo/typemaps.gni
@@ -0,0 +1,8 @@ +# Copyright 2016 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. + +typemaps = [ + "//chrome/common/media_router/mojo/media_router.typemap", + "//chrome/common/media_router/mojo/media_status.typemap", +]
diff --git a/chrome/browser/media/router/route_message.cc b/chrome/common/media_router/route_message.cc similarity index 94% rename from chrome/browser/media/router/route_message.cc rename to chrome/common/media_router/route_message.cc index 89d88f8..ded2e7e5 100644 --- a/chrome/browser/media/router/route_message.cc +++ b/chrome/common/media_router/route_message.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/route_message.h" +#include "chrome/common/media_router/route_message.h" #include "base/base64.h" #include "base/json/string_escape.h"
diff --git a/chrome/browser/media/router/route_message.h b/chrome/common/media_router/route_message.h similarity index 82% rename from chrome/browser/media/router/route_message.h rename to chrome/common/media_router/route_message.h index 6d5191db..031569be3 100644 --- a/chrome/browser/media/router/route_message.h +++ b/chrome/common/media_router/route_message.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_ROUTE_MESSAGE_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_ROUTE_MESSAGE_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_ROUTE_MESSAGE_H_ +#define CHROME_COMMON_MEDIA_ROUTER_ROUTE_MESSAGE_H_ #include <stdint.h> @@ -32,4 +32,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_ROUTE_MESSAGE_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_ROUTE_MESSAGE_H_
diff --git a/chrome/browser/media/router/route_request_result.cc b/chrome/common/media_router/route_request_result.cc similarity index 91% rename from chrome/browser/media/router/route_request_result.cc rename to chrome/common/media_router/route_request_result.cc index 4c50e409..f966ccb 100644 --- a/chrome/browser/media/router/route_request_result.cc +++ b/chrome/common/media_router/route_request_result.cc
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/media/router/route_request_result.h" +#include "chrome/common/media_router/route_request_result.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/media/router/media_route.h" +#include "chrome/common/media_router/media_route.h" namespace media_router {
diff --git a/chrome/browser/media/router/route_request_result.h b/chrome/common/media_router/route_request_result.h similarity index 91% rename from chrome/browser/media/router/route_request_result.h rename to chrome/common/media_router/route_request_result.h index 81e8200..37d49ce 100644 --- a/chrome/browser/media/router/route_request_result.h +++ b/chrome/common/media_router/route_request_result.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_MEDIA_ROUTER_ROUTE_REQUEST_RESULT_H_ -#define CHROME_BROWSER_MEDIA_ROUTER_ROUTE_REQUEST_RESULT_H_ +#ifndef CHROME_COMMON_MEDIA_ROUTER_ROUTE_REQUEST_RESULT_H_ +#define CHROME_COMMON_MEDIA_ROUTER_ROUTE_REQUEST_RESULT_H_ #include <memory> #include <string> @@ -48,7 +48,7 @@ CANCELLED = 8, // New values must be added here. - TOTAL_COUNT = 9 // The total number of values. + TOTAL_COUNT = 9 // The total number of values. }; static std::unique_ptr<RouteRequestResult> FromSuccess( @@ -83,4 +83,4 @@ } // namespace media_router -#endif // CHROME_BROWSER_MEDIA_ROUTER_ROUTE_REQUEST_RESULT_H_ +#endif // CHROME_COMMON_MEDIA_ROUTER_ROUTE_REQUEST_RESULT_H_
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc index 47a6e73b..f78adf0 100644 --- a/chrome/common/url_constants.cc +++ b/chrome/common/url_constants.cc
@@ -425,33 +425,33 @@ const char kChromeHelpViaKeyboardURL[] = #if defined(OS_CHROMEOS) -#if defined(OFFICIAL_BUILD) +#if defined(GOOGLE_CHROME_BUILD) "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html"; #else "https://support.google.com/chromebook/?p=help&ctx=keyboard"; -#endif // defined(OFFICIAL_BUILD +#endif // defined(GOOGLE_CHROME_BUILD #else "https://support.google.com/chrome/?p=help&ctx=keyboard"; #endif // defined(OS_CHROMEOS) const char kChromeHelpViaMenuURL[] = #if defined(OS_CHROMEOS) -#if defined(OFFICIAL_BUILD) +#if defined(GOOGLE_CHROME_BUILD) "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html"; #else "https://support.google.com/chromebook/?p=help&ctx=menu"; -#endif // defined(OFFICIAL_BUILD +#endif // defined(GOOGLE_CHROME_BUILD #else "https://support.google.com/chrome/?p=help&ctx=menu"; #endif // defined(OS_CHROMEOS) const char kChromeHelpViaWebUIURL[] = #if defined(OS_CHROMEOS) -#if defined(OFFICIAL_BUILD) +#if defined(GOOGLE_CHROME_BUILD) "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html"; #else "https://support.google.com/chromebook/?p=help&ctx=settings"; -#endif // defined(OFFICIAL_BUILD +#endif // defined(GOOGLE_CHROME_BUILD #else "https://support.google.com/chrome/?p=help&ctx=settings"; #endif // defined(OS_CHROMEOS)
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn index 4fb9f9d..4070d3d4 100644 --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn
@@ -21,6 +21,18 @@ "renderer_resources_200_percent.pak", "renderer_resources_300_percent.pak", ] + grit_flags = [ + "-E", + "mojom_root=" + rebase_path(root_gen_dir), + ] + deps = [ + "//chrome/common/media_router/mojo:media_controller__generator", + "//chrome/common/media_router/mojo:media_router__generator", + "//mojo/common:common_custom_types__generator", + "//net/interfaces:interfaces__generator", + "//url/mojo:url_mojom_gurl__generator", + "//url/mojo:url_mojom_origin__generator", + ] } static_library("renderer") {
diff --git a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc index dd23ecd..ff680783 100644 --- a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc +++ b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
@@ -263,6 +263,25 @@ source_map->RegisterSource("chromeWebViewInternal", IDR_CHROME_WEB_VIEW_INTERNAL_CUSTOM_BINDINGS_JS); source_map->RegisterSource("chromeWebView", IDR_CHROME_WEB_VIEW_JS); + +#if defined(ENABLE_MEDIA_ROUTER) + source_map->RegisterSource( + "chrome/common/media_router/mojo/media_controller.mojom", + IDR_MEDIA_CONTROLLER_MOJOM_JS); + source_map->RegisterSource( + "chrome/common/media_router/mojo/media_router.mojom", + IDR_MEDIA_ROUTER_MOJOM_JS); + source_map->RegisterSource( + "chrome/common/media_router/mojo/media_status.mojom", + IDR_MEDIA_STATUS_MOJOM_JS); + source_map->RegisterSource("media_router_bindings", + IDR_MEDIA_ROUTER_BINDINGS_JS); + source_map->RegisterSource("mojo/common/time.mojom", IDR_MOJO_TIME_MOJOM_JS); + source_map->RegisterSource("net/interfaces/ip_address.mojom", + IDR_MOJO_IP_ADDRESS_MOJOM_JS); + source_map->RegisterSource("url/mojo/origin.mojom", IDR_ORIGIN_MOJOM_JS); + source_map->RegisterSource("url/mojo/url.mojom", IDR_MOJO_URL_MOJOM_JS); +#endif // defined(ENABLE_MEDIA_ROUTER) } void ChromeExtensionsDispatcherDelegate::RequireAdditionalModules(
diff --git a/chrome/renderer/resources/extensions/OWNERS b/chrome/renderer/resources/extensions/OWNERS index c756eba..08e70c8 100644 --- a/chrome/renderer/resources/extensions/OWNERS +++ b/chrome/renderer/resources/extensions/OWNERS
@@ -9,6 +9,7 @@ per-file file_manager_private_custom_bindings.js=mtomasz@chromium.org per-file image_util.js=dewittj@chromium.org per-file media_galleries*.js=file://chrome/browser/media_galleries/OWNERS +per-file media_router_bindings.js=file://chrome/browser/media/router/OWNERS per-file notifications_*.js=dewittj@chromium.org per-file searchbox_api.js=dcblack@chromium.org per-file searchbox_api.js=file://chrome/browser/search/OWNERS
diff --git a/extensions/renderer/resources/media_router_bindings.js b/chrome/renderer/resources/extensions/media_router_bindings.js similarity index 98% rename from extensions/renderer/resources/media_router_bindings.js rename to chrome/renderer/resources/extensions/media_router_bindings.js index 3b5cfe9..24b7f15 100644 --- a/extensions/renderer/resources/media_router_bindings.js +++ b/chrome/renderer/resources/extensions/media_router_bindings.js
@@ -5,20 +5,20 @@ var mediaRouter; define('media_router_bindings', [ + 'chrome/common/media_router/mojo/media_controller.mojom', + 'chrome/common/media_router/mojo/media_router.mojom', + 'chrome/common/media_router/mojo/media_status.mojom', 'content/public/renderer/frame_interfaces', - 'chrome/browser/media/router/mojo/media_controller.mojom', - 'chrome/browser/media/router/mojo/media_router.mojom', - 'chrome/browser/media/router/mojo/media_status.mojom', 'extensions/common/mojo/keep_alive.mojom', 'mojo/common/time.mojom', 'mojo/public/js/bindings', 'net/interfaces/ip_address.mojom', 'url/mojo/origin.mojom', 'url/mojo/url.mojom', -], function(frameInterfaces, - mediaControllerMojom, +], function(mediaControllerMojom, mediaRouterMojom, mediaStatusMojom, + frameInterfaces, keepAliveMojom, timeMojom, bindings,
diff --git a/chrome/renderer/resources/renderer_resources.grd b/chrome/renderer/resources/renderer_resources.grd index 55c3b23..4a48756 100644 --- a/chrome/renderer/resources/renderer_resources.grd +++ b/chrome/renderer/resources/renderer_resources.grd
@@ -85,6 +85,17 @@ <include name="IDR_PLATFORM_KEYS_UTILS_JS" file="extensions\platform_keys\utils.js" type="BINDATA" /> <include name="IDR_TERMINAL_PRIVATE_CUSTOM_BINDINGS_JS" file="extensions\terminal_private_custom_bindings.js" type="BINDATA" /> </if> + <!-- Media Router Mojo service and bindings. --> + <if expr="enable_media_router"> + <include name="IDR_MEDIA_CONTROLLER_MOJOM_JS" file="${mojom_root}\chrome\common\media_router\mojo\media_controller.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MEDIA_ROUTER_MOJOM_JS" file="${mojom_root}\chrome\common\media_router\mojo\media_router.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MEDIA_ROUTER_BINDINGS_JS" file="extensions\media_router_bindings.js" type="BINDATA" /> + <include name="IDR_MEDIA_STATUS_MOJOM_JS" file="${mojom_root}\chrome\common\media_router\mojo\media_status.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MOJO_TIME_MOJOM_JS" file="${mojom_root}\mojo\common\time.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MOJO_IP_ADDRESS_MOJOM_JS" file="${mojom_root}\net\interfaces\ip_address.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_ORIGIN_MOJOM_JS" file="${mojom_root}\url\mojo\origin.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MOJO_URL_MOJOM_JS" file="${mojom_root}\url\mojo\url.mojom.js" use_base_dir="false" type="BINDATA" /> + </if> </if> </includes> </release>
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 64ea782..9ae30bfa 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4429,23 +4429,23 @@ "../browser/media/cast_remoting_connector_unittest.cc", "../browser/media/router/browser_presentation_connection_proxy_unittest.cc", "../browser/media/router/create_presentation_connection_request_unittest.cc", - "../browser/media/router/discovery/media_sink_internal_unittest.cc", "../browser/media/router/issue_manager_unittest.cc", - "../browser/media/router/issue_unittest.cc", - "../browser/media/router/media_route_unittest.cc", "../browser/media/router/media_router_base_unittest.cc", "../browser/media/router/media_router_dialog_controller_unittest.cc", "../browser/media/router/media_router_factory_unittest.cc", "../browser/media/router/media_router_metrics_unittest.cc", - "../browser/media/router/media_sink_unittest.cc", "../browser/media/router/media_sinks_observer_unittest.cc", - "../browser/media/router/media_source_helper_unittest.cc", - "../browser/media/router/media_source_unittest.cc", "../browser/media/router/offscreen_presentation_manager_factory_unittest.cc", "../browser/media/router/offscreen_presentation_manager_unittest.cc", "../browser/media/router/presentation_media_sinks_observer_unittest.cc", "../browser/media/router/presentation_request_unittest.cc", "../browser/media/router/presentation_service_delegate_impl_unittest.cc", + "../common/media_router/discovery/media_sink_internal_unittest.cc", + "../common/media_router/issue_unittest.cc", + "../common/media_router/media_route_unittest.cc", + "../common/media_router/media_sink_unittest.cc", + "../common/media_router/media_source_helper_unittest.cc", + "../common/media_router/media_source_unittest.cc", ] deps += [ "//chrome/browser/media/router:test_support" ] if (!is_android) { @@ -4461,7 +4461,6 @@ "../browser/media/router/mojo/media_route_controller_unittest.cc", "../browser/media/router/mojo/media_router_mojo_impl_unittest.cc", "../browser/media/router/mojo/media_router_mojo_metrics_unittest.cc", - "../browser/media/router/mojo/media_router_struct_traits_unittest.cc", "../browser/ui/toolbar/media_router_action_controller_unittest.cc", "../browser/ui/toolbar/media_router_action_unittest.cc", "../browser/ui/toolbar/media_router_contextual_menu_unittest.cc", @@ -4475,6 +4474,7 @@ "../browser/ui/webui/media_router/media_router_web_ui_test.h", "../browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc", "../browser/ui/webui/media_router/query_result_manager_unittest.cc", + "../common/media_router/mojo/media_router_struct_traits_unittest.cc", "../utility/media_router/dial_device_description_parser_impl_unittest.cc", ] }
diff --git a/chrome/test/data/extensions/api_test/automation/tests/desktop/hit_test.html b/chrome/test/data/extensions/api_test/automation/tests/desktop/hit_test.html new file mode 100644 index 0000000..cc4539f --- /dev/null +++ b/chrome/test/data/extensions/api_test/automation/tests/desktop/hit_test.html
@@ -0,0 +1,7 @@ +<!-- + * 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. +--> +<script src="common.js"></script> +<script src="hit_test.js"></script>
diff --git a/chrome/test/data/extensions/api_test/automation/tests/desktop/hit_test.js b/chrome/test/data/extensions/api_test/automation/tests/desktop/hit_test.js new file mode 100644 index 0000000..9e7f7a69 --- /dev/null +++ b/chrome/test/data/extensions/api_test/automation/tests/desktop/hit_test.js
@@ -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. + +var allTests = [ + function testHitTestInDesktop() { + var url = 'data:text/html,<!doctype html>' + + encodeURI('<button>Click Me</button>'); + chrome.automation.getDesktop(function(desktop) { + chrome.tabs.create({url: url}); + + desktop.addEventListener('loadComplete', function(event) { + if (event.target.url.indexOf('data:') >= 0) { + var button = desktop.find({ attributes: { name: 'Click Me' } }); + if (button) { + button.addEventListener(EventType.ALERT, function() { + chrome.test.succeed(); + }, true); + var cx = Math.floor( + button.location.left + button.location.width / 2); + var cy = Math.floor( + button.location.top + button.location.height / 2); + desktop.hitTest(cx, cy, EventType.ALERT); + } + } + }, false); + }); + }, +]; + +chrome.test.runTests(allTests);
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js index 92f65aeb..75cdaf59 100644 --- a/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js +++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js
@@ -168,7 +168,7 @@ }, function testTableAttributes() { - var table = rootNode.find({ role: 'table' });; + var table = rootNode.find({ role: 'grid' });; assertEq(3, table.tableRowCount); assertEq(3, table.tableColumnCount);
diff --git a/chrome/test/data/webui/settings/languages_page_browsertest.js b/chrome/test/data/webui/settings/languages_page_browsertest.js index ea269e62..ae7dfab6 100644 --- a/chrome/test/data/webui/settings/languages_page_browsertest.js +++ b/chrome/test/data/webui/settings/languages_page_browsertest.js
@@ -31,15 +31,14 @@ }, }; -// Flaky on Windows. See https://crbug.com/641400. -// May time out on debug builders and memory bots because -// the Settings page can take several seconds to load in a Release build -// and several times that in a Debug build. See https://crbug.com/558434. -GEN('#if defined(OS_WINDOWS) || defined(MEMORY_SANITIZER) || !defined(NDEBUG)'); +// Flaky on Windows, Mac and Linux. See https://crbug.com/641400. +// +// May time out on debug builders and memory bots because the Settings page can +// take several seconds to load in a Release build and several times that in a +// Debug build. See https://crbug.com/558434. +// +// Disabling this test in general. GEN('#define MAYBE_LanguagesPage DISABLED_LanguagesPage'); -GEN('#else'); -GEN('#define MAYBE_LanguagesPage LanguagesPage'); -GEN('#endif'); // Runs languages page tests. TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
diff --git a/chrome/test/media_router/media_router_e2e_browsertest.cc b/chrome/test/media_router/media_router_e2e_browsertest.cc index a3b7fe6..f4bc819 100644 --- a/chrome/test/media_router/media_router_e2e_browsertest.cc +++ b/chrome/test/media_router/media_router_e2e_browsertest.cc
@@ -5,17 +5,18 @@ #include "chrome/test/media_router/media_router_e2e_browsertest.h" #include <vector> + #include "base/command_line.h" #include "base/stl_util.h" #include "chrome/browser/media/router/media_router.h" #include "chrome/browser/media/router/media_router_factory.h" -#include "chrome/browser/media/router/media_source.h" -#include "chrome/browser/media/router/media_source_helper.h" -#include "chrome/browser/media/router/route_request_result.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/common/media_router/media_source.h" +#include "chrome/common/media_router/media_source_helper.h" +#include "chrome/common/media_router/route_request_result.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/test_utils.h" #include "media/base/test_data_util.h"
diff --git a/chrome/test/media_router/media_router_e2e_browsertest.h b/chrome/test/media_router/media_router_e2e_browsertest.h index d051a1d..3d42027 100644 --- a/chrome/test/media_router/media_router_e2e_browsertest.h +++ b/chrome/test/media_router/media_router_e2e_browsertest.h
@@ -8,8 +8,8 @@ #include <memory> #include <string> -#include "chrome/browser/media/router/media_route.h" #include "chrome/browser/media/router/media_router.h" +#include "chrome/common/media_router/media_route.h" #include "chrome/test/media_router/media_router_integration_browsertest.h" #include "chrome/test/media_router/test_media_sinks_observer.h"
diff --git a/chrome/utility/media_router/dial_device_description_parser_impl.h b/chrome/utility/media_router/dial_device_description_parser_impl.h index a07f0fd..529ec0e5 100644 --- a/chrome/utility/media_router/dial_device_description_parser_impl.h +++ b/chrome/utility/media_router/dial_device_description_parser_impl.h
@@ -6,7 +6,7 @@ #define CHROME_UTILITY_MEDIA_ROUTER_DIAL_DEVICE_DESCRIPTION_PARSER_IMPL_H_ #include "base/macros.h" -#include "chrome/common/media_router/dial_device_description_parser.mojom.h" +#include "chrome/common/media_router/mojo/dial_device_description_parser.mojom.h" namespace media_router {
diff --git a/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc b/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc index 2ef1fa40..2201380 100644 --- a/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc +++ b/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc
@@ -68,8 +68,7 @@ ::media::CHANNEL_LAYOUT_STEREO)); } base::WeakPtr<CastAudioDecoderImpl> self = weak_factory_.GetWeakPtr(); - decoder_.reset(new ::media::FFmpegAudioDecoder( - task_runner_, make_scoped_refptr(new ::media::MediaLog()))); + decoder_.reset(new ::media::FFmpegAudioDecoder(task_runner_, &media_log_)); decoder_->Initialize( media::DecoderConfigAdapter::ToMediaAudioDecoderConfig(config_), nullptr, base::Bind(&CastAudioDecoderImpl::OnInitialized, self), @@ -246,6 +245,7 @@ new media::DecoderBufferAdapter(config_.id, result)); } + ::media::MediaLog media_log_; const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; InitializedCallback initialized_callback_; OutputFormat output_format_;
diff --git a/chromecast/media/cma/test/frame_segmenter_for_test.cc b/chromecast/media/cma/test/frame_segmenter_for_test.cc index 25b4b8d3..d5679c0 100644 --- a/chromecast/media/cma/test/frame_segmenter_for_test.cc +++ b/chromecast/media/cma/test/frame_segmenter_for_test.cc
@@ -313,13 +313,13 @@ ::media::FileDataSource data_source; CHECK(data_source.Initialize(filepath)); - ::media::FFmpegDemuxer demuxer( - base::ThreadTaskRunnerHandle::Get(), &data_source, - base::Bind(&OnEncryptedMediaInitData), base::Bind(&OnMediaTracksUpdated), - new ::media::MediaLog()); + ::media::MediaLog media_log; + ::media::FFmpegDemuxer demuxer(base::ThreadTaskRunnerHandle::Get(), + &data_source, + base::Bind(&OnEncryptedMediaInitData), + base::Bind(&OnMediaTracksUpdated), &media_log); ::media::WaitableMessageLoopEvent init_event; - demuxer.Initialize(&fake_demuxer_host, - init_event.GetPipelineStatusCB(), + demuxer.Initialize(&fake_demuxer_host, init_event.GetPipelineStatusCB(), false); init_event.RunAndWaitForStatus(::media::PIPELINE_OK);
diff --git a/chromecast/media/service/cast_mojo_media_client.cc b/chromecast/media/service/cast_mojo_media_client.cc index 3fc985b..d8e4fbba 100644 --- a/chromecast/media/service/cast_mojo_media_client.cc +++ b/chromecast/media/service/cast_mojo_media_client.cc
@@ -57,12 +57,10 @@ class CastRendererFactory : public ::media::RendererFactory { public: CastRendererFactory(MediaPipelineBackendFactory* backend_factory, - const scoped_refptr<::media::MediaLog>& media_log, VideoModeSwitcher* video_mode_switcher, VideoResolutionPolicy* video_resolution_policy, MediaResourceTracker* media_resource_tracker) : backend_factory_(backend_factory), - media_log_(media_log), video_mode_switcher_(video_mode_switcher), video_resolution_policy_(video_resolution_policy), media_resource_tracker_(media_resource_tracker) {} @@ -85,7 +83,6 @@ private: MediaPipelineBackendFactory* const backend_factory_; - scoped_refptr<::media::MediaLog> media_log_; VideoModeSwitcher* video_mode_switcher_; VideoResolutionPolicy* video_resolution_policy_; MediaResourceTracker* media_resource_tracker_; @@ -123,11 +120,10 @@ } std::unique_ptr<::media::RendererFactory> -CastMojoMediaClient::CreateRendererFactory( - const scoped_refptr<::media::MediaLog>& media_log) { +CastMojoMediaClient::CreateRendererFactory(::media::MediaLog* /* media_log */) { return base::MakeUnique<CastRendererFactory>( - backend_factory_, media_log, video_mode_switcher_, - video_resolution_policy_, media_resource_tracker_); + backend_factory_, video_mode_switcher_, video_resolution_policy_, + media_resource_tracker_); } std::unique_ptr<::media::CdmFactory> CastMojoMediaClient::CreateCdmFactory(
diff --git a/chromecast/media/service/cast_mojo_media_client.h b/chromecast/media/service/cast_mojo_media_client.h index bcf890f..521507b 100644 --- a/chromecast/media/service/cast_mojo_media_client.h +++ b/chromecast/media/service/cast_mojo_media_client.h
@@ -32,7 +32,7 @@ scoped_refptr<::media::AudioRendererSink> CreateAudioRendererSink( const std::string& audio_device_id) override; std::unique_ptr<::media::RendererFactory> CreateRendererFactory( - const scoped_refptr<::media::MediaLog>& media_log) override; + ::media::MediaLog* media_log) override; std::unique_ptr<::media::CdmFactory> CreateCdmFactory( service_manager::mojom::InterfaceProvider* host_interfaces) override;
diff --git a/chromeos/BUILD.gn b/chromeos/BUILD.gn index ffb13bf..8154535 100644 --- a/chromeos/BUILD.gn +++ b/chromeos/BUILD.gn
@@ -415,6 +415,8 @@ "network/shill_property_handler.h", "network/shill_property_util.cc", "network/shill_property_util.h", + "network/tether_constants.cc", + "network/tether_constants.h", "printing/ppd_cache.cc", "printing/ppd_cache.h", "printing/ppd_provider.cc",
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc index aeba782..620ae84 100644 --- a/chromeos/network/network_state_handler.cc +++ b/chromeos/network/network_state_handler.cc
@@ -25,6 +25,7 @@ #include "chromeos/network/network_event_log.h" #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler_observer.h" +#include "chromeos/network/tether_constants.h" #include "third_party/cros_system_api/dbus/service_constants.h" namespace chromeos {
diff --git a/chromeos/network/network_type_pattern.cc b/chromeos/network/network_type_pattern.cc index 9e3c02c..dbda85ba 100644 --- a/chromeos/network/network_type_pattern.cc +++ b/chromeos/network/network_type_pattern.cc
@@ -7,12 +7,11 @@ #include <stddef.h> #include "chromeos/network/network_event_log.h" +#include "chromeos/network/tether_constants.h" #include "third_party/cros_system_api/dbus/service_constants.h" namespace chromeos { -const char kTypeTether[] = "wifi-tether"; - namespace { const char kPatternDefault[] = "PatternDefault"; @@ -20,6 +19,7 @@ const char kPatternWireless[] = "PatternWireless"; const char kPatternMobile[] = "PatternMobile"; const char kPatternNonVirtual[] = "PatternNonVirtual"; +const char kPatternTether[] = "PatternTether"; enum NetworkTypeBitFlag { kNetworkTypeNone = 0, @@ -141,6 +141,8 @@ return kPatternMobile; if (Equals(NonVirtual())) return kPatternNonVirtual; + if (Equals(Tether())) + return kPatternTether; std::string str; for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) {
diff --git a/chromeos/network/network_type_pattern.h b/chromeos/network/network_type_pattern.h index 702db0f..8dd214fc 100644 --- a/chromeos/network/network_type_pattern.h +++ b/chromeos/network/network_type_pattern.h
@@ -12,9 +12,6 @@ namespace chromeos { -// A special case non-shill type. -CHROMEOS_EXPORT extern const char kTypeTether[]; - class CHROMEOS_EXPORT NetworkTypePattern { public: // Matches any network.
diff --git a/chromeos/network/network_type_pattern_unittest.cc b/chromeos/network/network_type_pattern_unittest.cc index 0003d8a6..142f403b 100644 --- a/chromeos/network/network_type_pattern_unittest.cc +++ b/chromeos/network/network_type_pattern_unittest.cc
@@ -4,6 +4,7 @@ #include "chromeos/network/network_type_pattern.h" +#include "chromeos/network/tether_constants.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/service_constants.h"
diff --git a/chromeos/network/onc/onc_signature.cc b/chromeos/network/onc/onc_signature.cc index b4a0cfc..7887edb 100644 --- a/chromeos/network/onc/onc_signature.cc +++ b/chromeos/network/onc/onc_signature.cc
@@ -166,6 +166,12 @@ {::onc::ethernet::kEAP, &kEAPSignature}, {NULL}}; +const OncFieldSignature tether_fields[] = { + {::onc::tether::kBatteryPercentage, &kIntegerSignature}, + {::onc::tether::kCarrier, &kStringSignature}, + {::onc::tether::kSignalStrength, &kIntegerSignature}, + {NULL}}; + const OncFieldSignature ipconfig_fields[] = { {::onc::ipconfig::kGateway, &kStringSignature}, {::onc::ipconfig::kIPAddress, &kStringSignature}, @@ -328,6 +334,7 @@ {::onc::network_config::kRestrictedConnectivity, &kBoolSignature}, {::onc::network_config::kSavedIPConfig, &kSavedIPConfigSignature}, {::onc::network_config::kSource, &kStringSignature}, + {::onc::network_config::kTether, &kTetherSignature}, {::onc::network_config::kWiFi, &kWiFiWithStateSignature}, {::onc::network_config::kWimax, &kWiMAXWithStateSignature}, {NULL}}; @@ -392,6 +399,8 @@ vpn_fields, NULL}; const OncValueSignature kEthernetSignature = {base::Value::Type::DICTIONARY, ethernet_fields, NULL}; +const OncValueSignature kTetherSignature = {base::Value::Type::DICTIONARY, + tether_fields, NULL}; const OncValueSignature kIPConfigSignature = {base::Value::Type::DICTIONARY, ipconfig_fields, NULL}; const OncValueSignature kSavedIPConfigSignature = {
diff --git a/chromeos/network/onc/onc_signature.h b/chromeos/network/onc/onc_signature.h index 9b01d3a6..ebc8778 100644 --- a/chromeos/network/onc/onc_signature.h +++ b/chromeos/network/onc/onc_signature.h
@@ -46,6 +46,7 @@ CHROMEOS_EXPORT extern const OncValueSignature kVerifyX509Signature; CHROMEOS_EXPORT extern const OncValueSignature kVPNSignature; CHROMEOS_EXPORT extern const OncValueSignature kEthernetSignature; +CHROMEOS_EXPORT extern const OncValueSignature kTetherSignature; CHROMEOS_EXPORT extern const OncValueSignature kIPConfigSignature; CHROMEOS_EXPORT extern const OncValueSignature kSavedIPConfigSignature; CHROMEOS_EXPORT extern const OncValueSignature kStaticIPConfigSignature;
diff --git a/chromeos/network/onc/onc_translation_tables.cc b/chromeos/network/onc/onc_translation_tables.cc index 27feecb..51fa269c 100644 --- a/chromeos/network/onc/onc_translation_tables.cc +++ b/chromeos/network/onc/onc_translation_tables.cc
@@ -7,6 +7,8 @@ #include <cstddef> #include "base/logging.h" +#include "chromeos/network/network_type_pattern.h" +#include "chromeos/network/tether_constants.h" #include "components/onc/onc_constants.h" #include "third_party/cros_system_api/dbus/service_constants.h" @@ -109,6 +111,12 @@ // { ::onc::vpn::kType, shill::kProviderTypeProperty }, {NULL}}; +const FieldTranslationEntry tether_fields[] = { + {::onc::tether::kBatteryPercentage, kTetherBatteryPercentage}, + {::onc::tether::kCarrier, kTetherCarrier}, + {::onc::tether::kSignalStrength, kTetherSignalStrength}, + {NULL}}; + const FieldTranslationEntry wifi_fields[] = { {::onc::wifi::kAutoConnect, shill::kAutoConnectProperty}, {::onc::wifi::kBSSID, shill::kWifiBSsid}, @@ -239,6 +247,7 @@ {&kOpenVPNSignature, openvpn_fields}, {&kVerifyX509Signature, verify_x509_fields}, {&kVPNSignature, vpn_fields}, + {&kTetherSignature, tether_fields}, {&kWiFiSignature, wifi_fields}, {&kWiFiWithStateSignature, wifi_fields}, {&kWiMAXSignature, wimax_fields}, @@ -283,6 +292,7 @@ {::onc::network_type::kWimax, shill::kTypeWimax}, {::onc::network_type::kCellular, shill::kTypeCellular}, {::onc::network_type::kVPN, shill::kTypeVPN}, + {::onc::network_type::kTether, kTypeTether}, {NULL}}; const StringTranslationEntry kVPNTypeTable[] = {
diff --git a/chromeos/network/onc/onc_translator_unittest.cc b/chromeos/network/onc/onc_translator_unittest.cc index e93d7d2..c4909eb4 100644 --- a/chromeos/network/onc/onc_translator_unittest.cc +++ b/chromeos/network/onc/onc_translator_unittest.cc
@@ -117,6 +117,7 @@ "translation_of_shill_openvpn.onc"), std::make_pair("shill_output_openvpn_with_errors.json", "translation_of_shill_openvpn_with_errors.onc"), + std::make_pair("shill_tether.json", "tether.onc"), std::make_pair("shill_wifi_with_state.json", "translation_of_shill_wifi_with_state.onc"), std::make_pair("shill_wifi_proxy.json",
diff --git a/chromeos/network/onc/onc_utils.cc b/chromeos/network/onc/onc_utils.cc index 4b7b7a3..18154f3 100644 --- a/chromeos/network/onc/onc_utils.cc +++ b/chromeos/network/onc/onc_utils.cc
@@ -761,6 +761,8 @@ return NetworkTypePattern::Cellular(); if (type == ::onc::network_type::kEthernet) return NetworkTypePattern::Ethernet(); + if (type == ::onc::network_type::kTether) + return NetworkTypePattern::Tether(); if (type == ::onc::network_type::kVPN) return NetworkTypePattern::VPN(); if (type == ::onc::network_type::kWiFi)
diff --git a/chromeos/network/onc/onc_validator.cc b/chromeos/network/onc/onc_validator.cc index 97150fd..f596bec 100644 --- a/chromeos/network/onc/onc_validator.cc +++ b/chromeos/network/onc/onc_validator.cc
@@ -129,6 +129,8 @@ valid = ValidateEAP(repaired.get()); } else if (&signature == &kCertificateSignature) { valid = ValidateCertificate(repaired.get()); + } else if (&signature == &kTetherSignature) { + valid = ValidateTether(repaired.get()); } } @@ -547,11 +549,10 @@ bool Validator::ValidateNetworkConfiguration(base::DictionaryValue* result) { using namespace ::onc::network_config; - const char* const kValidTypes[] = {::onc::network_type::kEthernet, - ::onc::network_type::kVPN, - ::onc::network_type::kWiFi, - ::onc::network_type::kCellular, - ::onc::network_type::kWimax}; + const char* const kValidTypes[] = { + ::onc::network_type::kEthernet, ::onc::network_type::kVPN, + ::onc::network_type::kWiFi, ::onc::network_type::kCellular, + ::onc::network_type::kWimax, ::onc::network_type::kTether}; const std::vector<const char*> valid_types(toVector(kValidTypes)); const char* const kValidIPConfigTypes[] = {kIPConfigTypeDHCP, kIPConfigTypeStatic}; @@ -616,6 +617,9 @@ RequireField(*result, ::onc::network_config::kWimax); } else if (type == ::onc::network_type::kVPN) { all_required_exist &= RequireField(*result, ::onc::network_config::kVPN); + } else if (type == ::onc::network_type::kTether) { + all_required_exist &= + RequireField(*result, ::onc::network_config::kTether); } } @@ -898,7 +902,7 @@ // Ensure the list contains only legitimate network type identifiers. const char* const kValidNetworkTypeValues[] = {kCellular, kEthernet, kWiFi, - kWimax}; + kWimax, kTether}; const std::vector<const char*> valid_network_type_values( toVector(kValidNetworkTypeValues)); if (!ListFieldContainsValidValues(*result, kDisableNetworkTypes, @@ -1015,6 +1019,39 @@ return !error_on_missing_field_ || all_required_exist; } +bool Validator::ValidateTether(base::DictionaryValue* result) { + using namespace ::onc::tether; + + int batteryPercentage; + if (!result->GetIntegerWithoutPathExpansion(kBatteryPercentage, + &batteryPercentage) || + batteryPercentage < 0 || batteryPercentage > 100) { + // Battery percentage must be present and within [0, 100]. + error_or_warning_found_ = true; + return false; + } + + int signalStrength; + if (!result->GetIntegerWithoutPathExpansion(kSignalStrength, + &signalStrength) || + signalStrength < 0 || signalStrength > 100) { + // Signal strength must be present and within [0, 100]. + error_or_warning_found_ = true; + return false; + } + + std::string carrier; + if (!result->GetStringWithoutPathExpansion(kCarrier, &carrier) || + carrier.empty()) { + // Carrier must be a non-empty string. + error_or_warning_found_ = true; + return false; + } + + // No required fields. + return true; +} + std::string Validator::MessageHeader() { std::string path = path_.empty() ? "toplevel" : base::JoinString(path_, "."); std::string message = "At " + path + ": ";
diff --git a/chromeos/network/onc/onc_validator.h b/chromeos/network/onc/onc_validator.h index 7c1a5e1..3109590f 100644 --- a/chromeos/network/onc/onc_validator.h +++ b/chromeos/network/onc/onc_validator.h
@@ -171,6 +171,7 @@ bool ValidateProxyLocation(base::DictionaryValue* result); bool ValidateEAP(base::DictionaryValue* result); bool ValidateCertificate(base::DictionaryValue* result); + bool ValidateTether(base::DictionaryValue* result); bool IsValidValue(const std::string& field_value, const std::vector<const char*>& valid_values);
diff --git a/chromeos/network/onc/onc_validator_unittest.cc b/chromeos/network/onc/onc_validator_unittest.cc index 0452b2c..92b3c87 100644 --- a/chromeos/network/onc/onc_validator_unittest.cc +++ b/chromeos/network/onc/onc_validator_unittest.cc
@@ -222,7 +222,8 @@ false), OncParams("third_party_vpn.onc", &kNetworkConfigurationSignature, - false))); + false), + OncParams("tether.onc", &kNetworkWithStateSignature, false))); namespace { @@ -551,6 +552,34 @@ std::make_pair(OncParams("openvpn-invalid-verify-x509-type", &kNetworkConfigurationSignature, false), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-missing-battery-percentage", + &kNetworkWithStateSignature, + true), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-negative-battery", + &kNetworkWithStateSignature, + true), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-battery-over-100", + &kNetworkWithStateSignature, + true), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-missing-carrier", + &kNetworkWithStateSignature, + true), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-missing-signal-strength", + &kNetworkWithStateSignature, + true), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-negative-signal-strength", + &kNetworkWithStateSignature, + true), + ExpectBothNotValid("", "")), + std::make_pair(OncParams("tether-signal-strength-over-100", + &kNetworkWithStateSignature, + true), ExpectBothNotValid("", "")))); } // namespace onc
diff --git a/chromeos/network/tether_constants.cc b/chromeos/network/tether_constants.cc new file mode 100644 index 0000000..70867b5a1 --- /dev/null +++ b/chromeos/network/tether_constants.cc
@@ -0,0 +1,14 @@ +// 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 "chromeos/network/tether_constants.h" + +namespace chromeos { + +const char kTypeTether[] = "wifi-tether"; +const char kTetherBatteryPercentage[] = "Tether.BatteryPercentage"; +const char kTetherCarrier[] = "Tether.Carrier"; +const char kTetherSignalStrength[] = "Tether.SignalStrength"; + +} // namespace chromeos
diff --git a/chromeos/network/tether_constants.h b/chromeos/network/tether_constants.h new file mode 100644 index 0000000..26b4f21d --- /dev/null +++ b/chromeos/network/tether_constants.h
@@ -0,0 +1,27 @@ +// 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 CHROMEOS_NETWORK_TETHER_CONSTANTS_H_ +#define CHROMEOS_NETWORK_TETHER_CONSTANTS_H_ + +#include "chromeos/chromeos_export.h" + +namespace chromeos { + +// This file contains constants for Chrome OS tether networks which are used +// wherever Shill constants are appropriate. Tether networks are a Chrome OS +// concept which does not exist as part of Shill, so these custom definitions +// are used instead. Tether networks are never intended to be passed to Shill +// code, so these constants are used primarily as part of NetworkStateHandler. + +// Represents the tether network type. +CHROMEOS_EXPORT extern const char kTypeTether[]; + +// Properties associated with tether networks. +CHROMEOS_EXPORT extern const char kTetherBatteryPercentage[]; +CHROMEOS_EXPORT extern const char kTetherCarrier[]; +CHROMEOS_EXPORT extern const char kTetherSignalStrength[]; + +} // namespace chromeos + +#endif // CHROMEOS_NETWORK_TETHER_CONSTANTS_H_
diff --git a/chromeos/test/data/network/invalid_settings_with_repairs.json b/chromeos/test/data/network/invalid_settings_with_repairs.json index efdc9dc7..df1abaf 100644 --- a/chromeos/test/data/network/invalid_settings_with_repairs.json +++ b/chromeos/test/data/network/invalid_settings_with_repairs.json
@@ -399,6 +399,73 @@ } } }, + "tether-missing-battery-percentage": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "Carrier": "Project Fi", + "SignalStrength": 75 + } + }, + "tether-negative-battery": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "BatteryPercentage": -1, + "Carrier": "Project Fi", + "SignalStrength": 75 + } + }, + "tether-battery-over-100": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "BatteryPercentage": 101, + "Carrier": "Project Fi", + "SignalStrength": 75 + } + }, + "tether-missing-carrier": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "BatteryPercentage": 85, + "SignalStrength": 75 + } + }, + "tether-missing-signal-strength": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "BatteryPercentage": 85, + "Carrier": "Project Fi" + } + }, + "tether-negative-signal-strength": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "BatteryPercentage": 85, + "Carrier": "Project Fi", + "SignalStrength": -1 + } + }, + "tether-signal-strength-over-100": { + "GUID": "guid", + "Name": "name", + "Type": "Tether", + "Tether": { + "BatteryPercentage": 85, + "Carrier": "Project Fi", + "SignalStrength": 101 + } + }, "third-party-vpn-missing-extension-id": { "GUID": "guid", "Name": "third-party VPN",
diff --git a/chromeos/test/data/network/shill_tether.json b/chromeos/test/data/network/shill_tether.json new file mode 100644 index 0000000..2f7e18e --- /dev/null +++ b/chromeos/test/data/network/shill_tether.json
@@ -0,0 +1,7 @@ +{ + "Type": "wifi-tether", + "Name": "Tether Network", + "Tether.BatteryPercentage": 85, + "Tether.Carrier": "Project Fi", + "Tether.SignalStrength": 75 +}
diff --git a/chromeos/test/data/network/tether.onc b/chromeos/test/data/network/tether.onc new file mode 100644 index 0000000..02970b1 --- /dev/null +++ b/chromeos/test/data/network/tether.onc
@@ -0,0 +1,9 @@ +{ + "Type": "Tether", + "Name": "Tether Network", + "Tether": { + "BatteryPercentage": 85, + "Carrier": "Project Fi", + "SignalStrength": 75 + } +}
diff --git a/components/chrome_cleaner/public/constants/constants.cc b/components/chrome_cleaner/public/constants/constants.cc index 6aae97e..df8530f 100644 --- a/components/chrome_cleaner/public/constants/constants.cc +++ b/components/chrome_cleaner/public/constants/constants.cc
@@ -14,6 +14,7 @@ const char kChromeSystemInstallSwitch[] = "chrome-system-install"; const char kChromeVersionSwitch[] = "chrome-version"; const char kEnableCrashReportingSwitch[] = "enable-crash-reporting"; +const char kExecutionModeSwitch[] = "execution-mode"; const char kExtendedSafeBrowsingEnabledSwitch[] = "extended-safebrowsing-enabled"; const char kSessionIdSwitch[] = "session-id";
diff --git a/components/chrome_cleaner/public/constants/constants.h b/components/chrome_cleaner/public/constants/constants.h index 03cd6ae..1009db1 100644 --- a/components/chrome_cleaner/public/constants/constants.h +++ b/components/chrome_cleaner/public/constants/constants.h
@@ -36,6 +36,10 @@ // Indicates that crash reporting is enabled for the current user. extern const char kEnableCrashReportingSwitch[]; +// Indicates the execution mode for the Chrome Cleanup Tool. Possible values +// defined in enum ExecutionMode. +extern const char kExecutionModeSwitch[]; + // Indicates that the current user opted into Safe Browsing Extended Reporting. extern const char kExtendedSafeBrowsingEnabledSwitch[]; @@ -85,6 +89,22 @@ kShownFromMenu = 4 }; +// Values to be passed to the kExecutionModeSwitch for the Chrome Cleanup Tool +// to indicate the mode in which it should be executed. +enum class ExecutionMode { + // No mode specified, which means the cleaner is running in legacy mode and + // will show its own UI and handle logs uploading permissions. + kNone = 0, + // The cleaner will run in scanning mode. No UI will be shown to the user + // (UI handled by Chrome) and logs will only be uploaded if the user opted + // into Extended Safe Browsing Reporting. + kScanning = 1, + // The cleaner will run in cleanup mode only. No UI will be shown to the + // user (UI handled by Chrome) and logs will only be uploaded if the user + // opted into Extended Safe Browsing Reporting v2. + kCleanup = 2, +}; + } // namespace chrome_cleaner #endif // COMPONENTS_CHROME_CLEANER_PUBLIC_CONSTANTS_CONSTANTS_H_
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java index cb47233..505ee82c 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java
@@ -4,16 +4,18 @@ package org.chromium.net; -import android.support.test.filters.SmallTest; +import android.support.test.filters.MediumTest; import org.json.JSONObject; +import org.chromium.base.Log; import org.chromium.base.PathUtils; import org.chromium.base.test.util.Feature; -import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; /** * Tests for experimental options. @@ -42,7 +44,7 @@ super.tearDown(); } - @SmallTest + @MediumTest @Feature({"Cronet"}) @OnlyRunNativeCronet // Tests that NetLog writes effective experimental options to NetLog. @@ -66,27 +68,12 @@ assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); assertEquals("GET", callback.mResponseAsString); mTestFramework.mCronetEngine.stopNetLog(); - assertTrue(logfile.exists()); - assertTrue(logfile.length() != 0); - BufferedReader logReader = new BufferedReader(new FileReader(logfile)); - boolean validFile = false; - try { - String logLine; - while ((logLine = logReader.readLine()) != null) { - if (logLine.contains("HostResolverRules")) { - validFile = true; - break; - } - } - } finally { - logReader.close(); - } - assertTrue(validFile); + assertFileContainsString(logfile, "HostResolverRules"); assertTrue(logfile.delete()); - assertTrue(!logfile.exists()); + assertFalse(logfile.exists()); } - @SmallTest + @MediumTest @Feature({"Cronet"}) @OnlyRunNativeCronet public void testSetSSLKeyLogFile() throws Exception { @@ -107,23 +94,47 @@ assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); assertEquals("GET", callback.mResponseAsString); - assertTrue(file.exists()); - assertTrue(file.length() != 0); - BufferedReader logReader = new BufferedReader(new FileReader(file)); - boolean validFile = false; - try { - String logLine; - while ((logLine = logReader.readLine()) != null) { - if (logLine.contains("CLIENT_RANDOM")) { - validFile = true; - break; - } - } - } finally { - logReader.close(); - } - assertTrue(validFile); + assertFileContainsString(file, "CLIENT_RANDOM"); assertTrue(file.delete()); - assertTrue(!file.exists()); + assertFalse(file.exists()); + } + + // Helper method to assert that file contains content. It retries 5 times + // with a 100ms interval. + private void assertFileContainsString(File file, String content) throws Exception { + boolean contains = false; + for (int i = 0; i < 5; i++) { + contains = fileContainsString(file, content); + if (contains) break; + Log.i(TAG, "Retrying..."); + Thread.sleep(100); + } + assertTrue("file content doesn't match", contains); + } + + // Returns whether a file contains a particular string. + private boolean fileContainsString(File file, String content) throws IOException { + FileInputStream fileInputStream = null; + Log.i(TAG, "looking for [%s] in %s", content, file.getName()); + try { + fileInputStream = new FileInputStream(file); + byte[] data = new byte[(int) file.length()]; + fileInputStream.read(data); + String actual = new String(data, "UTF-8"); + boolean contains = actual.contains(content); + if (!contains) { + Log.i(TAG, "file content [%s]", actual); + } + return contains; + } catch (FileNotFoundException e) { + // Ignored this exception since the file will only be created when updates are + // flushed to the disk. + Log.i(TAG, "file not found"); + } finally { + if (fileInputStream != null) { + fileInputStream.close(); + } + } + return false; } }
diff --git a/components/cronet/ios/test/cronet_http_test.mm b/components/cronet/ios/test/cronet_http_test.mm index e1642fe..5818508 100644 --- a/components/cronet/ios/test/cronet_http_test.mm +++ b/components/cronet/ios/test/cronet_http_test.mm
@@ -28,21 +28,19 @@ // Completion semaphore for this TestDelegate. When the request this delegate is // attached to finishes (either successfully or with an error), this delegate // signals this semaphore. -@property(assign, nonatomic) dispatch_semaphore_t semaphore; - -// Body of response received by the request this delegate is attached to. -@property(retain, nonatomic) NSString* responseBody; +@property(assign, atomic) dispatch_semaphore_t semaphore; // Error the request this delegate is attached to failed with, if any. -@property(retain, nonatomic) NSError* error; +@property(retain, atomic) NSError* error; @end @implementation TestDelegate @synthesize semaphore = _semaphore; -@synthesize responseBody = _responseBody; @synthesize error = _error; +NSMutableArray<NSData*>* _responseData; + - (id)init { if (self = [super init]) { _semaphore = dispatch_semaphore_create(0); @@ -58,10 +56,25 @@ } - (void)reset { - _responseBody = nil; + [_responseData dealloc]; + _responseData = nil; _error = nil; } +- (NSString*)responseBody { + if (_responseData == nil) { + return nil; + } + NSMutableString* body = [NSMutableString string]; + for (NSData* data in _responseData) { + [body appendString:[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]]; + } + VLOG(3) << "responseBody size:" << [body length] + << " chunks:" << [_responseData count]; + return body; +} + - (void)URLSession:(NSURLSession*)session didBecomeInvalidWithError:(NSError*)error { } @@ -93,13 +106,10 @@ - (void)URLSession:(NSURLSession*)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveData:(NSData*)data { - NSString* stringData = - [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - if (_responseBody == nil) { - _responseBody = stringData; - } else { - _responseBody = [_responseBody stringByAppendingString:stringData]; + if (_responseData == nil) { + _responseData = [[NSMutableArray alloc] init]; } + [_responseData addObject:data]; } - (void)URLSession:(NSURLSession*)session @@ -154,9 +164,10 @@ void StartDataTaskAndWaitForCompletion(NSURLSessionDataTask* task) { [delegate_ reset]; [task resume]; - int64_t deadline_ns = 1 * ns_in_second; - dispatch_semaphore_wait([delegate_ semaphore], - dispatch_time(DISPATCH_TIME_NOW, deadline_ns)); + int64_t deadline_ns = 20 * ns_in_second; + ASSERT_EQ(0, dispatch_semaphore_wait( + [delegate_ semaphore], + dispatch_time(DISPATCH_TIME_NOW, deadline_ns))); } base::scoped_nsobject<NSURLSession> session_; @@ -164,7 +175,7 @@ }; TEST_F(HttpTest, NSURLSessionReceivesData) { - NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerUrl)); + NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl)); __block BOOL block_used = NO; NSURLSessionDataTask* task = [session_ dataTaskWithURL:url]; [Cronet setRequestFilterBlock:^(NSURLRequest* request) { @@ -175,18 +186,49 @@ StartDataTaskAndWaitForCompletion(task); EXPECT_TRUE(block_used); EXPECT_EQ(nil, [delegate_ error]); - EXPECT_STREQ(grpc_support::kHelloBodyValue, + EXPECT_STREQ(grpc_support::kSimpleBodyValue, base::SysNSStringToUTF8([delegate_ responseBody]).c_str()); } +TEST_F(HttpTest, NSURLSessionReceivesBigHttpDataLoop) { + int iterations = 50; + long size = 10 * 1024 * 1024; + LOG(INFO) << "Downloading " << size << " bytes " << iterations << " times."; + NSTimeInterval elapsed_avg = 0; + NSTimeInterval elapsed_max = 0; + NSURL* url = net::NSURLWithGURL(GURL(TestServer::PrepareBigDataURL(size))); + for (int i = 0; i < iterations; ++i) { + [delegate_ reset]; + __block BOOL block_used = NO; + NSURLSessionDataTask* task = [session_ dataTaskWithURL:url]; + [Cronet setRequestFilterBlock:^(NSURLRequest* request) { + block_used = YES; + EXPECT_EQ([request URL], url); + return YES; + }]; + NSDate* start = [NSDate date]; + StartDataTaskAndWaitForCompletion(task); + NSTimeInterval elapsed = -[start timeIntervalSinceNow]; + elapsed_avg += elapsed; + if (elapsed > elapsed_max) + elapsed_max = elapsed; + EXPECT_TRUE(block_used); + EXPECT_EQ(nil, [delegate_ error]); + } + // Release the response buffer. + TestServer::ReleaseBigDataURL(); + LOG(INFO) << "Elapsed Average:" << elapsed_avg * 1000 / iterations + << "ms Max:" << elapsed_max * 1000 << "ms"; +} + TEST_F(HttpTest, GetGlobalMetricsDeltas) { NSData* delta1 = [Cronet getGlobalMetricsDeltas]; - NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerUrl)); + NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl)); NSURLSessionDataTask* task = [session_ dataTaskWithURL:url]; StartDataTaskAndWaitForCompletion(task); EXPECT_EQ(nil, [delegate_ error]); - EXPECT_STREQ(grpc_support::kHelloBodyValue, + EXPECT_STREQ(grpc_support::kSimpleBodyValue, base::SysNSStringToUTF8([delegate_ responseBody]).c_str()); NSData* delta2 = [Cronet getGlobalMetricsDeltas];
diff --git a/components/cronet/ios/test/start_cronet.mm b/components/cronet/ios/test/start_cronet.mm index 148fe533..ca3a8998 100644 --- a/components/cronet/ios/test/start_cronet.mm +++ b/components/cronet/ios/test/start_cronet.mm
@@ -24,6 +24,7 @@ [Cronet setSslKeyLogFileName:@"SSLKEYLOGFILE"]; [Cronet addQuicHint:@"test.example.com" port:443 altPort:443]; [Cronet enableTestCertVerifierForTesting]; + [Cronet setHttpCacheType:CRNHttpCacheTypeDisabled]; [Cronet start]; } NSString* rules = base::SysUTF8ToNSString(
diff --git a/components/cronet/ios/test/test_server.cc b/components/cronet/ios/test/test_server.cc index 1d549a07..0a5385b 100644 --- a/components/cronet/ios/test/test_server.cc +++ b/components/cronet/ios/test/test_server.cc
@@ -7,8 +7,12 @@ #include <utility> #include "base/bind.h" +#include "base/format_macros.h" +#include "base/lazy_instance.h" #include "base/memory/ptr_util.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" @@ -17,8 +21,11 @@ const char kEchoHeaderPath[] = "/EchoHeader?"; const char kSetCookiePath[] = "/SetCookie?"; +const char kBigDataPath[] = "/BigData?"; std::unique_ptr<net::EmbeddedTestServer> g_test_server; +base::LazyInstance<std::string>::Leaky g_big_data_body = + LAZY_INSTANCE_INITIALIZER; std::unique_ptr<net::test_server::HttpResponse> EchoHeaderInRequest( const net::test_server::HttpRequest& request) { @@ -36,6 +43,18 @@ return std::move(http_response); } +std::unique_ptr<net::test_server::HttpResponse> ReturnBigDataInResponse( + const net::test_server::HttpRequest& request) { + DCHECK(base::StartsWith(request.relative_url, kBigDataPath, + base::CompareCase::INSENSITIVE_ASCII)); + std::string data_size_str = request.relative_url.substr(strlen(kBigDataPath)); + int64_t data_size; + CHECK(base::StringToInt64(base::StringPiece(data_size_str), &data_size)); + CHECK(data_size == static_cast<int64_t>(g_big_data_body.Get().size())); + return base::MakeUnique<net::test_server::RawHttpResponse>( + std::string(), g_big_data_body.Get()); +} + std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( const net::test_server::HttpRequest& request) { std::string cookie_line; @@ -58,6 +77,10 @@ base::CompareCase::INSENSITIVE_ASCII)) { return SetAndEchoCookieInResponse(request); } + if (base::StartsWith(request.relative_url, kBigDataPath, + base::CompareCase::INSENSITIVE_ASCII)) { + return ReturnBigDataInResponse(request); + } return base::MakeUnique<net::test_server::BasicHttpResponse>(); } @@ -90,4 +113,25 @@ return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); } +std::string TestServer::PrepareBigDataURL(long data_size) { + DCHECK(g_test_server); + DCHECK(g_big_data_body.Get().empty()); + // Response line with headers. + std::string response_builder; + base::StringAppendF(&response_builder, "HTTP/1.1 200 OK\r\n"); + base::StringAppendF(&response_builder, "Content-Length: %" PRIuS "\r\n", + data_size); + base::StringAppendF(&response_builder, "\r\n"); + response_builder += std::string(data_size, 'c'); + g_big_data_body.Get() = response_builder; + return g_test_server + ->GetURL(kBigDataPath + base::Int64ToString(response_builder.size())) + .spec(); +} + +void TestServer::ReleaseBigDataURL() { + DCHECK(!g_big_data_body.Get().empty()); + g_big_data_body.Get() = std::string(); +} + } // namespace cronet
diff --git a/components/cronet/ios/test/test_server.h b/components/cronet/ios/test/test_server.h index 4804f24..a0b7b8a 100644 --- a/components/cronet/ios/test/test_server.h +++ b/components/cronet/ios/test/test_server.h
@@ -20,6 +20,11 @@ // Returns URL which respond with setting cookie to |cookie_line| and echo it // in response body. static std::string GetSetCookieURL(const std::string& cookie_line); + // Prepares response and returns URL which respond with |data_size| of bytes + // in response body. + static std::string PrepareBigDataURL(long data_size); + // Releases response created by PrepareBigDataURL(). + static void ReleaseBigDataURL(); }; } // namespace cronet
diff --git a/components/grpc_support/test/quic_test_server.cc b/components/grpc_support/test/quic_test_server.cc index d57f94ce..4b56f342 100644 --- a/components/grpc_support/test/quic_test_server.cc +++ b/components/grpc_support/test/quic_test_server.cc
@@ -40,6 +40,14 @@ const char kHelloTrailerName[] = "hello_trailer"; const char kHelloTrailerValue[] = "hello trailer value"; +const char kTestServerSimpleUrl[] = "https://test.example.com/simple.txt"; +const char kSimplePath[] = "/simple.txt"; +const char kSimpleBodyValue[] = "Simple Hello from QUIC Server"; +const char kSimpleStatus[] = "200"; + +const char kSimpleHeaderName[] = "hello_header"; +const char kSimpleHeaderValue[] = "hello header value"; + base::Thread* g_quic_server_thread = nullptr; net::QuicHttpResponseCache* g_quic_response_cache = nullptr; net::QuicSimpleServer* g_quic_server = nullptr; @@ -55,6 +63,11 @@ g_quic_response_cache->AddResponse(base::StringPrintf("%s", kTestServerHost), kHelloPath, std::move(headers), kHelloBodyValue, std::move(trailers)); + headers[kSimpleHeaderName] = kSimpleHeaderValue; + headers[kStatusHeader] = kSimpleStatus; + g_quic_response_cache->AddResponse(base::StringPrintf("%s", kTestServerHost), + kSimplePath, std::move(headers), + kSimpleBodyValue); } void StartQuicServerOnServerThread(const base::FilePath& test_files_root, @@ -72,7 +85,6 @@ directory.AppendASCII("quic_test.example.com.crt"), directory.AppendASCII("quic_test.example.com.key.pkcs8"), directory.AppendASCII("quic_test.example.com.key.sct"))); - SetupQuicHttpResponseCache(); g_quic_server = new net::QuicSimpleServer( @@ -85,7 +97,6 @@ net::IPEndPoint(net::IPAddress::IPv4AllZeros(), 0)); CHECK_GE(rv, 0) << "Quic server fails to start"; g_quic_server_port = g_quic_server->server_address().port(); - server_started_event->Signal(); }
diff --git a/components/grpc_support/test/quic_test_server.h b/components/grpc_support/test/quic_test_server.h index 06ff549..afb5828f 100644 --- a/components/grpc_support/test/quic_test_server.h +++ b/components/grpc_support/test/quic_test_server.h
@@ -29,6 +29,13 @@ extern const char kHelloTrailerName[]; extern const char kHelloTrailerValue[]; +// Simple Url returns response without HTTP/2 trailers. +extern const char kTestServerSimpleUrl[]; +extern const char kSimpleBodyValue[]; +extern const char kSimpleStatus[]; +extern const char kSimpleHeaderName[]; +extern const char kSimpleHeaderValue[]; + } // namespace grpc_support #endif // COMPONENTS_CRONET_IOS_TEST_QUIC_TEST_SERVER_H_
diff --git a/components/navigation_metrics/BUILD.gn b/components/navigation_metrics/BUILD.gn index 231ff61..3908ff1 100644 --- a/components/navigation_metrics/BUILD.gn +++ b/components/navigation_metrics/BUILD.gn
@@ -6,13 +6,10 @@ sources = [ "navigation_metrics.cc", "navigation_metrics.h", - "origins_seen_service.cc", - "origins_seen_service.h", ] deps = [ "//base", - "//components/keyed_service/core", "//url", ] }
diff --git a/components/navigation_metrics/navigation_metrics.cc b/components/navigation_metrics/navigation_metrics.cc index 8958e6d6..428f092d 100644 --- a/components/navigation_metrics/navigation_metrics.cc +++ b/components/navigation_metrics/navigation_metrics.cc
@@ -51,8 +51,7 @@ void RecordMainFrameNavigation(const GURL& url, bool is_in_page, - bool is_off_the_record, - bool have_already_seen_origin) { + bool is_off_the_record) { Scheme scheme = SCHEME_UNKNOWN; for (int i = 1; i < SCHEME_MAX; ++i) { if (url.SchemeIs(kSchemeNames[i])) { @@ -61,16 +60,6 @@ } } - if (!have_already_seen_origin) { - if (is_off_the_record) { - UMA_HISTOGRAM_ENUMERATION("Navigation.SchemePerUniqueOriginOTR", scheme, - SCHEME_MAX); - } else { - UMA_HISTOGRAM_ENUMERATION("Navigation.SchemePerUniqueOrigin", scheme, - SCHEME_MAX); - } - } - UMA_HISTOGRAM_ENUMERATION("Navigation.MainFrameScheme", scheme, SCHEME_MAX); if (!is_in_page) { UMA_HISTOGRAM_ENUMERATION("Navigation.MainFrameSchemeDifferentPage", scheme,
diff --git a/components/navigation_metrics/navigation_metrics.h b/components/navigation_metrics/navigation_metrics.h index 05176b7..febc8b8 100644 --- a/components/navigation_metrics/navigation_metrics.h +++ b/components/navigation_metrics/navigation_metrics.h
@@ -11,8 +11,7 @@ void RecordMainFrameNavigation(const GURL& url, bool is_in_page, - bool is_off_the_record, - bool have_already_seen_origin); + bool is_off_the_record); } // namespace navigation_metrics
diff --git a/components/navigation_metrics/navigation_metrics_unittest.cc b/components/navigation_metrics/navigation_metrics_unittest.cc index c4514a3..d1c11075 100644 --- a/components/navigation_metrics/navigation_metrics_unittest.cc +++ b/components/navigation_metrics/navigation_metrics_unittest.cc
@@ -21,7 +21,7 @@ TEST(NavigationMetrics, MainFrameSchemeDifferentDocument) { base::HistogramTester test; - RecordMainFrameNavigation(GURL(kTestUrl), false, false, false); + RecordMainFrameNavigation(GURL(kTestUrl), false, false); test.ExpectTotalCount(kMainFrameScheme, 1); test.ExpectUniqueSample(kMainFrameScheme, 1 /* http */, 1); @@ -32,7 +32,7 @@ TEST(NavigationMetrics, MainFrameSchemeSameDocument) { base::HistogramTester test; - RecordMainFrameNavigation(GURL(kTestUrl), true, false, false); + RecordMainFrameNavigation(GURL(kTestUrl), true, false); test.ExpectTotalCount(kMainFrameScheme, 1); test.ExpectUniqueSample(kMainFrameScheme, 1 /* http */, 1);
diff --git a/components/navigation_metrics/origins_seen_service.cc b/components/navigation_metrics/origins_seen_service.cc deleted file mode 100644 index b6bab64..0000000 --- a/components/navigation_metrics/origins_seen_service.cc +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright 2016 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 "components/navigation_metrics/origins_seen_service.h" - -namespace navigation_metrics { -namespace { -const size_t kDefaultMRUCacheSize = 1000; -} // namespace - -OriginsSeenService::OriginsSeenService() - : origins_seen_(kDefaultMRUCacheSize) {} - -OriginsSeenService::~OriginsSeenService() {} - -bool OriginsSeenService::Insert(const url::Origin& origin) { - bool seen = origins_seen_.Peek(origin) != origins_seen_.end(); - origins_seen_.Put(origin, true); - return seen; -} -} // namespace navigation_metrics
diff --git a/components/navigation_metrics/origins_seen_service.h b/components/navigation_metrics/origins_seen_service.h deleted file mode 100644 index 94e4330..0000000 --- a/components/navigation_metrics/origins_seen_service.h +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2016 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 COMPONENTS_NAVIGATION_METRICS_ORIGINS_SEEN_SERVICE_H_ -#define COMPONENTS_NAVIGATION_METRICS_ORIGINS_SEEN_SERVICE_H_ - -#include "base/containers/mru_cache.h" -#include "components/keyed_service/core/keyed_service.h" -#include "url/origin.h" - -namespace navigation_metrics { - -class OriginsSeenService : public KeyedService { - public: - OriginsSeenService(); - ~OriginsSeenService() override; - - // Used when deciding whether or not to record - // Navigation.SchemePerUniqueOrigin[OTR]. Inserts a copy of |origin| into the - // set |origins_seen_|, and returns whether or not |origin| was already in the - // set. - bool Insert(const url::Origin& origin); - - private: - // Used by |HaveAlreadySeenOrigin|. This cache is in volatile storage because - // Off The Record Profiles also use this Service. - base::MRUCache<url::Origin, bool> origins_seen_; -}; - -} // namespace navigation_metrics - -#endif // COMPONENTS_NAVIGATION_METRICS_ORIGINS_SEEN_SERVICE_H_
diff --git a/components/onc/docs/onc_spec.md b/components/onc/docs/onc_spec.md index 45ecc1af..bafb102 100644 --- a/components/onc/docs/onc_spec.md +++ b/components/onc/docs/onc_spec.md
@@ -230,6 +230,11 @@ [Cellular](#Cellular-type) * Cellular settings. +* **Tether** + * (required if **Type** is *Tether*, otherwise ignored) - + [Tether](#Tether-type) + * Tether settings. + * **Type** * (required if **Remove** is *false*, otherwise ignored) - **string** * `Allowed values are` *Cellular*, @@ -1426,6 +1431,34 @@ changes to *sim-puk*). +## Tether Networks + +For Tether connections, **Type** must be set to *Tether* and the +field **Tether** must be set to an object of type [Tether](#Tether-type). + +Used for representing a tether hotspot provided by an external device, e.g. +a phone. + +### Tether type + +* **BatteryPercentage** + * (optional, read-only) - **integer** + * The battery percentage of the device providing the tether hotspot in the + range [0, 100]. + +* **Carrier** + * (optional, read-only) - **string** + * The name of the cellular carrier when the hotspot is provided by a + cellular connection. + +* **SignalStrength** + * (optional, read-only) - **integer** + * The current signal strength for the hotspot's connection in the range + [0, 100]. Note that this value refers to the strength of the signal + between the external device and its data provider, not the strength of the + signal between the current device and the external device. + + ## Bluetooth / WiFi Direct Networks This format will eventually also cover configuration of Bluetooth and WiFi
diff --git a/components/onc/onc_constants.cc b/components/onc/onc_constants.cc index ef31422..d3e68e58 100644 --- a/components/onc/onc_constants.cc +++ b/components/onc/onc_constants.cc
@@ -59,6 +59,7 @@ const char kSourceUserPolicy[] = "UserPolicy"; const char kSource[] = "Source"; const char kStaticIPConfig[] = "StaticIPConfig"; +const char kTether[] = "Tether"; const char kType[] = "Type"; const char kVPN[] = "VPN"; const char kWiFi[] = "WiFi"; @@ -68,6 +69,10 @@ return std::string(kCellular) + "." + property; } +std::string TetherProperty(const std::string& property) { + return std::string(kTether) + "." + property; +} + std::string VpnProperty(const std::string& property) { return std::string(kVPN) + "." + property; } @@ -82,6 +87,7 @@ const char kAllTypes[] = "All"; const char kCellular[] = "Cellular"; const char kEthernet[] = "Ethernet"; +const char kTether[] = "Tether"; const char kVPN[] = "VPN"; const char kWiFi[] = "WiFi"; const char kWimax[] = "WiMAX"; @@ -188,6 +194,12 @@ const char k8021X[] = "8021X"; } // namespace ethernet +namespace tether { +const char kBatteryPercentage[] = "BatteryPercentage"; +const char kCarrier[] = "Carrier"; +const char kSignalStrength[] = "SignalStrength"; +} // namespace tether + namespace ipconfig { const char kGateway[] = "Gateway"; const char kIPAddress[] = "IPAddress";
diff --git a/components/onc/onc_constants.h b/components/onc/onc_constants.h index 8576292b..ff6301c 100644 --- a/components/onc/onc_constants.h +++ b/components/onc/onc_constants.h
@@ -82,12 +82,14 @@ ONC_EXPORT extern const char kRestrictedConnectivity[]; ONC_EXPORT extern const char kConnectable[]; ONC_EXPORT extern const char kErrorState[]; +ONC_EXPORT extern const char kTether[]; ONC_EXPORT extern const char kType[]; ONC_EXPORT extern const char kVPN[]; ONC_EXPORT extern const char kWiFi[]; ONC_EXPORT extern const char kWimax[]; ONC_EXPORT extern std::string CellularProperty(const std::string& property); +ONC_EXPORT extern std::string TetherProperty(const std::string& property); ONC_EXPORT extern std::string VpnProperty(const std::string& property); ONC_EXPORT extern std::string WifiProperty(const std::string& property); @@ -96,6 +98,7 @@ namespace network_type { ONC_EXPORT extern const char kCellular[]; ONC_EXPORT extern const char kEthernet[]; +ONC_EXPORT extern const char kTether[]; ONC_EXPORT extern const char kVPN[]; ONC_EXPORT extern const char kWiFi[]; ONC_EXPORT extern const char kWimax[]; @@ -216,6 +219,12 @@ ONC_EXPORT extern const char k8021X[]; } // namespace ethernet +namespace tether { +ONC_EXPORT extern const char kBatteryPercentage[]; +ONC_EXPORT extern const char kCarrier[]; +ONC_EXPORT extern const char kSignalStrength[]; +} // namespace tether + namespace wifi { ONC_EXPORT extern const char kAllowGatewayARPPolling[]; ONC_EXPORT extern const char kAutoConnect[];
diff --git a/components/safe_browsing/password_protection/password_protection_request.cc b/components/safe_browsing/password_protection/password_protection_request.cc index e7db6e05..eb0ed1b9 100644 --- a/components/safe_browsing/password_protection/password_protection_request.cc +++ b/components/safe_browsing/password_protection/password_protection_request.cc
@@ -7,7 +7,7 @@ #include "base/memory/weak_ptr.h" #include "base/metrics/histogram_macros.h" #include "components/data_use_measurement/core/data_use_user_data.h" -#include "content/public/browser/browser_thread.h" +#include "components/safe_browsing_db/database_manager.h" #include "net/base/escape.h" #include "net/base/load_flags.h" #include "net/base/url_util.h" @@ -20,15 +20,14 @@ PasswordProtectionRequest::PasswordProtectionRequest( const GURL& main_frame_url, LoginReputationClientRequest::TriggerType type, - bool is_extended_reporting, - bool is_incognito, - base::WeakPtr<PasswordProtectionService> pps, + std::unique_ptr<PasswordProtectionFrameList> password_frames, + PasswordProtectionService* pps, int request_timeout_in_ms) : main_frame_url_(main_frame_url), request_type_(type), - is_extended_reporting_(is_extended_reporting), - is_incognito_(is_incognito), + password_frames_(std::move(password_frames)), password_protection_service_(pps), + database_manager_(password_protection_service_->database_manager()), request_timeout_in_ms_(request_timeout_in_ms), weakptr_factory_(this) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -42,33 +41,34 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); // Initially we only send ping for Safe Browsing Extended Reporting users when // they are not in incognito mode. We may loose these conditions later. - if (is_incognito_) { + if (password_protection_service_->IsIncognito()) { Finish(RequestOutcome::INCOGNITO, nullptr); return; } - if (!is_extended_reporting_) { + if (!password_protection_service_->IsExtendedReporting()) { Finish(RequestOutcome::NO_EXTENDED_REPORTING, nullptr); return; } - CheckWhitelistsOnUIThread(); + CheckWhitelistOnUIThread(); } -void PasswordProtectionRequest::CheckWhitelistsOnUIThread() { +void PasswordProtectionRequest::CheckWhitelistOnUIThread() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - DCHECK(password_protection_service_); - - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, + bool* match_whitelist = new bool(false); + tracker_.PostTaskAndReply( + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO).get(), FROM_HERE, base::Bind(&PasswordProtectionService::CheckCsdWhitelistOnIOThread, - password_protection_service_, main_frame_url_, - base::Bind(&PasswordProtectionRequest::OnWhitelistCheckDone, - GetWeakPtr()))); + base::Unretained(password_protection_service_), + main_frame_url_, match_whitelist), + base::Bind(&PasswordProtectionRequest::OnWhitelistCheckDone, this, + base::Owned(match_whitelist))); } -void PasswordProtectionRequest::OnWhitelistCheckDone(bool match_whitelist) { +void PasswordProtectionRequest::OnWhitelistCheckDone( + const bool* match_whitelist) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (match_whitelist) + if (*match_whitelist) Finish(RequestOutcome::MATCHED_WHITELIST, nullptr); else CheckCachedVerdicts(); @@ -100,9 +100,14 @@ LoginReputationClientRequest::Frame* main_frame = request_proto_->add_frames(); main_frame->set_url(main_frame_url_.spec()); + main_frame->set_frame_index(0 /* main frame */); + main_frame->set_has_password_field(true); password_protection_service_->FillReferrerChain( main_frame_url_, -1 /* tab id not available */, main_frame); - // TODO(jialiul): Add sub-frame information and password form information. + + // TODO(jialiul): Fill more password form related info based on + // |password_frame_map_| when Safe Browsing backend is ready to handle these + // pieces of information. } void PasswordProtectionRequest::SendRequest() { @@ -169,17 +174,17 @@ fetcher_.reset(); // We don't need it anymore. UMA_HISTOGRAM_TIMES("PasswordProtection.RequestNetworkDuration", base::TimeTicks::Now() - request_start_time_); - if (response->ParseFromString(response_body)) { + if (response->ParseFromString(response_body)) Finish(RequestOutcome::SUCCEEDED, std::move(response)); - } else { + else Finish(RequestOutcome::RESPONSE_MALFORMED, nullptr); - } } void PasswordProtectionRequest::Finish( RequestOutcome outcome, std::unique_ptr<LoginReputationClientResponse> response) { DCHECK_CURRENTLY_ON(BrowserThread::UI); + tracker_.TryCancelAll(); UMA_HISTOGRAM_ENUMERATION("PasswordProtection.RequestOutcome", outcome, RequestOutcome::MAX_OUTCOME);
diff --git a/components/safe_browsing/password_protection/password_protection_request.h b/components/safe_browsing/password_protection/password_protection_request.h index 52be0c1..81d0c5d2 100644 --- a/components/safe_browsing/password_protection/password_protection_request.h +++ b/components/safe_browsing/password_protection/password_protection_request.h
@@ -7,7 +7,9 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/task/cancelable_task_tracker.h" #include "components/safe_browsing/password_protection/password_protection_service.h" +#include "content/public/browser/browser_thread.h" #include "net/url_request/url_fetcher.h" #include "net/url_request/url_fetcher_delegate.h" #include "net/url_request/url_request_status.h" @@ -19,7 +21,24 @@ // A request for checking if an unfamiliar login form or a password reuse event // is safe. PasswordProtectionRequest objects are owned by // PasswordProtectionService indicated by |password_protection_service_|. -class PasswordProtectionRequest : public net::URLFetcherDelegate { +// PasswordProtectionService is RefCountedThreadSafe such that it can post task +// safely between IO and UI threads. It can only be destroyed on UI thread. +// +// PasswordProtectionRequest flow: +// Step| Thread | Task +// (1) | UI | If incognito or !SBER, quit request. +// (2) | UI | Add task to IO thread for whitelist checking. +// (3) | IO | Check whitelist and return the result back to UI thread. +// (4) | UI | If whitelisted, check verdict cache; else quit request. +// (5) | UI | If verdict cached, quit request; else prepare request proto. +// (6) | UI | Start a timeout task, and send network request. +// (7) | UI | On receiving response, handle response and finish. +// | | On request timeout, cancel request. +// | | On deletion of |password_protection_service_|, cancel request. +class PasswordProtectionRequest : public base::RefCountedThreadSafe< + PasswordProtectionRequest, + content::BrowserThread::DeleteOnUIThread>, + public net::URLFetcherDelegate { public: // The outcome of the request. These values are used for UMA. // DO NOT CHANGE THE ORDERING OF THESE VALUES. @@ -39,14 +58,12 @@ MAX_OUTCOME }; - PasswordProtectionRequest(const GURL& main_frame_url, - LoginReputationClientRequest::TriggerType type, - bool is_extended_reporting, - bool is_incognito, - base::WeakPtr<PasswordProtectionService> pps, - int request_timeout_in_ms); - - ~PasswordProtectionRequest() override; + PasswordProtectionRequest( + const GURL& main_frame_url, + LoginReputationClientRequest::TriggerType type, + std::unique_ptr<PasswordProtectionFrameList> pending_password_frames, + PasswordProtectionService* pps, + int request_timeout_in_ms); base::WeakPtr<PasswordProtectionRequest> GetWeakPtr() { return weakptr_factory_.GetWeakPtr(); @@ -66,12 +83,23 @@ GURL main_frame_url() const { return main_frame_url_; } - bool is_incognito() const { return is_incognito_; } - private: + friend class base::RefCountedThreadSafe<PasswordProtectionRequest>; + friend struct content::BrowserThread::DeleteOnThread< + content::BrowserThread::UI>; + friend class base::DeleteHelper<PasswordProtectionRequest>; + ~PasswordProtectionRequest() override; + + void CheckWhitelistOnUIThread(); + // If |main_frame_url_| matches whitelist, call Finish() immediately; - // otherwise call CheckCachedVerdicts(). - void OnWhitelistCheckDone(bool match_whitelist); + // otherwise call CheckCachedVerdicts(). It is the task posted back to UI + // thread by the PostTaskAndReply() in CheckWhitelistOnUIThread(). + // |match_whitelist| boolean pointer is used to pass whitelist checking result + // between UI and IO thread. The object it points to will be deleted at the + // end of OnWhitelistCheckDone(), since base::Owned() transfers its ownership + // to this callback function. + void OnWhitelistCheckDone(const bool* match_whitelist); // Looks up cached verdicts. If verdict is already cached, call SendRequest(); // otherwise call Finish(). @@ -90,19 +118,14 @@ void Finish(RequestOutcome outcome, std::unique_ptr<LoginReputationClientResponse> response); - void CheckWhitelistsOnUIThread(); - // Main frame URL of the login form. GURL main_frame_url_; // If this request is for unfamiliar login page or for a password reuse event. const LoginReputationClientRequest::TriggerType request_type_; - // If user is opted-in Safe Browsing Extended Reporting. - const bool is_extended_reporting_; - - // If current session is in incognito mode. - const bool is_incognito_; + // The list of PasswordProtectionFrame this request is concerning. + std::unique_ptr<PasswordProtectionFrameList> password_frames_; // When request is sent. base::TimeTicks request_start_time_; @@ -111,7 +134,12 @@ std::unique_ptr<net::URLFetcher> fetcher_; // The PasswordProtectionService instance owns |this|. - base::WeakPtr<PasswordProtectionService> password_protection_service_; + // Can only be accessed on UI thread. + PasswordProtectionService* password_protection_service_; + + // Safe Browsing database manager used to look up CSD whitelist. + // Can only be accessed on IO thread. + scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; // If we haven't receive response after this period of time, we cancel this // request. @@ -119,6 +147,9 @@ std::unique_ptr<LoginReputationClientRequest> request_proto_; + // Needed for canceling tasks posted to different threads. + base::CancelableTaskTracker tracker_; + base::WeakPtrFactory<PasswordProtectionRequest> weakptr_factory_; DISALLOW_COPY_AND_ASSIGN(PasswordProtectionRequest); };
diff --git a/components/safe_browsing/password_protection/password_protection_service.cc b/components/safe_browsing/password_protection/password_protection_service.cc index 3aee7ac..02c4725 100644 --- a/components/safe_browsing/password_protection/password_protection_service.cc +++ b/components/safe_browsing/password_protection/password_protection_service.cc
@@ -63,6 +63,8 @@ } // namespace +PasswordProtectionFrame::~PasswordProtectionFrame() = default; + PasswordProtectionService::PasswordProtectionService( const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, scoped_refptr<net::URLRequestContextGetter> request_context_getter, @@ -80,6 +82,7 @@ } PasswordProtectionService::~PasswordProtectionService() { + tracker_.TryCancelAll(); CancelPendingRequests(); history_service_observer_.RemoveAll(); weak_factory_.InvalidateWeakPtrs(); @@ -88,27 +91,21 @@ void PasswordProtectionService::RecordPasswordReuse(const GURL& url) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(database_manager_); - if (!url.is_valid()) - return; - - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind( - &PasswordProtectionService::CheckCsdWhitelistOnIOThread, GetWeakPtr(), - url, - base::Bind(&PasswordProtectionService::OnMatchCsdWhiteListResult, - base::Unretained(this)))); + bool* match_whitelist = new bool(false); + tracker_.PostTaskAndReply( + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO).get(), FROM_HERE, + base::Bind(&PasswordProtectionService::CheckCsdWhitelistOnIOThread, + base::Unretained(this), url, match_whitelist), + base::Bind(&PasswordProtectionService::OnMatchCsdWhiteListResult, + base::Unretained(this), base::Owned(match_whitelist))); } void PasswordProtectionService::CheckCsdWhitelistOnIOThread( const GURL& url, - const CheckCsdWhitelistCallback& callback) { + bool* check_result) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - DCHECK(database_manager_); - bool check_result = database_manager_->MatchCsdWhitelistUrl(url); - DCHECK(callback); - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - base::Bind(callback, check_result)); + *check_result = + url.is_valid() ? database_manager_->MatchCsdWhitelistUrl(url) : true; } LoginReputationClientResponse::VerdictType @@ -201,19 +198,35 @@ void PasswordProtectionService::StartRequest( const GURL& main_frame_url, - LoginReputationClientRequest::TriggerType type) { + LoginReputationClientRequest::TriggerType type, + std::unique_ptr<PasswordProtectionFrameList> password_frames) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (!IsPingingEnabled()) - return; - std::unique_ptr<PasswordProtectionRequest> request = - base::MakeUnique<PasswordProtectionRequest>( - main_frame_url, type, IsExtendedReporting(), IsIncognito(), - GetWeakPtr(), GetRequestTimeoutInMS()); + scoped_refptr<PasswordProtectionRequest> request( + new PasswordProtectionRequest(main_frame_url, type, + std::move(password_frames), this, + GetRequestTimeoutInMS())); DCHECK(request); request->Start(); requests_.insert(std::move(request)); } +void PasswordProtectionService::MaybeStartLowReputationRequest( + const GURL& main_frame_url, + std::unique_ptr<PasswordProtectionFrameList> password_frames) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + if (!IsPingingEnabled()) + return; + + // Skip URLs that we can't get a reliable reputation for. + if (!main_frame_url.is_valid() || !main_frame_url.SchemeIsHTTPOrHTTPS()) { + return; + } + + StartRequest(main_frame_url, + LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, + std::move(password_frames)); +} + void PasswordProtectionService::RequestFinished( PasswordProtectionRequest* request, std::unique_ptr<LoginReputationClientResponse> response) { @@ -222,7 +235,7 @@ DCHECK(request); // TODO(jialiul): We don't cache verdict for incognito mode for now. // Later we may consider temporarily caching verdict. - if (!request->is_incognito() && response) + if (response && !IsIncognito()) CacheVerdict(request->main_frame_url(), response.get(), base::Time::Now()); // Finished processing this request. Remove it from pending list. @@ -246,6 +259,11 @@ DCHECK(requests_.empty()); } +scoped_refptr<SafeBrowsingDatabaseManager> +PasswordProtectionService::database_manager() { + return database_manager_; +} + GURL PasswordProtectionService::GetPasswordProtectionRequestUrl() { GURL url(kPasswordProtectionRequestUrl); std::string api_key = google_apis::GetAPIKey(); @@ -284,10 +302,10 @@ } void PasswordProtectionService::OnMatchCsdWhiteListResult( - bool match_whitelist) { + const bool* match_whitelist) { UMA_HISTOGRAM_BOOLEAN( "PasswordManager.PasswordReuse.MainFrameMatchCsdWhitelist", - match_whitelist); + *match_whitelist); } void PasswordProtectionService::OnURLsDeleted( @@ -400,7 +418,10 @@ // "foo.com/foo/bar/" -> "/foo/bar/" std::string PasswordProtectionService::GetCacheExpressionPath( const std::string& cache_expression) { - DCHECK(!cache_expression.empty()); + // TODO(jialiul): Change this to a DCHECk when SB server is ready. + if (cache_expression.empty()) + return std::string("/"); + std::string out_put(cache_expression); // Append a trailing slash if needed. if (out_put[out_put.length() - 1] != '/')
diff --git a/components/safe_browsing/password_protection/password_protection_service.h b/components/safe_browsing/password_protection/password_protection_service.h index d025871..1acf0a4 100644 --- a/components/safe_browsing/password_protection/password_protection_service.h +++ b/components/safe_browsing/password_protection/password_protection_service.h
@@ -5,7 +5,7 @@ #ifndef COMPONENTS_SAFE_BROWSING_PASSWORD_PROTECTION_PASSWORD_PROTECTION_SERVICE_H_ #define COMPONENTS_SAFE_BROWSING_PASSWORD_PROTECTION_PASSWORD_PROTECTION_SERVICE_H_ -#include <unordered_set> +#include <set> #include "base/callback.h" #include "base/gtest_prod_util.h" @@ -13,10 +13,12 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" +#include "base/task/cancelable_task_tracker.h" #include "base/values.h" #include "components/history/core/browser/history_service_observer.h" #include "components/safe_browsing/csd.pb.h" #include "net/url_request/url_request_context_getter.h" +#include "third_party/protobuf/src/google/protobuf/repeated_field.h" namespace history { class HistoryService; @@ -30,14 +32,31 @@ class SafeBrowsingDatabaseManager; class PasswordProtectionRequest; +using PasswordFormList = google::protobuf::RepeatedPtrField< + LoginReputationClientRequest::Frame::Form>; + +// The PasswordProtectionFrame struct encapsulates information about a render +// frame that has password form(s). +struct PasswordProtectionFrame { + int render_frame_routing_id; + int parent_frame_routing_id; + GURL last_committed_url; + std::unique_ptr<PasswordFormList> password_forms; + + PasswordProtectionFrame() = delete; + + ~PasswordProtectionFrame(); +}; + +using PasswordProtectionFrameList = + std::vector<std::unique_ptr<PasswordProtectionFrame>>; + // Manage password protection pings and verdicts. There is one instance of this // class per profile. Therefore, every PasswordProtectionService instance is // associated with a unique HistoryService instance and a unique // HostContentSettingsMap instance. -class PasswordProtectionService : history::HistoryServiceObserver { +class PasswordProtectionService : public history::HistoryServiceObserver { public: - using CheckCsdWhitelistCallback = base::Callback<void(bool)>; - PasswordProtectionService( const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, scoped_refptr<net::URLRequestContextGetter> request_context_getter, @@ -70,8 +89,16 @@ // Creates an instance of PasswordProtectionRequest and call Start() on that // instance. This function also insert this request object in |requests_| for // record keeping. - void StartRequest(const GURL& main_frame_url, - LoginReputationClientRequest::TriggerType type); + void StartRequest( + const GURL& main_frame_url, + LoginReputationClientRequest::TriggerType type, + std::unique_ptr<PasswordProtectionFrameList> password_frames); + + void MaybeStartLowReputationRequest( + const GURL& main_frame_url, + std::unique_ptr<PasswordProtectionFrameList> password_frames); + + scoped_refptr<SafeBrowsingDatabaseManager> database_manager(); protected: friend class PasswordProtectionRequest; @@ -113,15 +140,15 @@ // If we can send ping to Safe Browsing backend. virtual bool IsPingingEnabled() = 0; - void CheckCsdWhitelistOnIOThread(const GURL& url, - const CheckCsdWhitelistCallback& callback); + void CheckCsdWhitelistOnIOThread(const GURL& url, bool* check_result); // Increases "PasswordManager.PasswordReuse.MainFrameMatchCsdWhitelist" UMA // metric based on input. - void OnMatchCsdWhiteListResult(bool match_whitelist); + void OnMatchCsdWhiteListResult(const bool* match_whitelist); private: friend class PasswordProtectionServiceTest; + friend class TestPasswordProtectionService; FRIEND_TEST_ALL_PREFIXES(PasswordProtectionServiceTest, TestParseInvalidVerdictEntry); FRIEND_TEST_ALL_PREFIXES(PasswordProtectionServiceTest, @@ -177,7 +204,7 @@ scoped_refptr<net::URLRequestContextGetter> request_context_getter_; // Set of pending PasswordProtectionRequests. - std::unordered_set<std::unique_ptr<PasswordProtectionRequest>> requests_; + std::set<scoped_refptr<PasswordProtectionRequest>> requests_; ScopedObserver<history::HistoryService, history::HistoryServiceObserver> history_service_observer_; @@ -185,6 +212,10 @@ // Content settings map associated with this instance. HostContentSettingsMap* content_settings_; + // Weakptr can only cancel task if it is posted to the same thread. Therefore, + // we need CancelableTaskTracker to cancel tasks posted to IO thread. + base::CancelableTaskTracker tracker_; + base::WeakPtrFactory<PasswordProtectionService> weak_factory_; DISALLOW_COPY_AND_ASSIGN(PasswordProtectionService); };
diff --git a/components/safe_browsing/password_protection/password_protection_service_unittest.cc b/components/safe_browsing/password_protection/password_protection_service_unittest.cc index e792f617c..d970065 100644 --- a/components/safe_browsing/password_protection/password_protection_service_unittest.cc +++ b/components/safe_browsing/password_protection/password_protection_service_unittest.cc
@@ -80,7 +80,9 @@ latest_response_ = std::move(response); } - // Intentionally do nothing. + // Since referrer chain logic has been thoroughly tested in + // SBNavigationObserverBrowserTest class, we intentionally leave this function + // as a no-op here. void FillReferrerChain(const GURL& event_url, int event_tab_id, LoginReputationClientRequest::Frame* frame) override {} @@ -101,6 +103,10 @@ return latest_response_.get(); } + ~TestPasswordProtectionService() override {} + + size_t GetPendingRequestsCount() { return requests_.size(); } + private: bool is_extended_reporting_; bool is_incognito_; @@ -143,11 +149,9 @@ EXPECT_CALL(*database_manager_.get(), MatchCsdWhitelistUrl(target_url)) .WillRepeatedly(testing::Return(match_whitelist)); - request_ = base::MakeUnique<PasswordProtectionRequest>( + request_ = new PasswordProtectionRequest( target_url, LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, - password_protection_service_->IsExtendedReporting(), - password_protection_service_->IsIncognito(), - password_protection_service_->GetWeakPtr(), timeout_in_ms); + nullptr, password_protection_service_.get(), timeout_in_ms); request_->Start(); } @@ -184,7 +188,7 @@ scoped_refptr<HostContentSettingsMap> content_setting_map_; scoped_refptr<DummyURLRequestContextGetter> dummy_request_context_getter_; std::unique_ptr<TestPasswordProtectionService> password_protection_service_; - std::unique_ptr<PasswordProtectionRequest> request_; + scoped_refptr<PasswordProtectionRequest> request_; base::HistogramTester histograms_; }; @@ -199,24 +203,26 @@ .WillOnce(testing::Return(false)); histograms_.ExpectTotalCount(kPasswordReuseMatchWhitelistHistogramName, 0); - // Empty url should not increment metric. + // Empty url should increase "True" bucket by 1. password_protection_service_->RecordPasswordReuse(GURL()); base::RunLoop().RunUntilIdle(); - histograms_.ExpectTotalCount(kPasswordReuseMatchWhitelistHistogramName, 0); + EXPECT_THAT( + histograms_.GetAllSamples(kPasswordReuseMatchWhitelistHistogramName), + testing::ElementsAre(base::Bucket(1, 1))); // Whitelisted url should increase "True" bucket by 1. password_protection_service_->RecordPasswordReuse(whitelisted_url); base::RunLoop().RunUntilIdle(); EXPECT_THAT( histograms_.GetAllSamples(kPasswordReuseMatchWhitelistHistogramName), - testing::ElementsAre(base::Bucket(1, 1))); + testing::ElementsAre(base::Bucket(1, 2))); // Non-whitelisted url should increase "False" bucket by 1. password_protection_service_->RecordPasswordReuse(not_whitelisted_url); base::RunLoop().RunUntilIdle(); EXPECT_THAT( histograms_.GetAllSamples(kPasswordReuseMatchWhitelistHistogramName), - testing::ElementsAre(base::Bucket(0, 1), base::Bucket(1, 1))); + testing::ElementsAre(base::Bucket(0, 1), base::Bucket(1, 2))); } TEST_F(PasswordProtectionServiceTest, TestParseInvalidVerdictEntry) { @@ -393,12 +399,33 @@ true /* all_history */, history::URLRows()); EXPECT_EQ(0U, GetStoredVerdictCount()); } +TEST_F(PasswordProtectionServiceTest, + TestNoRequestCreatedIfMainFrameURLIsNotValid) { + ASSERT_EQ(0u, password_protection_service_->GetPendingRequestsCount()); + password_protection_service_->MaybeStartLowReputationRequest(GURL(), nullptr); + EXPECT_EQ(0u, password_protection_service_->GetPendingRequestsCount()); +} + +TEST_F(PasswordProtectionServiceTest, + TestNoRequestCreatedIfMainFrameURLIsNotHttpOrHttps) { + ASSERT_EQ(0u, password_protection_service_->GetPendingRequestsCount()); + // If main frame url is data url, don't create request. + password_protection_service_->MaybeStartLowReputationRequest( + GURL("data:text/html, <p>hellow"), nullptr); + EXPECT_EQ(0u, password_protection_service_->GetPendingRequestsCount()); + + // If main frame url is ftp, don't create request. + password_protection_service_->MaybeStartLowReputationRequest( + GURL("ftp://foo.com:21"), nullptr); + EXPECT_EQ(0u, password_protection_service_->GetPendingRequestsCount()); +} TEST_F(PasswordProtectionServiceTest, TestNoRequestSentForIncognito) { histograms_.ExpectTotalCount(kRequestOutcomeHistogramName, 0); password_protection_service_->set_incognito(true); password_protection_service_->StartRequest( - GURL(kTargetUrl), LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE); + GURL(kTargetUrl), LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, + nullptr); base::RunLoop().RunUntilIdle(); EXPECT_EQ(nullptr, password_protection_service_->latest_response()); EXPECT_THAT(histograms_.GetAllSamples(kRequestOutcomeHistogramName), @@ -410,7 +437,8 @@ histograms_.ExpectTotalCount(kRequestOutcomeHistogramName, 0); password_protection_service_->set_extended_reporting(false); password_protection_service_->StartRequest( - GURL(kTargetUrl), LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE); + GURL(kTargetUrl), LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, + nullptr); base::RunLoop().RunUntilIdle(); EXPECT_EQ(nullptr, password_protection_service_->latest_response()); @@ -520,7 +548,7 @@ EXPECT_CALL(*database_manager_.get(), MatchCsdWhitelistUrl(target_url)) .WillRepeatedly(testing::Return(false)); password_protection_service_->StartRequest( - target_url, LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE); + target_url, LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, nullptr); // Destroy password_protection_service_ while there is one request pending. password_protection_service_.reset();
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index 9639954..95647cb7 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc
@@ -781,13 +781,13 @@ BrowserAccessibility* BrowserAccessibility::GetTable() const { BrowserAccessibility* table = const_cast<BrowserAccessibility*>(this); - while (table && !table->IsTableOrGridOrTreeGridRole()) + while (table && !table->IsTableLikeRole()) table = table->PlatformGetParent(); return table; } BrowserAccessibility* BrowserAccessibility::GetTableCell(int index) const { - if (!IsTableOrGridOrTreeGridRole() && !IsCellOrTableHeaderRole()) + if (!IsTableLikeRole() && !IsCellOrTableHeaderRole()) return nullptr; BrowserAccessibility* table = GetTable(); @@ -802,7 +802,7 @@ BrowserAccessibility* BrowserAccessibility::GetTableCell(int row, int column) const { - if (!IsTableOrGridOrTreeGridRole() && !IsCellOrTableHeaderRole()) + if (!IsTableLikeRole() && !IsCellOrTableHeaderRole()) return nullptr; if (row < 0 || row >= GetTableRowCount() || column < 0 || column >= GetTableColumnCount()) { @@ -901,7 +901,7 @@ GetRole() == ui::AX_ROLE_ROW_HEADER); } -bool BrowserAccessibility::IsTableOrGridOrTreeGridRole() const { +bool BrowserAccessibility::IsTableLikeRole() const { return (GetRole() == ui::AX_ROLE_TABLE || GetRole() == ui::AX_ROLE_GRID || GetRole() == ui::AX_ROLE_TREE_GRID);
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index 89cafa8..e16474c 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h
@@ -362,7 +362,7 @@ bool IsCellOrTableHeaderRole() const; // Returns true if this node is a table, a grid or a treegrid. - bool IsTableOrGridOrTreeGridRole() const; + bool IsTableLikeRole() const; // Returns true if the caret is active on this object. bool HasCaret() const;
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index 85acf003..a74f0082 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -174,11 +174,9 @@ } bool BrowserAccessibilityAndroid::IsCollection() const { - return (GetRole() == ui::AX_ROLE_GRID || - GetRole() == ui::AX_ROLE_LIST || + return (IsTableLikeRole() || GetRole() == ui::AX_ROLE_LIST || GetRole() == ui::AX_ROLE_LIST_BOX || GetRole() == ui::AX_ROLE_DESCRIPTION_LIST || - GetRole() == ui::AX_ROLE_TABLE || GetRole() == ui::AX_ROLE_TREE); } @@ -375,6 +373,7 @@ class_name = ui::kAXTabWidgetClassname; break; case ui::AX_ROLE_GRID: + case ui::AX_ROLE_TREE_GRID: case ui::AX_ROLE_TABLE: class_name = ui::kAXGridViewClassname; break; @@ -1246,8 +1245,7 @@ } int BrowserAccessibilityAndroid::RowCount() const { - if (GetRole() == ui::AX_ROLE_GRID || - GetRole() == ui::AX_ROLE_TABLE) { + if (IsTableLikeRole()) { return CountChildrenWithRole(ui::AX_ROLE_ROW); } @@ -1262,8 +1260,7 @@ } int BrowserAccessibilityAndroid::ColumnCount() const { - if (GetRole() == ui::AX_ROLE_GRID || - GetRole() == ui::AX_ROLE_TABLE) { + if (IsTableLikeRole()) { return CountChildrenWithRole(ui::AX_ROLE_COLUMN); } return 0;
diff --git a/content/browser/accessibility/browser_accessibility_auralinux.cc b/content/browser/accessibility/browser_accessibility_auralinux.cc index 0a1cf53c..6e2064e9 100644 --- a/content/browser/accessibility/browser_accessibility_auralinux.cc +++ b/content/browser/accessibility/browser_accessibility_auralinux.cc
@@ -950,6 +950,9 @@ case ui::AX_ROLE_TREE_ITEM: atk_role_ = ATK_ROLE_TREE_ITEM; break; + case ui::AX_ROLE_TREE_GRID: + atk_role_ = ATK_ROLE_TREE_TABLE; + break; case ui::AX_ROLE_VIDEO: #if defined(ATK_CHECK_VERSION) #if ATK_CHECK_VERSION(2, 12, 0)
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index aeb6092..6e4d970 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -658,7 +658,7 @@ } - (NSNumber*)ariaColumnCount { - if (!browserAccessibility_->IsTableOrGridOrTreeGridRole()) + if (!browserAccessibility_->IsTableLikeRole()) return nil; int count = -1; if (!browserAccessibility_->GetIntAttribute( @@ -699,7 +699,7 @@ } - (NSNumber*)ariaRowCount { - if (!browserAccessibility_->IsTableOrGridOrTreeGridRole()) + if (!browserAccessibility_->IsTableLikeRole()) return nil; int count = -1; if (!browserAccessibility_->GetIntAttribute( @@ -778,8 +778,7 @@ - (NSArray*)columnHeaders { if (![self instanceActive]) return nil; - if ([self internalRole] != ui::AX_ROLE_TABLE && - [self internalRole] != ui::AX_ROLE_GRID) { + if (!browserAccessibility_->IsTableLikeRole()) { return nil; } @@ -1007,8 +1006,7 @@ if (![self instanceActive]) return nil; int headerElementId = -1; - if ([self internalRole] == ui::AX_ROLE_TABLE || - [self internalRole] == ui::AX_ROLE_GRID) { + if (browserAccessibility_->IsTableLikeRole()) { browserAccessibility_->GetIntAttribute( ui::AX_ATTR_TABLE_HEADER_ID, &headerElementId); } else if ([self internalRole] == ui::AX_ROLE_COLUMN) { @@ -1516,8 +1514,7 @@ - (NSArray*)rowHeaders { if (![self instanceActive]) return nil; - if ([self internalRole] != ui::AX_ROLE_TABLE && - [self internalRole] != ui::AX_ROLE_GRID) { + if (!browserAccessibility_->IsTableLikeRole()) { return nil; }
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm index c6b659b..b3c484e 100644 --- a/content/browser/accessibility/browser_accessibility_manager_mac.mm +++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -211,8 +211,7 @@ mac_notification = NSAccessibilityInvalidStatusChangedNotification; break; case ui::AX_EVENT_SELECTED_CHILDREN_CHANGED: - if (node->GetRole() == ui::AX_ROLE_GRID || - node->GetRole() == ui::AX_ROLE_TABLE) { + if (node->IsTableLikeRole()) { mac_notification = NSAccessibilitySelectedRowsChangedNotification; } else { mac_notification = NSAccessibilitySelectedChildrenChangedNotification;
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc index 045aad7..ae80379 100644 --- a/content/browser/accessibility/browser_accessibility_win.cc +++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -3802,7 +3802,7 @@ // Expose table cell index. if (IsCellOrTableHeaderRole()) { BrowserAccessibility* table = PlatformGetParent(); - while (table && table->GetRole() != ui::AX_ROLE_TABLE) + while (table && !table->IsTableLikeRole()) table = table->PlatformGetParent(); if (table) { const std::vector<int32_t>& unique_cell_ids = @@ -3817,7 +3817,7 @@ } // Expose aria-colcount and aria-rowcount in a table, grid or treegrid. - if (IsTableOrGridOrTreeGridRole()) { + if (IsTableLikeRole()) { IntAttributeToIA2(ui::AX_ATTR_ARIA_COL_COUNT, "colcount"); IntAttributeToIA2(ui::AX_ATTR_ARIA_ROW_COUNT, "rowcount"); } @@ -5306,7 +5306,10 @@ break; case ui::AX_ROLE_GRID: ia_role = ROLE_SYSTEM_TABLE; - ia_state |= STATE_SYSTEM_READONLY; + // TODO(aleventhal) this changed between ARIA 1.0 and 1.1, + // need to determine whether grids/treegrids should really be readonly + // or editable by default + // ia_state |= STATE_SYSTEM_READONLY; break; case ui::AX_ROLE_GROUP: { base::string16 aria_role = GetString16Attribute( @@ -5537,16 +5540,9 @@ case ui::AX_ROLE_TAB: ia_role = ROLE_SYSTEM_PAGETAB; break; - case ui::AX_ROLE_TABLE: { - base::string16 aria_role = GetString16Attribute( - ui::AX_ATTR_ROLE); - if (aria_role == L"treegrid") { - ia_role = ROLE_SYSTEM_OUTLINE; - } else { - ia_role = ROLE_SYSTEM_TABLE; - } + case ui::AX_ROLE_TABLE: + ia_role = ROLE_SYSTEM_TABLE; break; - } case ui::AX_ROLE_TABLE_HEADER_CONTAINER: ia_role = ROLE_SYSTEM_GROUPING; ia2_role = IA2_ROLE_SECTION; @@ -5668,10 +5664,7 @@ return false; } - const ui::AXRole role = container->GetRole(); - return role == ui::AX_ROLE_TREE_GRID || - (role == ui::AX_ROLE_TABLE && - container->GetString16Attribute(ui::AX_ATTR_ROLE) == L"treegrid"); + return container->GetRole() == ui::AX_ROLE_TREE_GRID; } BrowserAccessibilityWin* ToBrowserAccessibilityWin(BrowserAccessibility* obj) {
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.cc b/content/browser/accessibility/one_shot_accessibility_tree_search.cc index 4a0d4bc..7cfbd16 100644 --- a/content/browser/accessibility/one_shot_accessibility_tree_search.cc +++ b/content/browser/accessibility/one_shot_accessibility_tree_search.cc
@@ -409,8 +409,7 @@ bool AccessibilityTablePredicate( BrowserAccessibility* start, BrowserAccessibility* node) { - return (node->GetRole() == ui::AX_ROLE_TABLE || - node->GetRole() == ui::AX_ROLE_GRID); + return node->IsTableLikeRole(); } bool AccessibilityTextfieldPredicate(
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc index 5531dd9..c41f5e7 100644 --- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -1619,7 +1619,7 @@ // See http://crbug.com/335503. // The test fails on Mac OSX with ASAN. // See http://crbug.com/699062. -#if defined(OS_MACOSX) && defined(ADDRESS_SANITIZER) +#if defined(OS_MACOSX) && defined(THREAD_SANITIZER) #define MAYBE_RendererDebugURLsDontSwap DISABLED_RendererDebugURLsDontSwap #else #define MAYBE_RendererDebugURLsDontSwap RendererDebugURLsDontSwap
diff --git a/content/browser/media/media_internals_unittest.cc b/content/browser/media/media_internals_unittest.cc index f9aa328..c70623f 100644 --- a/content/browser/media/media_internals_unittest.cc +++ b/content/browser/media/media_internals_unittest.cc
@@ -321,6 +321,7 @@ explicit DirectMediaLog(int render_process_id) : render_process_id_(render_process_id), internals_(content::MediaInternals::GetInstance()) {} + ~DirectMediaLog() override {} void AddEvent(std::unique_ptr<media::MediaLogEvent> event) override { std::vector<media::MediaLogEvent> events(1, *event); @@ -328,8 +329,6 @@ } private: - ~DirectMediaLog() override {} - const int render_process_id_; MediaInternals* const internals_; @@ -352,7 +351,7 @@ bool is_mse, bool is_encrypted) { wtr_.reset(new media::WatchTimeReporter( - has_audio, has_video, is_mse, is_encrypted, true, media_log_, + has_audio, has_video, is_mse, is_encrypted, true, media_log_.get(), gfx::Size(800, 600), base::Bind(&MediaInternalsWatchTimeTest::GetCurrentMediaTime, base::Unretained(this)))); @@ -388,7 +387,7 @@ protected: const int render_process_id_; MediaInternals* const internals_; - scoped_refptr<DirectMediaLog> media_log_; + std::unique_ptr<DirectMediaLog> media_log_; std::unique_ptr<base::HistogramTester> histogram_tester_; std::unique_ptr<media::WatchTimeReporter> wtr_; const base::flat_set<base::StringPiece> watch_time_keys_;
diff --git a/content/network/OWNERS b/content/network/OWNERS new file mode 100644 index 0000000..55b6fbd0 --- /dev/null +++ b/content/network/OWNERS
@@ -0,0 +1,7 @@ +ananta@chromium.org +asanka@chromium.org +jam@chromium.org +mmenke@chromium.org +rdsmith@chromium.org +scottmg@chromium.org +yzshen@chromium.org
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc index c517d77..f2743d8 100644 --- a/content/renderer/accessibility/blink_ax_tree_source.cc +++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -672,7 +672,10 @@ if (dst->role == ui::AX_ROLE_ROOT_WEB_AREA) dst->AddStringAttribute(ui::AX_ATTR_HTML_TAG, "#document"); - if (dst->role == ui::AX_ROLE_TABLE) { + const bool is_table_like_role = dst->role == ui::AX_ROLE_TABLE || + dst->role == ui::AX_ROLE_GRID || + dst->role == ui::AX_ROLE_TREE_GRID; + if (is_table_like_role) { int column_count = src.ColumnCount(); int row_count = src.RowCount(); if (column_count > 0 && row_count > 0) { @@ -700,11 +703,7 @@ dst->AddIntListAttribute(ui::AX_ATTR_CELL_IDS, cell_ids); dst->AddIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS, unique_cell_ids); } - } - if (dst->role == ui::AX_ROLE_TABLE || - dst->role == ui::AX_ROLE_GRID || - dst->role == ui::AX_ROLE_TREE_GRID) { int aria_colcount = src.AriaColumnCount(); if (aria_colcount) dst->AddIntAttribute(ui::AX_ATTR_ARIA_COL_COUNT, aria_colcount);
diff --git a/content/renderer/media/render_media_log.cc b/content/renderer/media/render_media_log.cc index 1169f685..981e38d 100644 --- a/content/renderer/media/render_media_log.cc +++ b/content/renderer/media/render_media_log.cc
@@ -47,9 +47,23 @@ task_runner_(base::ThreadTaskRunnerHandle::Get()), tick_clock_(new base::DefaultTickClock()), last_ipc_send_time_(tick_clock_->NowTicks()), - ipc_send_pending_(false) { + ipc_send_pending_(false), + weak_factory_(this) { DCHECK(RenderThread::Get()) << "RenderMediaLog must be constructed on the render thread"; + // Pre-bind the WeakPtr on the right thread since we'll receive calls from + // other threads and don't want races. + weak_this_ = weak_factory_.GetWeakPtr(); +} + +RenderMediaLog::~RenderMediaLog() { + DCHECK(task_runner_->BelongsToCurrentThread()); + + // There's no further chance to handle this, so send them now. This should not + // be racy since nothing should have a pointer to the media log on another + // thread by this point. + if (ipc_send_pending_) + SendQueuedMediaEvents(); } void RenderMediaLog::AddEvent(std::unique_ptr<media::MediaLogEvent> event) { @@ -104,7 +118,8 @@ if (delay_for_next_ipc_send > base::TimeDelta()) { task_runner_->PostDelayedTask( - FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this), + FROM_HERE, + base::Bind(&RenderMediaLog::SendQueuedMediaEvents, weak_this_), delay_for_next_ipc_send); return; } @@ -115,7 +130,8 @@ return; } task_runner_->PostTask( - FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this)); + FROM_HERE, + base::Bind(&RenderMediaLog::SendQueuedMediaEvents, weak_this_)); } std::string RenderMediaLog::GetLastErrorMessage() { @@ -137,7 +153,7 @@ if (!task_runner_->BelongsToCurrentThread()) { task_runner_->PostTask( FROM_HERE, base::Bind(&RenderMediaLog::RecordRapporWithSecurityOrigin, - this, metric)); + weak_this_, metric)); return; } @@ -168,10 +184,10 @@ last_ipc_send_time_ = tick_clock_->NowTicks(); } - RenderThread::Get()->Send(new ViewHostMsg_MediaLogEvents(events_to_send)); -} + if (events_to_send.empty()) + return; -RenderMediaLog::~RenderMediaLog() { + RenderThread::Get()->Send(new ViewHostMsg_MediaLogEvents(events_to_send)); } void RenderMediaLog::SetTickClockForTesting(
diff --git a/content/renderer/media/render_media_log.h b/content/renderer/media/render_media_log.h index ed9ce62..825125f 100644 --- a/content/renderer/media/render_media_log.h +++ b/content/renderer/media/render_media_log.h
@@ -9,6 +9,7 @@ #include <vector> #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "base/synchronization/lock.h" #include "base/time/time.h" #include "content/common/content_export.h" @@ -34,6 +35,7 @@ class CONTENT_EXPORT RenderMediaLog : public media::MediaLog { public: explicit RenderMediaLog(const GURL& security_origin); + ~RenderMediaLog() override; // MediaLog implementation. void AddEvent(std::unique_ptr<media::MediaLogEvent> event) override; @@ -46,8 +48,6 @@ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); private: - ~RenderMediaLog() override; - // Posted as a delayed task on |task_runner_| to throttle ipc message // frequency. void SendQueuedMediaEvents(); @@ -79,6 +79,9 @@ // Holds a copy of the most recent PIPELINE_ERROR, if any. std::unique_ptr<media::MediaLogEvent> last_pipeline_error_; + base::WeakPtr<RenderMediaLog> weak_this_; + base::WeakPtrFactory<RenderMediaLog> weak_factory_; + DISALLOW_COPY_AND_ASSIGN(RenderMediaLog); };
diff --git a/content/renderer/media/render_media_log_unittest.cc b/content/renderer/media/render_media_log_unittest.cc index 905bec5..e4db4d4 100644 --- a/content/renderer/media/render_media_log_unittest.cc +++ b/content/renderer/media/render_media_log_unittest.cc
@@ -18,11 +18,11 @@ class RenderMediaLogTest : public testing::Test { public: RenderMediaLogTest() - : log_(new RenderMediaLog(GURL("http://foo.com"))), + : log_(GURL("http://foo.com")), tick_clock_(new base::SimpleTestTickClock()), task_runner_(new base::TestMockTimeTaskRunner()) { - log_->SetTickClockForTesting(std::unique_ptr<base::TickClock>(tick_clock_)); - log_->SetTaskRunnerForTesting(task_runner_); + log_.SetTickClockForTesting(std::unique_ptr<base::TickClock>(tick_clock_)); + log_.SetTaskRunnerForTesting(task_runner_); } ~RenderMediaLogTest() override { @@ -30,7 +30,7 @@ } void AddEvent(media::MediaLogEvent::Type type) { - log_->AddEvent(log_->CreateEvent(type)); + log_.AddEvent(log_.CreateEvent(type)); // AddEvent() could post. Run the task runner to make sure it's executed. task_runner_->RunUntilIdle(); } @@ -58,7 +58,7 @@ private: base::MessageLoop message_loop_; MockRenderThread render_thread_; - scoped_refptr<RenderMediaLog> log_; + RenderMediaLog log_; base::SimpleTestTickClock* tick_clock_; // Owned by |log_|. scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc index e2adb547..6d48707 100644 --- a/content/renderer/media/webmediaplayer_ms.cc +++ b/content/renderer/media/webmediaplayer_ms.cc
@@ -144,7 +144,7 @@ blink::WebFrame* frame, blink::WebMediaPlayerClient* client, media::WebMediaPlayerDelegate* delegate, - media::MediaLog* media_log, + std::unique_ptr<media::MediaLog> media_log, std::unique_ptr<MediaStreamRendererFactory> factory, scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, @@ -162,7 +162,7 @@ delegate_id_(0), paused_(true), video_rotation_(media::VIDEO_ROTATION_0), - media_log_(media_log), + media_log_(std::move(media_log)), renderer_factory_(std::move(factory)), io_task_runner_(io_task_runner), compositor_task_runner_(compositor_task_runner), @@ -225,8 +225,8 @@ blink::WebMediaStream web_stream = GetWebMediaStreamFromWebMediaPlayerSource(source); - compositor_ = new WebMediaPlayerMSCompositor( - compositor_task_runner_, web_stream, AsWeakPtr(), media_log_); + compositor_ = new WebMediaPlayerMSCompositor(compositor_task_runner_, + web_stream, AsWeakPtr()); SetNetworkState(WebMediaPlayer::kNetworkStateLoading); SetReadyState(WebMediaPlayer::kReadyStateHaveNothing); @@ -249,7 +249,7 @@ // Report UMA and RAPPOR metrics. GURL url = source.IsURL() ? GURL(source.GetAsURL()) : GURL(); media::ReportMetrics(load_type, url, frame_->GetSecurityOrigin(), - media_log_); + media_log_.get()); audio_renderer_ = renderer_factory_->GetAudioRenderer( web_stream, frame->GetRoutingID(), initial_audio_output_device_id_,
diff --git a/content/renderer/media/webmediaplayer_ms.h b/content/renderer/media/webmediaplayer_ms.h index d44d94e..debec32 100644 --- a/content/renderer/media/webmediaplayer_ms.h +++ b/content/renderer/media/webmediaplayer_ms.h
@@ -73,7 +73,7 @@ blink::WebFrame* frame, blink::WebMediaPlayerClient* client, media::WebMediaPlayerDelegate* delegate, - media::MediaLog* media_log, + std::unique_ptr<media::MediaLog> media_log, std::unique_ptr<MediaStreamRendererFactory> factory, scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_, scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, @@ -233,7 +233,7 @@ bool paused_; media::VideoRotation video_rotation_; - scoped_refptr<media::MediaLog> media_log_; + std::unique_ptr<media::MediaLog> media_log_; std::unique_ptr<MediaStreamRendererFactory> renderer_factory_;
diff --git a/content/renderer/media/webmediaplayer_ms_compositor.cc b/content/renderer/media/webmediaplayer_ms_compositor.cc index 90803e2..99336fc 100644 --- a/content/renderer/media/webmediaplayer_ms_compositor.cc +++ b/content/renderer/media/webmediaplayer_ms_compositor.cc
@@ -14,7 +14,6 @@ #include "cc/paint/skia_paint_canvas.h" #include "content/renderer/media/webmediaplayer_ms.h" #include "content/renderer/render_thread_impl.h" -#include "media/base/media_log.h" #include "media/base/media_switches.h" #include "media/base/video_frame.h" #include "media/base/video_util.h" @@ -130,11 +129,9 @@ WebMediaPlayerMSCompositor::WebMediaPlayerMSCompositor( const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, const blink::WebMediaStream& web_stream, - const base::WeakPtr<WebMediaPlayerMS>& player, - scoped_refptr<media::MediaLog> media_log) + const base::WeakPtr<WebMediaPlayerMS>& player) : compositor_task_runner_(compositor_task_runner), player_(player), - media_log_(std::move(media_log)), video_frame_provider_client_(nullptr), current_frame_used_by_compositor_(false), last_render_length_(base::TimeDelta::FromSecondsD(1.0 / 60.0)), @@ -157,7 +154,7 @@ rendering_frame_buffer_.reset(new media::VideoRendererAlgorithm( base::Bind(&WebMediaPlayerMSCompositor::MapTimestampsToRenderTimeTicks, base::Unretained(this)), - media_log_)); + &media_log_)); } // Just for logging purpose. @@ -463,7 +460,7 @@ rendering_frame_buffer_.reset(new media::VideoRendererAlgorithm( base::Bind(&WebMediaPlayerMSCompositor::MapTimestampsToRenderTimeTicks, base::Unretained(this)), - media_log_)); + &media_log_)); } }
diff --git a/content/renderer/media/webmediaplayer_ms_compositor.h b/content/renderer/media/webmediaplayer_ms_compositor.h index a0c9ef6..a97628747 100644 --- a/content/renderer/media/webmediaplayer_ms_compositor.h +++ b/content/renderer/media/webmediaplayer_ms_compositor.h
@@ -18,6 +18,7 @@ #include "base/threading/thread_checker.h" #include "cc/layers/video_frame_provider.h" #include "content/common/content_export.h" +#include "media/base/media_log.h" namespace base { class SingleThreadTaskRunner; @@ -32,7 +33,6 @@ } namespace media { -class MediaLog; class VideoRendererAlgorithm; } @@ -59,8 +59,7 @@ WebMediaPlayerMSCompositor( const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, const blink::WebMediaStream& web_stream, - const base::WeakPtr<WebMediaPlayerMS>& player, - scoped_refptr<media::MediaLog> media_log_); + const base::WeakPtr<WebMediaPlayerMS>& player); void EnqueueFrame(scoped_refptr<media::VideoFrame> frame); @@ -125,7 +124,10 @@ base::WeakPtr<WebMediaPlayerMS> player_; - scoped_refptr<media::MediaLog> media_log_; + // TODO(qiangchen, emircan): It might be nice to use a real MediaLog here from + // the WebMediaPlayerMS instance, but it owns the MediaLog and this class has + // non-deterministic destruction paths (either compositor or IO). + media::MediaLog media_log_; size_t serial_;
diff --git a/content/renderer/media/webmediaplayer_ms_unittest.cc b/content/renderer/media/webmediaplayer_ms_unittest.cc index b69fc13..3c279843 100644 --- a/content/renderer/media/webmediaplayer_ms_unittest.cc +++ b/content/renderer/media/webmediaplayer_ms_unittest.cc
@@ -403,7 +403,7 @@ nullptr, this, &delegate_, - new media::MediaLog(), + base::MakeUnique<media::MediaLog>(), std::unique_ptr<MediaStreamRendererFactory>(render_factory_), message_loop_.task_runner(), message_loop_.task_runner(),
diff --git a/content/renderer/media_capture_from_element/html_audio_element_capturer_source_unittest.cc b/content/renderer/media_capture_from_element/html_audio_element_capturer_source_unittest.cc index 5b4f350..444fc3094 100644 --- a/content/renderer/media_capture_from_element/html_audio_element_capturer_source_unittest.cc +++ b/content/renderer/media_capture_from_element/html_audio_element_capturer_source_unittest.cc
@@ -69,7 +69,7 @@ : fake_callback_(0.1, kAudioTrackSampleRate), audio_source_(new media::WebAudioSourceProviderImpl( new media::NullAudioSink(base::ThreadTaskRunnerHandle::Get()), - new media::MediaLog())) {} + &media_log_)) {} void SetUp() final { const media::AudioParameters params( @@ -117,6 +117,7 @@ blink::WebMediaStreamSource blink_audio_source_; blink::WebMediaStreamTrack blink_audio_track_; + media::MediaLog media_log_; media::FakeAudioRenderCallback fake_callback_; scoped_refptr<media::WebAudioSourceProviderImpl> audio_source_; };
diff --git a/content/renderer/pepper/video_decoder_shim.cc b/content/renderer/pepper/video_decoder_shim.cc index d485c35..8324679 100644 --- a/content/renderer/pepper/video_decoder_shim.cc +++ b/content/renderer/pepper/video_decoder_shim.cc
@@ -657,6 +657,7 @@ // WeakPtr is bound to main_message_loop_. Use only in shim callbacks. base::WeakPtr<VideoDecoderShim> shim_; + media::MediaLog media_log_; std::unique_ptr<media::VideoDecoder> decoder_; bool initialized_ = false; scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; @@ -697,8 +698,7 @@ #if !defined(MEDIA_DISABLE_FFMPEG) && !defined(DISABLE_FFMPEG_VIDEO_DECODERS) { std::unique_ptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder( - new media::FFmpegVideoDecoder( - make_scoped_refptr(new media::MediaLog()))); + new media::FFmpegVideoDecoder(&media_log_)); ffmpeg_video_decoder->set_decode_nalus(true); decoder_ = std::move(ffmpeg_video_decoder); }
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 7f32edb..3e083e5 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2846,13 +2846,6 @@ &GetSharedMainThreadContext3D, RenderThreadImpl::current()->SharedMainThreadContextProvider()); - // This must be created for every new WebMediaPlayer, each instance generates - // a new player id which is used to collate logs on the browser side. - // TODO(chcunningham, dalecurtis): This should be switched to a unique_ptr - // owned by WebMediaPlayer to avoid this confusion. http://crbug.com/711818. - scoped_refptr<media::MediaLog> media_log( - new RenderMediaLog(url::Origin(security_origin).GetURL())); - bool embedded_media_experience_enabled = false; #if defined(OS_ANDROID) if (!UseMediaPlayerRenderer(url) && !media_surface_manager_) @@ -2887,22 +2880,10 @@ "max_keyframe_distance_media_source_ms", base::TimeDelta::FromSeconds(10).InMilliseconds())); - media::WebMediaPlayerParams params( - base::Bind(&ContentRendererClient::DeferMediaLoad, - base::Unretained(GetContentClient()->renderer()), - static_cast<RenderFrame*>(this), - GetWebMediaPlayerDelegate()->has_played_media()), - audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), - render_thread->GetWorkerTaskRunner(), - render_thread->compositor_task_runner(), context_3d_cb, - base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, - base::Unretained(blink::MainThreadIsolate())), - initial_cdm, media_surface_manager_, media_observer, - max_keyframe_distance_to_disable_background_video, - max_keyframe_distance_to_disable_background_video_mse, - GetWebkitPreferences().enable_instant_source_buffer_gc, - GetContentClient()->renderer()->AllowMediaSuspend(), - embedded_media_experience_enabled); + // This must be created for every new WebMediaPlayer, each instance generates + // a new player id which is used to collate logs on the browser side. + std::unique_ptr<media::MediaLog> media_log( + new RenderMediaLog(url::Origin(security_origin).GetURL())); bool use_fallback_path = false; #if defined(OS_ANDROID) @@ -2930,7 +2911,7 @@ if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableMojoRenderer)) { media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( - media_log, GetDecoderFactory(), + media_log.get(), GetDecoderFactory(), base::Bind(&RenderThreadImpl::GetGpuFactories, base::Unretained(render_thread))); } @@ -2943,7 +2924,7 @@ } #else media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( - media_log, GetDecoderFactory(), + media_log.get(), GetDecoderFactory(), base::Bind(&RenderThreadImpl::GetGpuFactories, base::Unretained(render_thread))); #endif // defined(ENABLE_MOJO_RENDERER) @@ -2958,9 +2939,28 @@ if (!url_index_.get() || url_index_->frame() != frame_) url_index_.reset(new media::UrlIndex(frame_)); + std::unique_ptr<media::WebMediaPlayerParams> params( + new media::WebMediaPlayerParams( + std::move(media_log), + base::Bind(&ContentRendererClient::DeferMediaLoad, + base::Unretained(GetContentClient()->renderer()), + static_cast<RenderFrame*>(this), + GetWebMediaPlayerDelegate()->has_played_media()), + audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), + render_thread->GetWorkerTaskRunner(), + render_thread->compositor_task_runner(), context_3d_cb, + base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, + base::Unretained(blink::MainThreadIsolate())), + initial_cdm, media_surface_manager_, media_observer, + max_keyframe_distance_to_disable_background_video, + max_keyframe_distance_to_disable_background_video_mse, + GetWebkitPreferences().enable_instant_source_buffer_gc, + GetContentClient()->renderer()->AllowMediaSuspend(), + embedded_media_experience_enabled)); + media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), - std::move(media_renderer_factory), url_index_, params); + std::move(media_renderer_factory), url_index_, std::move(params)); #if defined(OS_ANDROID) // WMPI_CAST media_player->SetMediaPlayerManager(GetMediaPlayerManager()); @@ -6303,7 +6303,7 @@ return new WebMediaPlayerMS( frame_, client, GetWebMediaPlayerDelegate(), - new RenderMediaLog(url::Origin(security_origin).GetURL()), + base::MakeUnique<RenderMediaLog>(url::Origin(security_origin).GetURL()), CreateRendererFactory(), render_thread->GetIOTaskRunner(), compositor_task_runner, render_thread->GetMediaThreadTaskRunner(), render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(),
diff --git a/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt b/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt index 3accb55..c96566df 100644 --- a/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt
@@ -1,5 +1,5 @@ rootWebArea -++table ariaColCount=5 +++grid ariaColCount=5 ++++row ++++++columnHeader name='cell 2' ariaColIndex=2 ++++++++staticText name='cell 2'
diff --git a/content/test/data/accessibility/aria/aria-col-attr-expected-mac.txt b/content/test/data/accessibility/aria/aria-col-attr-expected-mac.txt index e2f6b921..2f53480 100644 --- a/content/test/data/accessibility/aria/aria-col-attr-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-col-attr-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable AXARIAColumnCount='5' +++AXGrid AXARIAColumnCount='5' ++++AXRow ++++++AXCell AXTitle='cell 2' AXARIAColumnIndex='2' ++++++++AXStaticText AXValue='cell 2'
diff --git a/content/test/data/accessibility/aria/aria-columnheader-expected-mac.txt b/content/test/data/accessibility/aria/aria-columnheader-expected-mac.txt index 7c778711..ada8210 100644 --- a/content/test/data/accessibility/aria/aria-columnheader-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-columnheader-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Browser' ++++++++AXStaticText AXValue='Browser'
diff --git a/content/test/data/accessibility/aria/aria-grid-expected-mac.txt b/content/test/data/accessibility/aria/aria-grid-expected-mac.txt index 68f4871..22c6b08 100644 --- a/content/test/data/accessibility/aria/aria-grid-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-grid-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea AXRoleDescription='HTML content' -++AXTable AXRoleDescription='table' +++AXGrid AXRoleDescription='grid' ++++AXRow AXRoleDescription='row' ++++++AXCell AXRoleDescription='cell' AXTitle='Browser' ++++++++AXStaticText AXRoleDescription='text' AXValue='Browser'
diff --git a/content/test/data/accessibility/aria/aria-gridcell-expected-mac.txt b/content/test/data/accessibility/aria/aria-gridcell-expected-mac.txt index 68f4871..22c6b08 100644 --- a/content/test/data/accessibility/aria/aria-gridcell-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-gridcell-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea AXRoleDescription='HTML content' -++AXTable AXRoleDescription='table' +++AXGrid AXRoleDescription='grid' ++++AXRow AXRoleDescription='row' ++++++AXCell AXRoleDescription='cell' AXTitle='Browser' ++++++++AXStaticText AXRoleDescription='text' AXValue='Browser'
diff --git a/content/test/data/accessibility/aria/aria-orientation-expected-android.txt b/content/test/data/accessibility/aria/aria-orientation-expected-android.txt index 070d54b..f7f5b41 100644 --- a/content/test/data/accessibility/aria/aria-orientation-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-orientation-expected-android.txt
@@ -32,9 +32,9 @@ ++android.view.View role_description='tree' collection hierarchical ++android.view.View role_description='tree' collection hierarchical ++android.view.View role_description='tree' collection hierarchical -++android.widget.GridView role_description='table' collection +++android.widget.GridView role_description='tree grid' collection ++++android.view.View -++android.widget.GridView role_description='table' collection +++android.widget.GridView role_description='tree grid' collection ++++android.view.View -++android.widget.GridView role_description='table' collection +++android.widget.GridView role_description='tree grid' collection ++++android.view.View \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt b/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt index f95baaf..9440ddd 100644 --- a/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt
@@ -1,5 +1,5 @@ rootWebArea -++table ariaRowCount=5 +++grid ariaRowCount=5 ++++row ++++++columnHeader name='cell 2' ariaRowIndex=3 ++++++++staticText name='cell 2'
diff --git a/content/test/data/accessibility/aria/aria-row-attr-expected-mac.txt b/content/test/data/accessibility/aria/aria-row-attr-expected-mac.txt index a4fc45e..35def74 100644 --- a/content/test/data/accessibility/aria/aria-row-attr-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-row-attr-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable AXARIARowCount='5' +++AXGrid AXARIARowCount='5' ++++AXRow ++++++AXCell AXTitle='cell 2' AXARIARowIndex='3' ++++++++AXStaticText AXValue='cell 2'
diff --git a/content/test/data/accessibility/aria/aria-row-expected-mac.txt b/content/test/data/accessibility/aria/aria-row-expected-mac.txt index 7c778711..ada8210 100644 --- a/content/test/data/accessibility/aria/aria-row-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-row-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Browser' ++++++++AXStaticText AXValue='Browser'
diff --git a/content/test/data/accessibility/aria/aria-rowgroup-expected-mac.txt b/content/test/data/accessibility/aria/aria-rowgroup-expected-mac.txt index b8033e6..f22f6ef8 100644 --- a/content/test/data/accessibility/aria/aria-rowgroup-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-rowgroup-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable +++AXGrid ++++AXRow ++++AXRow ++++AXGroup
diff --git a/content/test/data/accessibility/aria/aria-rowheader-expected-mac.txt b/content/test/data/accessibility/aria/aria-rowheader-expected-mac.txt index 5b6be0fa..c8d13ff 100644 --- a/content/test/data/accessibility/aria/aria-rowheader-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-rowheader-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Browser' ++++++++AXStaticText AXValue='Browser'
diff --git a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-mac.txt b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-mac.txt index b4b49bd..747f5a01 100644 --- a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-mac.txt +++ b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' ++++++++AXStaticText AXValue='Alphabet' @@ -11,7 +11,7 @@ ++++++++AXStaticText AXValue='B' ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' ++++++++AXStaticText AXValue='Alphabet' @@ -23,7 +23,7 @@ ++++++++AXStaticText AXValue='B' ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' AXSortDirection='AXAscendingSortDirection' ++++++++AXStaticText AXValue='Alphabet' @@ -35,7 +35,7 @@ ++++++++AXStaticText AXValue='B' ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' AXSortDirection='AXDescendingSortDirection' ++++++++AXStaticText AXValue='Alphabet' @@ -47,7 +47,7 @@ ++++++++AXStaticText AXValue='A' ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' AXSortDirection='AXUnknownSortDirection' ++++++++AXStaticText AXValue='Alphabet' @@ -59,7 +59,7 @@ ++++++++AXStaticText AXValue='A' ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' ++++++++AXStaticText AXValue='Alphabet' @@ -71,7 +71,7 @@ ++++AXColumn ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' ++++++++AXStaticText AXValue='Alphabet' @@ -83,7 +83,7 @@ ++++AXColumn ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' AXSortDirection='AXAscendingSortDirection' ++++++++AXStaticText AXValue='Alphabet' @@ -95,7 +95,7 @@ ++++AXColumn ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' AXSortDirection='AXDescendingSortDirection' ++++++++AXStaticText AXValue='Alphabet' @@ -107,7 +107,7 @@ ++++AXColumn ++++AXColumn ++++AXGroup -++AXTable +++AXGrid ++++AXRow ++++++AXCell AXTitle='Alphabet' AXSortDirection='AXUnknownSortDirection' ++++++++AXStaticText AXValue='Alphabet'
diff --git a/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt b/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt index c703016..b93368432 100644 --- a/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt
@@ -1,12 +1,12 @@ android.webkit.WebView focusable focused scrollable -++android.widget.GridView role_description='table' collection row_count=2 column_count=1 +++android.widget.GridView role_description='tree grid' collection row_count=2 column_count=1 ++++android.view.View ++++++android.view.View role_description='cell' collection_item name='Cell at level 1' row_span=1 column_span=1 ++++android.view.View ++++++android.view.View role_description='cell' collection_item name='Cell at level 2' row_index=1 row_span=1 column_span=1 ++++android.view.View ++++android.view.View -++android.widget.GridView role_description='table' collection row_count=1 column_count=1 +++android.widget.GridView role_description='tree grid' collection row_count=1 column_count=1 ++++android.view.View ++++++android.view.View role_description='cell' collection_item name='Cell at level 1' row_span=1 column_span=1 ++++android.view.View
diff --git a/docs/android_studio.md b/docs/android_studio.md index b46f863..6a87f97 100644 --- a/docs/android_studio.md +++ b/docs/android_studio.md
@@ -17,18 +17,18 @@ build/android/gradle/generate_gradle.py --output-directory out/My-Out-Dir --project-dir my-project ``` -By default, only common targets are generated. To customize the list of targets -to generate projects for: +By default, common targets are generated. To add more targets to generate +projects for: ```shell -build/android/gradle/generate_gradle.py --target //chrome/android:chrome_public_apk --target //android_webview/test:android_webview_apk +build/android/gradle/generate_gradle.py --extra-target //chrome/android:chrome_public_apk ``` For those upgrading from Android Studio 2.2 to 2.3: -* Regenerate with `generate_gradle.py`. +* Use `gn clean` and `gn gen` * Clean up in `//third_party/android_tools` with `git clean -ffd`. -* Restart Android Studio with File -> "Invalidate Caches / Restart". +* Remove project from android studio and regenerate with `generate_gradle.py`. For first-time Android Studio users: @@ -50,24 +50,28 @@ * Help -> Find Action -> "Sync Project with Gradle Files" * After `gn clean` you may need to restart Android Studio. -## How it Works +## How It Works Android Studio integration works by generating `build.gradle` files based on GN -targets. Each `android_apk` and `android_library` target produces a separate -Gradle sub-project. +targets. Each valid target produces a separate Gradle sub-project. +Instrumentation tests are combined with their `apk_under_test`. -### Excluded files and .srcjars +### Excluded Files -Gradle supports source directories but not source files. However, some -directories in Chromium are split amonst multiple GN targets. To accommodate -this, the script detects such targets and creates exclude patterns to exclude -files not in the current target. You still see them when editing, but they are -excluded in gradle tasks. -*** +Gradle supports source directories but not source files. However, files in +Chromium are used amongst multiple targets. To accommodate this, the script +detects such targets and creates exclude patterns to exclude files not in the +current target. The editor does not respect these exclude patterns, so a `_all` +pseudo module is added which includes directories from all targets. This allows +imports and refactorings to be searched across all targets. + +### Extracting .srcjars Most generated .java files in GN are stored as `.srcjars`. Android Studio does -not have support for them, and so the generator script builds and extracts them -all to `extracted-srcjars/` subdirectories for each target that contains them. +not support them, and so the generator script builds and extracts them all to +`extracted-srcjars/` subdirectories for each target that contains them. This is +the reason that the `_all` pseudo module may contain multiple copies of +generated files. *** note ** TLDR:** Always re-generate project files when `.srcjars` change (this @@ -123,23 +127,22 @@ * Add the line `org.gradle.daemon=true` to `~/.gradle/gradle.properties`, creating it if necessary. -## Status (as of April 4th, 2017) +## Status (as of April 19th, 2017) ### What works -* Tested with Android Studio v2.3. -* Java editing and gradle compile works. +* Android Studio v2.3. +* Java editing and gradle compile. * Instrumentation tests included as androidTest. * Symlinks to existing .so files in jniLibs (doesn't generate them). * Editing resource xml files. * Java debugging (see [here](/docs/android_debugging_instructions.md#Android-Studio)). +* Import resolution and refactoring across all modules. ### What doesn't work (yet) ([crbug](https://bugs.chromium.org/p/chromium/issues/detail?id=620034)) -* Proper file resolution and imports for overlapping modules. -* Make gradle aware of assets. +* Gradle being aware of assets. * Layout editor. -* Add a mode in which gradle is responsible for generating `R.java`. * Add support for native code editing. * Make the "Make Project" button work correctly.
diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn index 0046866f..efc9c79 100644 --- a/extensions/BUILD.gn +++ b/extensions/BUILD.gn
@@ -51,15 +51,9 @@ ] deps = [ - "//chrome/browser/media/router:mojo_bindings__generator", - "//chrome/browser/media/router:mojo_bindings_common__generator", "//device/serial:serial_mojo__generator", "//extensions/common:mojo__generator", "//extensions/common/api:mojom__generator", - "//mojo/common:common_custom_types__generator", - "//net/interfaces:interfaces__generator", - "//url/mojo:url_mojom_gurl__generator", - "//url/mojo:url_mojom_origin__generator", ] }
diff --git a/extensions/OWNERS b/extensions/OWNERS index 07a9b00..6abeb181 100644 --- a/extensions/OWNERS +++ b/extensions/OWNERS
@@ -16,7 +16,6 @@ reillyg@chromium.org finnur@chromium.org lazyboy@chromium.org -mek@chromium.org rockot@chromium.org -# COMPONENT: Platform>Extensions \ No newline at end of file +# COMPONENT: Platform>Extensions
diff --git a/extensions/browser/content_verifier.cc b/extensions/browser/content_verifier.cc index 9fd01231..a2e21d1 100644 --- a/extensions/browser/content_verifier.cc +++ b/extensions/browser/content_verifier.cc
@@ -125,7 +125,7 @@ return new ContentVerifyJob( new ContentHashReader(extension_id, data->version, extension_root, normalized_path, delegate_->GetPublicKey()), - base::Bind(&ContentVerifier::VerifyFailed, this, extension_id)); + base::BindOnce(&ContentVerifier::VerifyFailed, this, extension_id)); } void ContentVerifier::VerifyFailed(const std::string& extension_id, @@ -207,9 +207,10 @@ fetcher_->ExtensionUnloaded(extension); } -void ContentVerifier::OnFetchCompleteHelper(const std::string& extension_id, - bool shouldVerifyAnyPathsResult) { - if (shouldVerifyAnyPathsResult) +void ContentVerifier::OnFetchCompleteHelper( + const std::string& extension_id, + bool should_verify_any_paths_result) { + if (should_verify_any_paths_result) delegate_->VerifyFailed(extension_id, ContentVerifyJob::MISSING_ALL_HASHES); }
diff --git a/extensions/browser/content_verifier.h b/extensions/browser/content_verifier.h index 6d31f69..bd22081 100644 --- a/extensions/browser/content_verifier.h +++ b/extensions/browser/content_verifier.h
@@ -86,7 +86,7 @@ const std::set<base::FilePath>& hash_mismatch_paths); void OnFetchCompleteHelper(const std::string& extension_id, - bool shouldVerifyAnyPathsResult); + bool should_verify_any_paths_result); // Returns true if any of the paths in |relative_paths| *should* have their // contents verified. (Some files get transcoded during the install process,
diff --git a/extensions/browser/content_verify_job.cc b/extensions/browser/content_verify_job.cc index 211f5b5..237dab6 100644 --- a/extensions/browser/content_verify_job.cc +++ b/extensions/browser/content_verify_job.cc
@@ -41,14 +41,14 @@ } // namespace ContentVerifyJob::ContentVerifyJob(ContentHashReader* hash_reader, - const FailureCallback& failure_callback) + FailureCallback failure_callback) : done_reading_(false), hashes_ready_(false), total_bytes_read_(0), current_block_(0), current_hash_byte_count_(0), hash_reader_(hash_reader), - failure_callback_(failure_callback), + failure_callback_(std::move(failure_callback)), failed_(false) { // It's ok for this object to be constructed on a different thread from where // it's used. @@ -227,8 +227,7 @@ VLOG(1) << "job failed for " << hash_reader_->extension_id() << " " << hash_reader_->relative_path().MaybeAsASCII() << " reason:" << reason; - failure_callback_.Run(reason); - failure_callback_.Reset(); + std::move(failure_callback_).Run(reason); } if (g_test_observer) { g_test_observer->JobFinished(hash_reader_->extension_id(),
diff --git a/extensions/browser/content_verify_job.h b/extensions/browser/content_verify_job.h index cb7b7e0a..9b72f807 100644 --- a/extensions/browser/content_verify_job.h +++ b/extensions/browser/content_verify_job.h
@@ -49,11 +49,11 @@ FAILURE_REASON_MAX }; - typedef base::Callback<void(FailureReason)> FailureCallback; + using FailureCallback = base::OnceCallback<void(FailureReason)>; // The |failure_callback| will be called at most once if there was a failure. ContentVerifyJob(ContentHashReader* hash_reader, - const FailureCallback& failure_callback); + FailureCallback failure_callback); // This begins the process of getting expected hashes, so it should be called // as early as possible.
diff --git a/extensions/common/api/networking_private.idl b/extensions/common/api/networking_private.idl index 3cd81883..5b9d9bd 100644 --- a/extensions/common/api/networking_private.idl +++ b/extensions/common/api/networking_private.idl
@@ -58,7 +58,7 @@ }; enum NetworkType { - All, Cellular, Ethernet, VPN, Wireless, WiFi, WiMAX + All, Cellular, Ethernet, Tether, VPN, Wireless, WiFi, WiMAX }; enum ProxySettingsType { @@ -202,14 +202,14 @@ DOMString? CommonName; DOMString? Locality; DOMString? Organization; - DOMString? OrganizationalUnit; + DOMString? OrganizationalUnit; }; dictionary ManagedIssuerSubjectPattern { ManagedDOMString? CommonName; ManagedDOMString? Locality; ManagedDOMString? Organization; - ManagedDOMString? OrganizationalUnit; + ManagedDOMString? OrganizationalUnit; }; dictionary CertificatePattern { @@ -574,6 +574,18 @@ DOMString Authentication; }; + dictionary TetherProperties { + long? BatteryPercentage; + DOMString? Carrier; + long? SignalStrength; + }; + + dictionary ManagedTetherProperties { + ManagedLong? BatteryPercentage; + ManagedDOMString? Carrier; + ManagedLong? SignalStrength; + }; + dictionary VPNProperties { boolean? AutoConnect; DOMString? Host; @@ -689,6 +701,7 @@ IPConfigProperties? StaticIPConfig; IPConfigProperties? SavedIPConfig; DOMString? Source; + TetherProperties? Tether; NetworkType Type; VPNProperties? VPN; WiFiProperties? WiFi; @@ -713,6 +726,7 @@ ManagedIPConfigProperties? StaticIPConfig; IPConfigProperties? SavedIPConfig; DOMString? Source; + ManagedTetherProperties? Tether; NetworkType Type; ManagedVPNProperties? VPN; ManagedWiFiProperties? WiFi; @@ -729,6 +743,7 @@ DOMString? Name; long? Priority; DOMString? Source; + TetherProperties? Tether; NetworkType Type; VPNStateProperties? VPN; WiFiStateProperties? WiFi;
diff --git a/extensions/renderer/BUILD.gn b/extensions/renderer/BUILD.gn index b0496783..6048103 100644 --- a/extensions/renderer/BUILD.gn +++ b/extensions/renderer/BUILD.gn
@@ -297,6 +297,8 @@ sources = [ "activity_log_converter_strategy_unittest.cc", "api/mojo_private/mojo_private_unittest.cc", + "api_binding_hooks_test_delegate.cc", + "api_binding_hooks_test_delegate.h", "api_binding_js_util_unittest.cc", "api_binding_test.cc", "api_binding_test.h",
diff --git a/extensions/renderer/api_binding.cc b/extensions/renderer/api_binding.cc index 8b36c2d..fc4da0c 100644 --- a/extensions/renderer/api_binding.cc +++ b/extensions/renderer/api_binding.cc
@@ -311,6 +311,14 @@ CHECK(success.FromJust()); } } + for (const auto& event : events_) { + if (!is_available.Run(event->full_name)) { + v8::Maybe<bool> success = object->Delete( + context, gin::StringToSymbol(isolate, event->exposed_name)); + CHECK(success.IsJust()); + CHECK(success.FromJust()); + } + } return object; }
diff --git a/extensions/renderer/api_binding_hooks.cc b/extensions/renderer/api_binding_hooks.cc index d5d608f..2da9784d 100644 --- a/extensions/renderer/api_binding_hooks.cc +++ b/extensions/renderer/api_binding_hooks.cc
@@ -207,12 +207,6 @@ : api_name_(api_name), run_js_(run_js) {} APIBindingHooks::~APIBindingHooks() {} -void APIBindingHooks::RegisterHandleRequest(const std::string& method_name, - const HandleRequestHook& hook) { - DCHECK(!hooks_used_) << "Hooks must be registered before the first use!"; - request_hooks_[method_name] = hook; -} - APIBindingHooks::RequestResult APIBindingHooks::RunHooks( const std::string& method_name, v8::Local<v8::Context> context, @@ -220,15 +214,11 @@ std::vector<v8::Local<v8::Value>>* arguments, const APITypeReferenceMap& type_refs) { // Easy case: a native custom hook. - auto request_hooks_iter = request_hooks_.find(method_name); - if (request_hooks_iter != request_hooks_.end()) { - RequestResult result = - request_hooks_iter->second.Run( - signature, context, arguments, type_refs); - // Right now, it doesn't make sense to register a request handler that - // doesn't handle the request. - DCHECK_NE(RequestResult::NOT_HANDLED, result.code); - return result; + if (delegate_) { + RequestResult result = delegate_->HandleRequest( + method_name, signature, context, arguments, type_refs); + if (result.code != RequestResult::NOT_HANDLED) + return result; } // Harder case: looking up a custom hook registered on the context (since
diff --git a/extensions/renderer/api_binding_hooks.h b/extensions/renderer/api_binding_hooks.h index 1c667e2a..54c3bfc 100644 --- a/extensions/renderer/api_binding_hooks.h +++ b/extensions/renderer/api_binding_hooks.h
@@ -5,22 +5,16 @@ #ifndef EXTENSIONS_RENDERER_API_BINDING_HOOKS_H_ #define EXTENSIONS_RENDERER_API_BINDING_HOOKS_H_ -#include <map> #include <memory> #include <string> -#include "base/callback.h" #include "base/macros.h" #include "extensions/renderer/api_binding_types.h" -#include "extensions/renderer/argument_spec.h" #include "v8/include/v8.h" -namespace gin { -class Arguments; -} - namespace extensions { class APIBindingHooksDelegate; +class APITypeReferenceMap; class APISignature; // A class to register custom hooks for given API calls that need different @@ -51,29 +45,10 @@ v8::Local<v8::Value> return_value; // Only valid if code == HANDLED. }; - // The callback to handle an API method. We pass in the expected signature - // (so the caller can verify arguments, optionally after modifying/"massaging" - // them) and the passed arguments. The handler is responsible for returning, - // which depending on the API could mean either returning synchronously - // through gin::Arguments::Return or asynchronously through a passed callback. - // TODO(devlin): As we continue expanding the hooks interface, we should allow - // handlers to register a request so that they don't have to maintain a - // reference to the callback themselves. - using HandleRequestHook = - base::Callback<RequestResult(const APISignature*, - v8::Local<v8::Context> context, - std::vector<v8::Local<v8::Value>>*, - const APITypeReferenceMap&)>; - APIBindingHooks(const std::string& api_name, const binding::RunJSFunctionSync& run_js); ~APIBindingHooks(); - // Register a custom binding to handle requests. - // TODO(devlin): Remove this in favor of a method on APIBindingHooksDelegate. - void RegisterHandleRequest(const std::string& method_name, - const HandleRequestHook& hook); - // Looks for any custom hooks associated with the given request, and, if any // are found, runs them. Returns the result of running the hooks, if any. RequestResult RunHooks(const std::string& method_name, @@ -104,12 +79,6 @@ v8::Local<v8::Context> context, std::vector<v8::Local<v8::Value>>* arguments); - // Whether we've tried to use any hooks associated with this object. - bool hooks_used_ = false; - - // All registered request handlers. - std::map<std::string, HandleRequestHook> request_hooks_; - // The name of the associated API. std::string api_name_;
diff --git a/extensions/renderer/api_binding_hooks_delegate.cc b/extensions/renderer/api_binding_hooks_delegate.cc index 6516785..03b1413 100644 --- a/extensions/renderer/api_binding_hooks_delegate.cc +++ b/extensions/renderer/api_binding_hooks_delegate.cc
@@ -16,4 +16,14 @@ return false; } +APIBindingHooks::RequestResult APIBindingHooksDelegate::HandleRequest( + const std::string& method_name, + const APISignature* signature, + v8::Local<v8::Context> context, + std::vector<v8::Local<v8::Value>>* arguments, + const APITypeReferenceMap& refs) { + return APIBindingHooks::RequestResult( + APIBindingHooks::RequestResult::NOT_HANDLED); +} + } // namespace extensions
diff --git a/extensions/renderer/api_binding_hooks_delegate.h b/extensions/renderer/api_binding_hooks_delegate.h index 2fa84b8f..51f3e77b 100644 --- a/extensions/renderer/api_binding_hooks_delegate.h +++ b/extensions/renderer/api_binding_hooks_delegate.h
@@ -5,6 +5,7 @@ #ifndef EXTENSIONS_RENDERER_API_BINDING_HOOKS_DELEGATE_H_ #define EXTENSIONS_RENDERER_API_BINDING_HOOKS_DELEGATE_H_ +#include "extensions/renderer/api_binding_hooks.h" #include "extensions/renderer/api_binding_types.h" #include "v8/include/v8.h" @@ -23,7 +24,13 @@ const std::string& event_name, v8::Local<v8::Value>* event_out); - // TODO(devlin): Add a virtual HandleRequest() method. + // Allows custom implementations to handle a given request. + virtual APIBindingHooks::RequestResult HandleRequest( + const std::string& method_name, + const APISignature* signature, + v8::Local<v8::Context> context, + std::vector<v8::Local<v8::Value>>* arguments, + const APITypeReferenceMap& refs); }; } // namespace extensions
diff --git a/extensions/renderer/api_binding_hooks_test_delegate.cc b/extensions/renderer/api_binding_hooks_test_delegate.cc new file mode 100644 index 0000000..42cd3e7 --- /dev/null +++ b/extensions/renderer/api_binding_hooks_test_delegate.cc
@@ -0,0 +1,48 @@ +// 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 "extensions/renderer/api_binding_hooks_test_delegate.h" + +namespace extensions { + +APIBindingHooksTestDelegate::APIBindingHooksTestDelegate() {} +APIBindingHooksTestDelegate::~APIBindingHooksTestDelegate() {} + +bool APIBindingHooksTestDelegate::CreateCustomEvent( + v8::Local<v8::Context> context, + const binding::RunJSFunctionSync& run_js_sync, + const std::string& event_name, + v8::Local<v8::Value>* event_out) { + if (!custom_event_.is_null()) { + *event_out = custom_event_.Run(context, run_js_sync, event_name); + return true; + } + return false; +} + +void APIBindingHooksTestDelegate::AddHandler(base::StringPiece name, + const RequestHandler& handler) { + request_handlers_[name.as_string()] = handler; +} + +void APIBindingHooksTestDelegate::SetCustomEvent( + const CustomEventFactory& custom_event) { + custom_event_ = custom_event; +} + +APIBindingHooks::RequestResult APIBindingHooksTestDelegate::HandleRequest( + const std::string& method_name, + const APISignature* signature, + v8::Local<v8::Context> context, + std::vector<v8::Local<v8::Value>>* arguments, + const APITypeReferenceMap& refs) { + auto iter = request_handlers_.find(method_name); + if (iter == request_handlers_.end()) { + return APIBindingHooks::RequestResult( + APIBindingHooks::RequestResult::NOT_HANDLED); + } + return iter->second.Run(signature, context, arguments, refs); +} + +} // namespace extensions
diff --git a/extensions/renderer/api_binding_hooks_test_delegate.h b/extensions/renderer/api_binding_hooks_test_delegate.h new file mode 100644 index 0000000..ee17e5ea --- /dev/null +++ b/extensions/renderer/api_binding_hooks_test_delegate.h
@@ -0,0 +1,64 @@ +// 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 EXTENSIONS_RENDERER_API_BINDING_HOOKS_TEST_DELEGATE_H_ +#define EXTENSIONS_RENDERER_API_BINDING_HOOKS_TEST_DELEGATE_H_ + +#include <map> +#include <string> + +#include "base/callback.h" +#include "base/macros.h" +#include "base/strings/string_piece.h" +#include "extensions/renderer/api_binding_hooks_delegate.h" +#include "extensions/renderer/api_binding_types.h" +#include "v8/include/v8.h" + +namespace extensions { + +// A test class to simply adding custom events or handlers for API hooks. +class APIBindingHooksTestDelegate : public APIBindingHooksDelegate { + public: + APIBindingHooksTestDelegate(); + ~APIBindingHooksTestDelegate() override; + + using CustomEventFactory = base::Callback<v8::Local<v8::Value>( + v8::Local<v8::Context>, + const binding::RunJSFunctionSync& run_js, + const std::string& event_name)>; + + using RequestHandler = base::Callback<APIBindingHooks::RequestResult( + const APISignature*, + v8::Local<v8::Context> context, + std::vector<v8::Local<v8::Value>>*, + const APITypeReferenceMap&)>; + + // Adds a custom |handler| for the method with the given |name|. + void AddHandler(base::StringPiece name, const RequestHandler& handler); + + // Creates events with the given factory. + void SetCustomEvent(const CustomEventFactory& custom_event); + + // APIBindingHooksDelegate: + bool CreateCustomEvent(v8::Local<v8::Context> context, + const binding::RunJSFunctionSync& run_js_sync, + const std::string& event_name, + v8::Local<v8::Value>* event_out) override; + APIBindingHooks::RequestResult HandleRequest( + const std::string& method_name, + const APISignature* signature, + v8::Local<v8::Context> context, + std::vector<v8::Local<v8::Value>>* arguments, + const APITypeReferenceMap& refs) override; + + private: + std::map<std::string, RequestHandler> request_handlers_; + CustomEventFactory custom_event_; + + DISALLOW_COPY_AND_ASSIGN(APIBindingHooksTestDelegate); +}; + +} // namespace extensions + +#endif // EXTENSIONS_RENDERER_API_BINDING_HOOKS_TEST_DELEGATE_H_
diff --git a/extensions/renderer/api_binding_unittest.cc b/extensions/renderer/api_binding_unittest.cc index c8d7d22..d5cbea7 100644 --- a/extensions/renderer/api_binding_unittest.cc +++ b/extensions/renderer/api_binding_unittest.cc
@@ -9,6 +9,7 @@ #include "base/values.h" #include "extensions/renderer/api_binding.h" #include "extensions/renderer/api_binding_hooks.h" +#include "extensions/renderer/api_binding_hooks_test_delegate.h" #include "extensions/renderer/api_binding_test.h" #include "extensions/renderer/api_binding_test_util.h" #include "extensions/renderer/api_event_handler.h" @@ -143,16 +144,23 @@ request_handler_ = base::MakeUnique<APIRequestHandler>( base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), base::Bind(&RunFunctionOnGlobalAndIgnoreResult), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), + APILastError::AddConsoleError())); } void TearDown() override { + DisposeAllContexts(); request_handler_.reset(); event_handler_.reset(); binding_.reset(); APIBindingTest::TearDown(); } + void OnWillDisposeContext(v8::Local<v8::Context> context) override { + event_handler_->InvalidateContext(context); + request_handler_->InvalidateContext(context); + } + void SetFunctions(const char* functions) { binding_functions_ = ListValueFromString(functions); ASSERT_TRUE(binding_functions_); @@ -178,6 +186,12 @@ ASSERT_TRUE(binding_hooks_); } + void SetHooksDelegate( + std::unique_ptr<APIBindingHooksDelegate> hooks_delegate) { + binding_hooks_delegate_ = std::move(hooks_delegate); + ASSERT_TRUE(binding_hooks_delegate_); + } + void SetCreateCustomType(const APIBinding::CreateCustomType& callback) { create_custom_type_ = callback; } @@ -187,6 +201,8 @@ binding_hooks_ = base::MakeUnique<APIBindingHooks>( kBindingName, binding::RunJSFunctionSync()); } + if (binding_hooks_delegate_) + binding_hooks_->SetDelegate(std::move(binding_hooks_delegate_)); event_handler_ = base::MakeUnique<APIEventHandler>( base::Bind(&RunFunctionOnGlobalAndIgnoreResult), base::Bind(&OnEventListenersChanged)); @@ -253,6 +269,7 @@ std::unique_ptr<base::ListValue> binding_types_; std::unique_ptr<base::DictionaryValue> binding_properties_; std::unique_ptr<APIBindingHooks> binding_hooks_; + std::unique_ptr<APIBindingHooksDelegate> binding_hooks_delegate_; APIBinding::CreateCustomType create_custom_type_; DISALLOW_COPY_AND_ASSIGN(APIBindingUnittest); @@ -496,7 +513,7 @@ } TEST_F(APIBindingUnittest, RestrictedAPIs) { - const char kRestrictedFunctions[] = + const char kFunctions[] = "[{" " 'name': 'allowedOne'," " 'parameters': []" @@ -510,18 +527,22 @@ " 'name': 'restrictedTwo'," " 'parameters': []" "}]"; - SetFunctions(kRestrictedFunctions); + SetFunctions(kFunctions); + const char kEvents[] = + "[{'name': 'allowedEvent'}, {'name': 'restrictedEvent'}]"; + SetEvents(kEvents); InitializeBinding(); v8::HandleScope handle_scope(isolate()); v8::Local<v8::Context> context = MainContext(); auto is_available = [](const std::string& name) { - std::set<std::string> functions = {"test.allowedOne", "test.allowedTwo", - "test.restrictedOne", - "test.restrictedTwo"}; - EXPECT_TRUE(functions.count(name)); - return name == "test.allowedOne" || name == "test.allowedTwo"; + std::set<std::string> allowed = {"test.allowedOne", "test.allowedTwo", + "test.allowedEvent"}; + std::set<std::string> restricted = { + "test.restrictedOne", "test.restrictedTwo", "test.restrictedEvent"}; + EXPECT_TRUE(allowed.count(name) || restricted.count(name)) << name; + return allowed.count(name) != 0; }; v8::Local<v8::Object> binding_object = @@ -536,8 +557,10 @@ EXPECT_TRUE(is_defined("allowedOne")); EXPECT_TRUE(is_defined("allowedTwo")); + EXPECT_TRUE(is_defined("allowedEvent")); EXPECT_FALSE(is_defined("restrictedOne")); EXPECT_FALSE(is_defined("restrictedTwo")); + EXPECT_FALSE(is_defined("restrictedEvent")); } // Tests that events specified in the API are created as properties of the API @@ -691,8 +714,7 @@ SetFunctions(kFunctions); // Register a hook for the test.oneString method. - auto hooks = base::MakeUnique<APIBindingHooks>( - kBindingName, base::Bind(&RunFunctionOnGlobalAndReturnHandle)); + auto hooks = base::MakeUnique<APIBindingHooksTestDelegate>(); bool did_call = false; auto hook = [](bool* did_call, const APISignature* signature, v8::Local<v8::Context> context, @@ -708,8 +730,8 @@ EXPECT_EQ("foo", gin::V8ToString(arguments->at(0))); return result; }; - hooks->RegisterHandleRequest("test.oneString", base::Bind(hook, &did_call)); - SetHooks(std::move(hooks)); + hooks->AddHandler("test.oneString", base::Bind(hook, &did_call)); + SetHooksDelegate(std::move(hooks)); InitializeBinding(); @@ -990,8 +1012,7 @@ v8::Local<v8::Context> context = MainContext(); // Register a hook for the test.oneString method. - auto hooks = base::MakeUnique<APIBindingHooks>( - kBindingName, base::Bind(&RunFunctionOnGlobalAndReturnHandle)); + auto hooks = base::MakeUnique<APIBindingHooksTestDelegate>(); bool did_call = false; auto hook = [](bool* did_call, const APISignature* signature, v8::Local<v8::Context> context, @@ -1015,9 +1036,9 @@ gin::StringToV8(context->GetIsolate(), arg_value + " pong"); return result; }; - hooks->RegisterHandleRequest("test.oneString", base::Bind(hook, &did_call)); + hooks->AddHandler("test.oneString", base::Bind(hook, &did_call)); - SetHooks(std::move(hooks)); + SetHooksDelegate(std::move(hooks)); SetFunctions(kFunctions); InitializeBinding();
diff --git a/extensions/renderer/api_bindings_system_unittest.cc b/extensions/renderer/api_bindings_system_unittest.cc index 20e85319..84f7d91 100644 --- a/extensions/renderer/api_bindings_system_unittest.cc +++ b/extensions/renderer/api_bindings_system_unittest.cc
@@ -14,7 +14,7 @@ #include "extensions/common/extension_api.h" #include "extensions/renderer/api_binding.h" #include "extensions/renderer/api_binding_hooks.h" -#include "extensions/renderer/api_binding_hooks_delegate.h" +#include "extensions/renderer/api_binding_hooks_test_delegate.h" #include "extensions/renderer/api_binding_test_util.h" #include "extensions/renderer/api_binding_types.h" #include "extensions/renderer/api_bindings_system_unittest.h" @@ -94,50 +94,6 @@ return true; } -class TestHooks : public APIBindingHooksDelegate { - public: - TestHooks() {} - ~TestHooks() override {} - - using CustomEventFactory = base::Callback<v8::Local<v8::Value>( - v8::Local<v8::Context>, - const binding::RunJSFunctionSync& run_js, - const std::string& event_name)>; - - bool CreateCustomEvent(v8::Local<v8::Context> context, - const binding::RunJSFunctionSync& run_js_sync, - const std::string& event_name, - v8::Local<v8::Value>* event_out) override { - if (!custom_event_.is_null()) { - *event_out = custom_event_.Run(context, run_js_sync, event_name); - return true; - } - return false; - } - - void RegisterHooks(APIBindingHooks* hooks) { - for (const auto& request_handler : request_handlers_) { - hooks->RegisterHandleRequest(request_handler.first, - request_handler.second); - } - } - - void AddHandler(base::StringPiece name, - const APIBindingHooks::HandleRequestHook& hook) { - request_handlers_[name.as_string()] = hook; - } - - void SetCustomEvent(const CustomEventFactory& custom_event) { - custom_event_ = custom_event; - } - - private: - std::map<std::string, APIBindingHooks::HandleRequestHook> request_handlers_; - CustomEventFactory custom_event_; - - DISALLOW_COPY_AND_ASSIGN(TestHooks); -}; - } // namespace APIBindingsSystemTest::APIBindingsSystemTest() {} @@ -162,7 +118,8 @@ base::Bind(&APIBindingsSystemTest::OnEventListenersChanged, base::Unretained(this)), APILastError(base::Bind(&APIBindingsSystemTest::GetLastErrorParent, - base::Unretained(this)))); + base::Unretained(this)), + APILastError::AddConsoleError())); } void APIBindingsSystemTest::TearDown() { @@ -369,12 +326,11 @@ return result; }; - auto test_hooks = base::MakeUnique<TestHooks>(); + auto test_hooks = base::MakeUnique<APIBindingHooksTestDelegate>(); test_hooks->AddHandler("alpha.functionWithCallback", base::Bind(hook, &did_call)); APIBindingHooks* binding_hooks = bindings_system()->GetHooksForAPI(kAlphaAPIName); - test_hooks->RegisterHooks(binding_hooks); binding_hooks->SetDelegate(std::move(test_hooks)); v8::Local<v8::Object> alpha_api = bindings_system()->CreateAPIInstance( @@ -486,7 +442,7 @@ return ret.As<v8::Value>(); }; - auto test_hooks = base::MakeUnique<TestHooks>(); + auto test_hooks = base::MakeUnique<APIBindingHooksTestDelegate>(); test_hooks->SetCustomEvent(base::Bind(create_custom_event)); APIBindingHooks* binding_hooks = bindings_system()->GetHooksForAPI(kAlphaAPIName);
diff --git a/extensions/renderer/api_last_error.cc b/extensions/renderer/api_last_error.cc index 4073d27..ece0de1 100644 --- a/extensions/renderer/api_last_error.cc +++ b/extensions/renderer/api_last_error.cc
@@ -53,8 +53,9 @@ } // namespace -APILastError::APILastError(const GetParent& get_parent) - : get_parent_(get_parent) {} +APILastError::APILastError(const GetParent& get_parent, + const AddConsoleError& add_console_error) + : get_parent_(get_parent), add_console_error_(add_console_error) {} APILastError::APILastError(APILastError&& other) = default; APILastError::~APILastError() = default; @@ -133,8 +134,8 @@ } if (report_if_unchecked && !last_error->accessed()) { - isolate->ThrowException( - v8::Exception::Error(gin::StringToV8(isolate, last_error->error()))); + add_console_error_.Run( + context, "Unchecked runtime.lastError: " + last_error->error()); } // See comment in SetError().
diff --git a/extensions/renderer/api_last_error.h b/extensions/renderer/api_last_error.h index 95126fe62..686adcc 100644 --- a/extensions/renderer/api_last_error.h +++ b/extensions/renderer/api_last_error.h
@@ -21,8 +21,12 @@ // given context. using GetParent = base::Callback<v8::Local<v8::Object>(v8::Local<v8::Context>)>; + // Adds an error message to the context's console. + using AddConsoleError = + base::Callback<void(v8::Local<v8::Context>, const std::string& error)>; - explicit APILastError(const GetParent& get_parent); + APILastError(const GetParent& get_parent, + const AddConsoleError& add_console_error); APILastError(APILastError&& other); ~APILastError(); @@ -39,6 +43,8 @@ private: GetParent get_parent_; + AddConsoleError add_console_error_; + DISALLOW_COPY_AND_ASSIGN(APILastError); };
diff --git a/extensions/renderer/api_last_error_unittest.cc b/extensions/renderer/api_last_error_unittest.cc index 9556dfa..0ec57e8 100644 --- a/extensions/renderer/api_last_error_unittest.cc +++ b/extensions/renderer/api_last_error_unittest.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/optional.h" #include "extensions/renderer/api_binding_test.h" #include "extensions/renderer/api_binding_test_util.h" #include "gin/converter.h" @@ -15,6 +16,9 @@ namespace { +void DoNothingWithError(v8::Local<v8::Context> context, + const std::string& error) {} + std::string GetLastError(v8::Local<v8::Object> parent, v8::Local<v8::Context> context) { v8::Local<v8::Value> last_error = @@ -50,7 +54,8 @@ v8::Local<v8::Object> parent_object = v8::Object::New(isolate()); ParentList parents = {{context, parent_object}}; - APILastError last_error(base::Bind(&GetParent, parents)); + APILastError last_error(base::Bind(&GetParent, parents), + base::Bind(&DoNothingWithError)); EXPECT_EQ("undefined", GetLastError(parent_object, context)); // Check that the key isn't present on the object (as opposed to simply being @@ -75,27 +80,36 @@ v8::Local<v8::Context> context = MainContext(); v8::Local<v8::Object> parent_object = v8::Object::New(isolate()); + base::Optional<std::string> console_error; + auto log_error = [](base::Optional<std::string>* console_error, + v8::Local<v8::Context> context, + const std::string& error) { *console_error = error; }; + ParentList parents = {{context, parent_object}}; - APILastError last_error(base::Bind(&GetParent, parents)); + APILastError last_error(base::Bind(&GetParent, parents), + base::Bind(log_error, &console_error)); { v8::TryCatch try_catch(isolate()); last_error.SetError(context, "foo"); // GetLastError() will count as accessing the error property, so we - // shouldn't throw an exception. + // shouldn't log an error. EXPECT_EQ("\"foo\"", GetLastError(parent_object, context)); last_error.ClearError(context, true); + EXPECT_FALSE(console_error); EXPECT_FALSE(try_catch.HasCaught()); } { v8::TryCatch try_catch(isolate()); - // This time, we should throw an exception. + // This time, we should log an error. last_error.SetError(context, "A last error"); last_error.ClearError(context, true); - ASSERT_TRUE(try_catch.HasCaught()); - EXPECT_EQ("Uncaught Error: A last error", - gin::V8ToString(try_catch.Message()->Get())); + ASSERT_TRUE(console_error); + EXPECT_EQ("Unchecked runtime.lastError: A last error", *console_error); + // We shouldn't have thrown an exception in order to prevent disrupting + // JS execution. + EXPECT_FALSE(try_catch.HasCaught()); } } @@ -107,7 +121,8 @@ v8::Local<v8::Object> parent_object = v8::Object::New(isolate()); ParentList parents = {{context, parent_object}}; - APILastError last_error(base::Bind(&GetParent, parents)); + APILastError last_error(base::Bind(&GetParent, parents), + base::Bind(&DoNothingWithError)); auto checked_set = [context](v8::Local<v8::Object> object, base::StringPiece key, @@ -143,7 +158,8 @@ v8::Local<v8::Object> parent_a = v8::Object::New(isolate()); v8::Local<v8::Object> parent_b = v8::Object::New(isolate()); ParentList parents = {{context_a, parent_a}, {context_b, parent_b}}; - APILastError last_error(base::Bind(&GetParent, parents)); + APILastError last_error(base::Bind(&GetParent, parents), + base::Bind(&DoNothingWithError)); last_error.SetError(context_a, "Last error a"); EXPECT_EQ("\"Last error a\"", GetLastError(parent_a, context_a));
diff --git a/extensions/renderer/api_request_handler_unittest.cc b/extensions/renderer/api_request_handler_unittest.cc index cbf9e537..f40527b 100644 --- a/extensions/renderer/api_request_handler_unittest.cc +++ b/extensions/renderer/api_request_handler_unittest.cc
@@ -67,7 +67,7 @@ APIRequestHandler request_handler( base::Bind(&DoNothingWithRequest), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); EXPECT_TRUE(request_handler.GetPendingRequestIdsForTesting().empty()); @@ -102,7 +102,7 @@ APIRequestHandler request_handler( base::Bind(&DoNothingWithRequest), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); v8::Local<v8::Function> function = FunctionFromString(context, kEchoArgs); ASSERT_FALSE(function.IsEmpty()); @@ -138,7 +138,7 @@ APIRequestHandler request_handler( base::Bind(&DoNothingWithRequest), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); // By having both different arguments and different behaviors in the // callbacks, we can easily verify that the right function is called in the @@ -190,7 +190,7 @@ APIRequestHandler request_handler( base::Bind(&DoNothingWithRequest), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); v8::Local<v8::Function> custom_callback = FunctionFromString(context, kEchoArgs); @@ -237,7 +237,7 @@ APIRequestHandler request_handler( base::Bind(&DoNothingWithRequest), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); v8::Local<v8::Function> custom_callback = FunctionFromString(context, kEchoArgs); @@ -275,7 +275,7 @@ APIRequestHandler request_handler( base::Bind(&DoNothingWithRequest), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); auto callback = [](base::Optional<bool>* ran_with_user_gesture) { *ran_with_user_gesture = @@ -339,7 +339,7 @@ APIRequestHandler request_handler( base::Bind(on_request, &thread), base::Bind(&APIRequestHandlerTest::RunJS, base::Unretained(this)), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), APILastError::AddConsoleError())); request_handler.StartRequest( context, kMethod, base::MakeUnique<base::ListValue>(),
diff --git a/extensions/renderer/console.cc b/extensions/renderer/console.cc index 245e14f9..ab3e5cc 100644 --- a/extensions/renderer/console.cc +++ b/extensions/renderer/console.cc
@@ -54,31 +54,39 @@ ScriptContext* script_context = ScriptContextSet::GetContextByV8Context(context); // TODO(devlin): Consider (D)CHECK(script_context) - content::RenderFrame* render_frame = - script_context ? script_context->GetRenderFrame() : nullptr; const auto level = static_cast<content::ConsoleMessageLevel>( info.Data().As<v8::Int32>()->Value()); - AddMessage(render_frame, level, message); + AddMessage(script_context, level, message); } gin::WrapperInfo kWrapperInfo = {gin::kEmbedderNativeGin}; } // namespace -void Fatal(content::RenderFrame* render_frame, const std::string& message) { - AddMessage(render_frame, content::CONSOLE_MESSAGE_LEVEL_ERROR, message); +void Fatal(ScriptContext* context, const std::string& message) { + AddMessage(context, content::CONSOLE_MESSAGE_LEVEL_ERROR, message); CheckWithMinidump(message); } -void AddMessage(content::RenderFrame* render_frame, +void AddMessage(ScriptContext* script_context, content::ConsoleMessageLevel level, const std::string& message) { + if (!script_context) { + LOG(WARNING) << "Could not log \"" << message + << "\": no ScriptContext found"; + return; + } + content::RenderFrame* render_frame = script_context->GetRenderFrame(); if (!render_frame) { + // TODO(lazyboy/devlin): This can happen when this is the context for a + // service worker. blink::WebEmbeddedWorker has an AddMessageToConsole + // method that we could theoretically hook into. LOG(WARNING) << "Could not log \"" << message << "\": no render frame found"; - } else { - render_frame->AddMessageToConsole(level, message); + return; } + + render_frame->AddMessageToConsole(level, message); } v8::Local<v8::Object> AsV8Object(v8::Isolate* isolate) {
diff --git a/extensions/renderer/console.h b/extensions/renderer/console.h index 21eb56c..52402b0 100644 --- a/extensions/renderer/console.h +++ b/extensions/renderer/console.h
@@ -10,23 +10,20 @@ #include "content/public/common/console_message_level.h" #include "v8/include/v8.h" -namespace content { -class RenderFrame; -} - namespace extensions { +class ScriptContext; -// Utility for logging messages to RenderFrames. +// Utility for logging console messages. namespace console { -// Adds |message| to the console of |render_frame|. If |render_frame| is null, -// LOG()s the message instead. -void AddMessage(content::RenderFrame* render_frame, +// Adds |message| to the console of of the |script_context|. If |script_context| +// is null, LOG()s the message instead. +void AddMessage(ScriptContext* script_context, content::ConsoleMessageLevel level, const std::string& message); // Logs an Error then crashes the current process. -void Fatal(content::RenderFrame* render_frame, const std::string& message); +void Fatal(ScriptContext* context, const std::string& message); // Returns a new v8::Object with each standard log method (Debug/Log/Warn/Error) // bound to respective debug/log/warn/error methods. This is a direct drop-in
diff --git a/extensions/renderer/declarative_event_unittest.cc b/extensions/renderer/declarative_event_unittest.cc index 63784c55..4b33591d 100644 --- a/extensions/renderer/declarative_event_unittest.cc +++ b/extensions/renderer/declarative_event_unittest.cc
@@ -98,7 +98,8 @@ request_handler_ = base::MakeUnique<APIRequestHandler>( base::Bind(&DeclarativeEventTest::OnRequest, base::Unretained(this)), base::Bind(&RunFunctionOnGlobalAndIgnoreResult), - APILastError(APILastError::GetParent())); + APILastError(APILastError::GetParent(), + APILastError::AddConsoleError())); } void TearDown() override {
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc index 421e3711..86aa533 100644 --- a/extensions/renderer/dispatcher.cc +++ b/extensions/renderer/dispatcher.cc
@@ -790,20 +790,6 @@ // Platform app sources that are not API-specific.. {"platformApp", IDR_PLATFORM_APP_JS}, - -#if defined(ENABLE_MEDIA_ROUTER) - {"chrome/browser/media/router/mojo/media_controller.mojom", - IDR_MEDIA_CONTROLLER_MOJOM_JS}, - {"chrome/browser/media/router/mojo/media_router.mojom", - IDR_MEDIA_ROUTER_MOJOM_JS}, - {"chrome/browser/media/router/mojo/media_status.mojom", - IDR_MEDIA_STATUS_MOJOM_JS}, - {"media_router_bindings", IDR_MEDIA_ROUTER_BINDINGS_JS}, - {"mojo/common/time.mojom", IDR_MOJO_TIME_MOJOM_JS}, - {"net/interfaces/ip_address.mojom", IDR_MOJO_IP_ADDRESS_MOJOM_JS}, - {"url/mojo/origin.mojom", IDR_ORIGIN_MOJOM_JS}, - {"url/mojo/url.mojom", IDR_MOJO_URL_MOJOM_JS}, -#endif // defined(ENABLE_MEDIA_ROUTER) }; if (base::FeatureList::IsEnabled(::features::kGuestViewCrossProcessFrames)) {
diff --git a/extensions/renderer/module_system.cc b/extensions/renderer/module_system.cc index bbc96f3..a1bb5098 100644 --- a/extensions/renderer/module_system.cc +++ b/extensions/renderer/module_system.cc
@@ -61,20 +61,19 @@ ExtensionsClient* client = ExtensionsClient::Get(); if (client->ShouldSuppressFatalErrors()) { - console::AddMessage(context->GetRenderFrame(), - content::CONSOLE_MESSAGE_LEVEL_ERROR, full_message); + console::AddMessage(context, content::CONSOLE_MESSAGE_LEVEL_ERROR, + full_message); client->RecordDidSuppressFatalError(); } else { - console::Fatal(context->GetRenderFrame(), full_message); + console::Fatal(context, full_message); } } void Warn(v8::Isolate* isolate, const std::string& message) { ScriptContext* script_context = ScriptContextSet::GetContextByV8Context(isolate->GetCurrentContext()); - console::AddMessage( - script_context ? script_context->GetRenderFrame() : nullptr, - content::CONSOLE_MESSAGE_LEVEL_WARNING, message); + console::AddMessage(script_context, content::CONSOLE_MESSAGE_LEVEL_WARNING, + message); } // Default exception handler which logs the exception.
diff --git a/extensions/renderer/native_extension_bindings_system.cc b/extensions/renderer/native_extension_bindings_system.cc index 9924a14..3e84d28 100644 --- a/extensions/renderer/native_extension_bindings_system.cc +++ b/extensions/renderer/native_extension_bindings_system.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" +#include "content/public/common/console_message_level.h" #include "content/public/common/content_switches.h" #include "extensions/common/constants.h" #include "extensions/common/event_filtering_info.h" @@ -16,6 +17,7 @@ #include "extensions/renderer/api_binding_hooks.h" #include "extensions/renderer/api_binding_js_util.h" #include "extensions/renderer/chrome_setting.h" +#include "extensions/renderer/console.h" #include "extensions/renderer/module_system.h" #include "extensions/renderer/script_context.h" #include "extensions/renderer/script_context_set.h" @@ -164,6 +166,14 @@ return result; } +void AddConsoleError(v8::Local<v8::Context> context, const std::string& error) { + ScriptContext* script_context = + ScriptContextSet::GetContextByV8Context(context); + CHECK(script_context); + console::AddMessage(script_context, content::CONSOLE_MESSAGE_LEVEL_ERROR, + error); +} + // Returns the API schema indicated by |api_name|. const base::DictionaryValue& GetAPISchema(const std::string& api_name) { const base::DictionaryValue* schema = @@ -335,7 +345,7 @@ base::Unretained(this)), base::Bind(&NativeExtensionBindingsSystem::OnEventListenerChanged, base::Unretained(this)), - APILastError(base::Bind(&GetRuntime))), + APILastError(base::Bind(&GetRuntime), base::Bind(&AddConsoleError))), weak_factory_(this) { api_system_.RegisterCustomType("storage.StorageArea", base::Bind(&StorageArea::CreateStorageArea));
diff --git a/extensions/renderer/native_extension_bindings_system_unittest.cc b/extensions/renderer/native_extension_bindings_system_unittest.cc index 09e3058b..b853306 100644 --- a/extensions/renderer/native_extension_bindings_system_unittest.cc +++ b/extensions/renderer/native_extension_bindings_system_unittest.cc
@@ -793,4 +793,49 @@ check_properties_inequal(context_a, context_b, "chrome.idle.onStateChanged"); } +// Tests that API methods and events that are conditionally available based on +// context are properly present or absent from the API object. +TEST_F(NativeExtensionBindingsSystemUnittest, + CheckRestrictedFeaturesBasedOnContext) { + scoped_refptr<Extension> extension = + CreateExtension("extension", ItemType::EXTENSION, {"idle"}); + RegisterExtension(extension->id()); + + v8::HandleScope handle_scope(isolate()); + v8::Local<v8::Context> blessed_context = MainContext(); + v8::Local<v8::Context> webpage_context = AddContext(); + + // Create two contexts - a blessed extension context and a normal web page + // context. + ScriptContext* blessed_script_context = CreateScriptContext( + blessed_context, extension.get(), Feature::BLESSED_EXTENSION_CONTEXT); + blessed_script_context->set_url(extension->url()); + bindings_system()->UpdateBindingsForContext(blessed_script_context); + + ScriptContext* webpage_script_context = + CreateScriptContext(webpage_context, nullptr, Feature::WEB_PAGE_CONTEXT); + webpage_script_context->set_url(GURL("http://example.com")); + bindings_system()->UpdateBindingsForContext(webpage_script_context); + + auto property_exists = [](v8::Local<v8::Context> context, + base::StringPiece property) { + v8::Local<v8::Value> value = V8ValueFromScriptSource(context, property); + EXPECT_FALSE(value.IsEmpty()); + return !value->IsUndefined(); + }; + + // Check that properties are correctly restricted. The blessed context should + // have access to the whole runtime API, but the webpage should only have + // access to sendMessage. + const char kSendMessage[] = "chrome.runtime.sendMessage"; + const char kGetUrl[] = "chrome.runtime.getURL"; + const char kOnMessage[] = "chrome.runtime.onMessage"; + EXPECT_TRUE(property_exists(blessed_context, kSendMessage)); + EXPECT_TRUE(property_exists(blessed_context, kGetUrl)); + EXPECT_TRUE(property_exists(blessed_context, kOnMessage)); + EXPECT_TRUE(property_exists(webpage_context, kSendMessage)); + EXPECT_FALSE(property_exists(webpage_context, kGetUrl)); + EXPECT_FALSE(property_exists(webpage_context, kOnMessage)); +} + } // namespace extensions
diff --git a/extensions/renderer/object_backed_native_handler.cc b/extensions/renderer/object_backed_native_handler.cc index a45616f..defacb4 100644 --- a/extensions/renderer/object_backed_native_handler.cc +++ b/extensions/renderer/object_backed_native_handler.cc
@@ -57,10 +57,8 @@ !feature_name_value->IsString()) { ScriptContext* script_context = ScriptContextSet::GetContextByV8Context(context); - console::AddMessage( - script_context ? script_context->GetRenderFrame() : nullptr, - content::CONSOLE_MESSAGE_LEVEL_ERROR, - "Extension view no longer exists"); + console::AddMessage(script_context, content::CONSOLE_MESSAGE_LEVEL_ERROR, + "Extension view no longer exists"); return; }
diff --git a/extensions/renderer/resources/OWNERS b/extensions/renderer/resources/OWNERS deleted file mode 100644 index 3363728..0000000 --- a/extensions/renderer/resources/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -per-file media_router_bindings.js=imcheng@chromium.org -per-file media_router_bindings.js=kmarshall@chromium.org -per-file media_router_bindings.js=mfoltz@chromium.org -
diff --git a/extensions/renderer/resources/extensions_renderer_resources.grd b/extensions/renderer/resources/extensions_renderer_resources.grd index 95f1469c..43978f66c 100644 --- a/extensions/renderer/resources/extensions_renderer_resources.grd +++ b/extensions/renderer/resources/extensions_renderer_resources.grd
@@ -84,18 +84,6 @@ <!-- Extension styles. --> <include name="IDR_EXTENSION_FONTS_CSS" file="extension_fonts.css" type="BINDATA"/> - - <!-- Media Router Mojo service and bindings. --> - <if expr="enable_media_router"> - <include name="IDR_MEDIA_CONTROLLER_MOJOM_JS" file="${mojom_root}\chrome\browser\media\router\mojo\media_controller.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_MEDIA_ROUTER_MOJOM_JS" file="${mojom_root}\chrome\browser\media\router\mojo\media_router.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_MEDIA_ROUTER_BINDINGS_JS" file="media_router_bindings.js" type="BINDATA" /> - <include name="IDR_MEDIA_STATUS_MOJOM_JS" file="${mojom_root}\chrome\browser\media\router\mojo\media_status.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_MOJO_TIME_MOJOM_JS" file="${mojom_root}\mojo\common\time.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_MOJO_IP_ADDRESS_MOJOM_JS" file="${mojom_root}\net\interfaces\ip_address.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_ORIGIN_MOJOM_JS" file="${mojom_root}\url\mojo\origin.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_MOJO_URL_MOJOM_JS" file="${mojom_root}\url\mojo\url.mojom.js" use_base_dir="false" type="BINDATA" /> - </if> </includes> <structures> <!-- Extension styles. -->
diff --git a/extensions/shell/OWNERS b/extensions/shell/OWNERS index a9149a04..982c7a34 100644 --- a/extensions/shell/OWNERS +++ b/extensions/shell/OWNERS
@@ -1,6 +1,6 @@ -derat@chromium.org -jamescook@chromium.org +michaelpg@chromium.org +rdevlin.cronin@chromium.org rkc@chromium.org -# TEAM: extensions-dev@chromium.org -# COMPONENT: Platform>Extensions +# TEAM: apps-dev@chromium.org +# COMPONENT: Platform>Apps>Shell
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn index 23a0d1d..03ab884 100644 --- a/ios/chrome/browser/metrics/BUILD.gn +++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -13,8 +13,6 @@ "ios_chrome_metrics_service_client.mm", "ios_chrome_metrics_services_manager_client.h", "ios_chrome_metrics_services_manager_client.mm", - "ios_chrome_origins_seen_service_factory.cc", - "ios_chrome_origins_seen_service_factory.h", "ios_chrome_stability_metrics_provider.h", "ios_chrome_stability_metrics_provider.mm", "mobile_session_shutdown_metrics_provider.h",
diff --git a/ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.cc b/ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.cc deleted file mode 100644 index 4e9636a..0000000 --- a/ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.cc +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2016 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 "ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.h" - -#include "base/memory/ptr_util.h" -#include "base/memory/singleton.h" -#include "components/keyed_service/ios/browser_state_dependency_manager.h" -#include "components/navigation_metrics/origins_seen_service.h" -#include "ios/chrome/browser/browser_state/browser_state_otr_helper.h" -#include "ios/chrome/browser/browser_state/chrome_browser_state.h" - -// static -navigation_metrics::OriginsSeenService* -IOSChromeOriginsSeenServiceFactory::GetForBrowserState( - ios::ChromeBrowserState* browser_state) { - return static_cast<navigation_metrics::OriginsSeenService*>( - GetInstance()->GetServiceForBrowserState(browser_state, true)); -} - -// static -IOSChromeOriginsSeenServiceFactory* -IOSChromeOriginsSeenServiceFactory::GetInstance() { - return base::Singleton<IOSChromeOriginsSeenServiceFactory>::get(); -} - -IOSChromeOriginsSeenServiceFactory::IOSChromeOriginsSeenServiceFactory() - : BrowserStateKeyedServiceFactory( - "OriginsSeenService", - BrowserStateDependencyManager::GetInstance()) {} - -IOSChromeOriginsSeenServiceFactory::~IOSChromeOriginsSeenServiceFactory() {} - -std::unique_ptr<KeyedService> -IOSChromeOriginsSeenServiceFactory::BuildServiceInstanceFor( - web::BrowserState* context) const { - return base::MakeUnique<navigation_metrics::OriginsSeenService>(); -} - -web::BrowserState* IOSChromeOriginsSeenServiceFactory::GetBrowserStateToUse( - web::BrowserState* context) const { - return GetBrowserStateOwnInstanceInIncognito(context); -}
diff --git a/ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.h b/ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.h deleted file mode 100644 index a4507d98..0000000 --- a/ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.h +++ /dev/null
@@ -1,51 +0,0 @@ -// Copyright 2016 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 IOS_CHROME_BROWSER_METRICS_IOS_CHROME_ORIGINS_SEEN_SERVICE_FACTORY_H_ -#define IOS_CHROME_BROWSER_METRICS_IOS_CHROME_ORIGINS_SEEN_SERVICE_FACTORY_H_ - -#include <memory> - -#include "base/macros.h" -#include "components/keyed_service/ios/browser_state_keyed_service_factory.h" - -namespace base { -template <typename T> -struct DefaultSingletonTraits; -} - -namespace ios { -class ChromeBrowserState; -} - -namespace navigation_metrics { -class OriginsSeenService; -} - -// Singleton that owns all OriginsSeenService and associates them with -// ios::ChromeBrowserState. -class IOSChromeOriginsSeenServiceFactory - : public BrowserStateKeyedServiceFactory { - public: - static navigation_metrics::OriginsSeenService* GetForBrowserState( - ios::ChromeBrowserState* browser_state); - static IOSChromeOriginsSeenServiceFactory* GetInstance(); - - private: - friend struct base::DefaultSingletonTraits< - IOSChromeOriginsSeenServiceFactory>; - - IOSChromeOriginsSeenServiceFactory(); - ~IOSChromeOriginsSeenServiceFactory() override; - - // BrowserStateKeyedServiceFactory implementation. - std::unique_ptr<KeyedService> BuildServiceInstanceFor( - web::BrowserState* context) const override; - web::BrowserState* GetBrowserStateToUse( - web::BrowserState* context) const override; - - DISALLOW_COPY_AND_ASSIGN(IOSChromeOriginsSeenServiceFactory); -}; - -#endif // IOS_CHROME_BROWSER_METRICS_IOS_CHROME_ORIGINS_SEEN_SERVICE_FACTORY_H_
diff --git a/ios/chrome/browser/payments/credit_card_edit_mediator.mm b/ios/chrome/browser/payments/credit_card_edit_mediator.mm index 3ae80f75..9a9bdb99 100644 --- a/ios/chrome/browser/payments/credit_card_edit_mediator.mm +++ b/ios/chrome/browser/payments/credit_card_edit_mediator.mm
@@ -12,6 +12,7 @@ #import "components/autofill/ios/browser/credit_card_util.h" #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/application_context.h" +#import "ios/chrome/browser/payments/cells/payment_method_item.h" #include "ios/chrome/browser/payments/payment_request.h" #import "ios/chrome/browser/payments/payment_request_editor_field.h" #import "ios/chrome/browser/payments/payment_request_util.h" @@ -64,6 +65,22 @@ return self; } +- (CollectionViewItem*)serverCardSummaryItem { + if (!_creditCard || autofill::IsCreditCardLocal(*_creditCard)) + return nil; + + PaymentMethodItem* cardSummaryItem = [[PaymentMethodItem alloc] init]; + cardSummaryItem.methodID = + base::SysUTF16ToNSString(_creditCard->TypeAndLastFourDigits()); + cardSummaryItem.methodDetail = base::SysUTF16ToNSString( + _creditCard->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)); + const int cardTypeIconID = + autofill::data_util::GetPaymentRequestData(_creditCard->type()) + .icon_resource_id; + cardSummaryItem.methodTypeIcon = NativeImage(cardTypeIconID); + return cardSummaryItem; +} + - (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID { DCHECK(profileGUID); autofill::AutofillProfile* profile =
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller.h b/ios/chrome/browser/payments/credit_card_edit_view_controller.h index be723d5..0e0dd13 100644 --- a/ios/chrome/browser/payments/credit_card_edit_view_controller.h +++ b/ios/chrome/browser/payments/credit_card_edit_view_controller.h
@@ -21,6 +21,10 @@ @protocol CreditCardEditViewControllerDataSource< PaymentRequestEditViewControllerDataSource> +// Returns an item that identifies the server card being edited. Returns nil for +// local cards or when a card is being created. +- (CollectionViewItem*)serverCardSummaryItem; + // Returns the billing address label from an autofill profile with the given // guid. Returns nil if the profile does not have an address. - (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID;
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller.mm b/ios/chrome/browser/payments/credit_card_edit_view_controller.mm index da25ce0..3233778a7 100644 --- a/ios/chrome/browser/payments/credit_card_edit_view_controller.mm +++ b/ios/chrome/browser/payments/credit_card_edit_view_controller.mm
@@ -14,6 +14,7 @@ #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h" #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h" +#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item+collection_view_controller.h" #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h" #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" @@ -31,12 +32,14 @@ @"kCreditCardEditCollectionViewId"; typedef NS_ENUM(NSInteger, SectionIdentifier) { - SectionIdentifierBillingAddress = kSectionIdentifierEnumStart, + SectionIdentifierCardSummary = kSectionIdentifierEnumStart, + SectionIdentifierBillingAddress, SectionIdentifierSaveCard, }; typedef NS_ENUM(NSInteger, ItemType) { - ItemTypeBillingAddress = kItemTypeEnumStart, + ItemTypeCardSummary = kItemTypeEnumStart, + ItemTypeBillingAddress, ItemTypeSaveCard, }; @@ -155,6 +158,21 @@ } } +- (void)loadHeaderItems { + [super loadHeaderItems]; + CollectionViewModel* model = self.collectionViewModel; + + // Server card summary section. + CollectionViewItem* serverCardSummaryItem = + [_dataSource serverCardSummaryItem]; + if (serverCardSummaryItem) { + [model addSectionWithIdentifier:SectionIdentifierCardSummary]; + serverCardSummaryItem.type = ItemTypeCardSummary; + [model addItem:serverCardSummaryItem + toSectionWithIdentifier:SectionIdentifierCardSummary]; + } +} + - (void)loadFooterItems { CollectionViewModel* model = self.collectionViewModel; @@ -267,6 +285,7 @@ CollectionViewItem* item = [self.collectionViewModel itemAtIndexPath:indexPath]; switch (item.type) { + case ItemTypeCardSummary: case ItemTypeSaveCard: break; case ItemTypeBillingAddress: { @@ -287,6 +306,7 @@ switch (item.type) { case ItemTypeBillingAddress: return MDCCellDefaultOneLineHeight; + case ItemTypeCardSummary: case ItemTypeSaveCard: return [MDCCollectionViewCell cr_preferredHeightForWidth:CGRectGetWidth(collectionView.bounds) @@ -301,6 +321,7 @@ hidesInkViewAtIndexPath:(NSIndexPath*)indexPath { NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath]; switch (type) { + case ItemTypeCardSummary: case ItemTypeSaveCard: return YES; default:
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm b/ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm index 3324b13..66d4588 100644 --- a/ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm +++ b/ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm
@@ -7,9 +7,7 @@ #include "base/mac/foundation_util.h" #include "base/memory/ptr_util.h" #include "components/autofill/core/browser/field_types.h" -#include "components/autofill/core/browser/test_personal_data_manager.h" -#import "ios/chrome/browser/payments/credit_card_edit_mediator.h" -#include "ios/chrome/browser/payments/payment_request.h" +#import "ios/chrome/browser/payments/cells/payment_method_item.h" #import "ios/chrome/browser/payments/payment_request_editor_field.h" #include "ios/chrome/browser/payments/payment_request_test_util.h" #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h" @@ -17,6 +15,7 @@ #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h" #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item.h" #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h" +#import "ios/chrome/browser/ui/collection_view/cells/test_utils.h" #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h" #include "ios/web/public/payments/payment_request.h" #include "testing/gtest/include/gtest/gtest.h" @@ -26,13 +25,17 @@ #endif @interface TestCreditCardEditViewControllerMediator - : CreditCardEditViewControllerMediator + : NSObject<CreditCardEditViewControllerDataSource> @end @implementation TestCreditCardEditViewControllerMediator -NSArray<EditorField*>* editorFields() { +- (CollectionViewItem*)serverCardSummaryItem { + return [[PaymentMethodItem alloc] init]; +} + +- (NSArray<EditorField*>*)editorFields { return @[ [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardNumber label:@"Credit Card Number" @@ -54,24 +57,25 @@ ]; } +- (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID { + return nil; +} + +- (UIImage*)cardTypeIconFromCardNumber:(NSString*)cardNumber { + return nil; +} + @end class PaymentRequestCreditCardEditViewControllerTest : public CollectionViewControllerTest { protected: CollectionViewController* InstantiateController() override { - payment_request_ = base::MakeUnique<PaymentRequest>( - payment_request_test_util::CreateTestWebPaymentRequest(), - &personal_data_manager_); - - CreditCardEditViewControllerMediator* mediator = - [[CreditCardEditViewControllerMediator alloc] - initWithPaymentRequest:payment_request_.get() - creditCard:nil]; + mediator_ = [[TestCreditCardEditViewControllerMediator alloc] init]; CreditCardEditViewController* viewController = [[CreditCardEditViewController alloc] init]; - [viewController setDataSource:mediator]; + [viewController setDataSource:mediator_]; return viewController; } @@ -80,8 +84,7 @@ controller()); } - autofill::TestPersonalDataManager personal_data_manager_; - std::unique_ptr<PaymentRequest> payment_request_; + TestCreditCardEditViewControllerMediator* mediator_ = nil; }; // Tests that the correct number of items are displayed after loading the model. @@ -94,14 +97,17 @@ [GetCreditCardEditViewController() loadModel]; // There is one section for every textfield (there are four textfields in - // total), one for the footer, and one for the billing address ID item. - ASSERT_EQ(6, NumberOfSections()); + // total), one for the server card summary section, one for the footer, and + // one for the billing address ID item. + ASSERT_EQ(7, NumberOfSections()); - // The first four sections have only one item of the type AutofillEditItem. + // The server card summary section is the first section and has one item of + // the type PaymentMethodItem. ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(0))); id item = GetCollectionViewItem(0, 0); - EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); + EXPECT_TRUE([item isMemberOfClass:[PaymentMethodItem class]]); + // The next four sections have only one item of the type AutofillEditItem. ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(1))); item = GetCollectionViewItem(1, 0); EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); @@ -114,10 +120,14 @@ item = GetCollectionViewItem(3, 0); EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); - // The billing address section contains one item which is of the type - // CollectionViewDetailItem. ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(4))); item = GetCollectionViewItem(4, 0); + EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); + + // The billing address section contains one item which is of the type + // CollectionViewDetailItem. + ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5))); + item = GetCollectionViewItem(5, 0); EXPECT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]); CollectionViewDetailItem* billing_address_item = item; EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, @@ -125,8 +135,8 @@ // The footer section contains one item which is of the type // CollectionViewFooterItem. - ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5))); - item = GetCollectionViewItem(5, 0); + ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6))); + item = GetCollectionViewItem(6, 0); EXPECT_TRUE([item isMemberOfClass:[CollectionViewFooterItem class]]); } @@ -143,12 +153,12 @@ // There is an extra section containing a switch that allows the user to save // the credit card locally. - ASSERT_EQ(7, NumberOfSections()); + ASSERT_EQ(8, NumberOfSections()); // The switch section is the last section before the footer and has one item // of the type CollectionViewSwitchItem. The switch is on by defualt. - ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5))); - id item = GetCollectionViewItem(5, 0); + ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6))); + id item = GetCollectionViewItem(6, 0); EXPECT_TRUE([item isMemberOfClass:[CollectionViewSwitchItem class]]); CollectionViewSwitchItem* switch_item = item; EXPECT_EQ(YES, [switch_item isOn]);
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h b/ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h index fab51946..b68be15 100644 --- a/ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h +++ b/ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h
@@ -22,6 +22,10 @@ // value on the field. Returns YES if all the fields are validated successfully. - (BOOL)validateForm; +// Called before the editor field items are added to the the collection view +// model. Subclasses override this method to add items before the editor fields. +- (void)loadHeaderItems; + // Called after the editor field items have been added to the the collection // view model. Subclasses override this method to add items after the editor // fields.
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller.mm b/ios/chrome/browser/payments/payment_request_edit_view_controller.mm index b550742..eea0e2d 100644 --- a/ios/chrome/browser/payments/payment_request_edit_view_controller.mm +++ b/ios/chrome/browser/payments/payment_request_edit_view_controller.mm
@@ -136,6 +136,8 @@ [super loadModel]; CollectionViewModel* model = self.collectionViewModel; + [self loadHeaderItems]; + // Iterate over the fields and add the respective sections and items. int sectionIdentifier = static_cast<int>(SectionIdentifierFirstTextField); for (EditorField* field in _fields) { @@ -403,6 +405,9 @@ return YES; } +- (void)loadHeaderItems { +} + - (void)loadFooterItems { CollectionViewModel* model = self.collectionViewModel;
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index f6f011d..12d1af709 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -38,7 +38,6 @@ #include "components/keyed_service/core/service_access_type.h" #include "components/metrics_services_manager/metrics_services_manager.h" #include "components/navigation_metrics/navigation_metrics.h" -#include "components/navigation_metrics/origins_seen_service.h" #include "components/prefs/pref_service.h" #include "components/reading_list/core/reading_list_model.h" #include "components/search_engines/template_url_service.h" @@ -62,7 +61,6 @@ #include "ios/chrome/browser/history/history_service_factory.h" #include "ios/chrome/browser/history/top_sites_factory.h" #include "ios/chrome/browser/infobars/infobar_manager_impl.h" -#include "ios/chrome/browser/metrics/ios_chrome_origins_seen_service_factory.h" #import "ios/chrome/browser/metrics/tab_usage_recorder.h" #import "ios/chrome/browser/native_app_launcher/native_app_navigation_controller.h" #import "ios/chrome/browser/passwords/password_controller.h" @@ -1567,11 +1565,8 @@ [fullScreenController_ disableFullScreen]; } [self recordInterfaceOrientation]; - navigation_metrics::OriginsSeenService* originsSeenService = - IOSChromeOriginsSeenServiceFactory::GetForBrowserState(self.browserState); - bool alreadySeen = originsSeenService->Insert(url::Origin(lastCommittedURL)); navigation_metrics::RecordMainFrameNavigation( - lastCommittedURL, true, self.browserState->IsOffTheRecord(), alreadySeen); + lastCommittedURL, true, self.browserState->IsOffTheRecord()); if (loadSuccess) { scoped_refptr<net::HttpResponseHeaders> headers =
diff --git a/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm b/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm index 2c7e0f42..3e58bb7d 100644 --- a/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm +++ b/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
@@ -313,6 +313,11 @@ chrome_test_util::ButtonWithAccessibilityLabelId(IDS_OK); [[EarlGrey selectElementWithMatcher:OKButton] performAction:grey_tap() error:&errorOK]; + // Reenable synchronization in case it was disabled by a test. See comments + // in testShowJavaScriptAfterNewTabAnimation for details. + [[GREYConfiguration sharedInstance] + setValue:@(YES) + forConfigKey:kGREYConfigKeySynchronizationEnabled]; if (!errorOK || !errorCancel) { GREYFail(@"There are still alerts"); @@ -555,11 +560,6 @@ @"correctly."); #endif - // TODO(crbug.com/711291): reenable this on tablets. - if (IsIPadIdiom()) { - EARL_GREY_TEST_DISABLED(@"Disabled for iPad."); - } - // Load the test page with a link to kOnLoadAlertURL and long tap on the link. [self loadPageWithLink]; id<GREYMatcher> webViewMatcher = @@ -573,6 +573,20 @@ l10n_util::GetNSStringWithFixup(IDS_IOS_CONTENT_CONTEXT_OPENLINKNEWTAB)); [[EarlGrey selectElementWithMatcher:newTabMatcher] performAction:grey_tap()]; + // This test case requires that a dialog is presented in the onload event so + // that the DialogPresenter attempts to display during a new tab animation. + // Because presenting a dialog halts the JavaScript execution on the page, + // this prevents the page loaded event from being received until the alert is + // closed. On iPad, this means that there is a loading indicator that + // continues to animate until the dialog is closed. Disabling EarlGrey + // synchronization code for iPad allows the test to detect and dismiss the + // dialog while this animation is occurring. + if (IsIPadIdiom()) { + [[GREYConfiguration sharedInstance] + setValue:@(NO) + forConfigKey:kGREYConfigKeySynchronizationEnabled]; + } + // Wait for the alert to be shown. NSString* alertLabel = [DialogPresenter localizedTitleForJavaScriptAlertFromPage:HttpServer::MakeUrl( @@ -587,6 +601,13 @@ // Close the alert. TapOK(); + + // Reenable synchronization on iPads now that the dialog has been dismissed. + if (IsIPadIdiom()) { + [[GREYConfiguration sharedInstance] + setValue:@(YES) + forConfigKey:kGREYConfigKeySynchronizationEnabled]; + } } @end
diff --git a/ios/chrome/browser/web/resources/OWNERS b/ios/chrome/browser/web/resources/OWNERS new file mode 100644 index 0000000..da255e6 --- /dev/null +++ b/ios/chrome/browser/web/resources/OWNERS
@@ -0,0 +1 @@ +per-file payment_request.js=mahmadi@chromium.org
diff --git a/ios/net/crn_http_protocol_handler.mm b/ios/net/crn_http_protocol_handler.mm index 81617f7..1ee2f78 100644 --- a/ios/net/crn_http_protocol_handler.mm +++ b/ios/net/crn_http_protocol_handler.mm
@@ -51,7 +51,7 @@ namespace { // Size of the buffer used to read the net::URLRequest. -const int kIOBufferSize = 4096; +const int kIOBufferSize = 64 * 1024; // Global instance of the HTTPProtocolHandlerDelegate. net::HTTPProtocolHandlerDelegate* g_protocol_handler_delegate = nullptr;
diff --git a/media/base/demuxer_perftest.cc b/media/base/demuxer_perftest.cc index b04db50..4bfbaef 100644 --- a/media/base/demuxer_perftest.cc +++ b/media/base/demuxer_perftest.cc
@@ -178,6 +178,7 @@ static void RunDemuxerBenchmark(const std::string& filename) { base::FilePath file_path(GetTestDataFilePath(filename)); base::TimeDelta total_time; + MediaLog media_log_; for (int i = 0; i < kBenchmarkIterations; ++i) { // Setup. base::test::ScopedTaskScheduler scoped_task_scheduler; @@ -191,7 +192,7 @@ base::Bind(&OnMediaTracksUpdated); FFmpegDemuxer demuxer(base::ThreadTaskRunnerHandle::Get(), &data_source, encrypted_media_init_data_cb, tracks_updated_cb, - new MediaLog()); + &media_log_); { base::RunLoop run_loop;
diff --git a/media/base/media_log.cc b/media/base/media_log.cc index e354ea03..76b6b40d 100644 --- a/media/base/media_log.cc +++ b/media/base/media_log.cc
@@ -378,10 +378,9 @@ AddEvent(std::move(event)); } -LogHelper::LogHelper(MediaLog::MediaLogLevel level, - const scoped_refptr<MediaLog>& media_log) +LogHelper::LogHelper(MediaLog::MediaLogLevel level, MediaLog* media_log) : level_(level), media_log_(media_log) { - DCHECK(media_log_.get()); + DCHECK(media_log_); } LogHelper::~LogHelper() {
diff --git a/media/base/media_log.h b/media/base/media_log.h index cb0a6b62..0ab19ef 100644 --- a/media/base/media_log.h +++ b/media/base/media_log.h
@@ -15,7 +15,6 @@ #include "base/containers/flat_set.h" #include "base/logging.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "media/base/buffering_state.h" #include "media/base/media_export.h" #include "media/base/media_log_event.h" @@ -25,7 +24,7 @@ namespace media { -class MEDIA_EXPORT MediaLog : public base::RefCountedThreadSafe<MediaLog> { +class MEDIA_EXPORT MediaLog { public: enum MediaLogLevel { MEDIALOG_ERROR, @@ -43,6 +42,7 @@ static std::string MediaEventToLogString(const MediaLogEvent& event); MediaLog(); + virtual ~MediaLog(); // Add an event to this log. Overriden by inheritors to actually do something // with it. @@ -123,10 +123,6 @@ static base::flat_set<base::StringPiece> GetWatchTimeKeys(); static base::flat_set<base::StringPiece> GetWatchTimePowerKeys(); - protected: - friend class base::RefCountedThreadSafe<MediaLog>; - virtual ~MediaLog(); - private: // A unique (to this process) id for this MediaLog. int32_t id_; @@ -137,15 +133,14 @@ // Helper class to make it easier to use MediaLog like DVLOG(). class MEDIA_EXPORT LogHelper { public: - LogHelper(MediaLog::MediaLogLevel level, - const scoped_refptr<MediaLog>& media_log); + LogHelper(MediaLog::MediaLogLevel level, MediaLog* media_log); ~LogHelper(); std::ostream& stream() { return stream_; } private: - MediaLog::MediaLogLevel level_; - const scoped_refptr<MediaLog> media_log_; + const MediaLog::MediaLogLevel level_; + MediaLog* const media_log_; std::stringstream stream_; };
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h index 841ca0b..96f07a5b 100644 --- a/media/base/mock_filters.h +++ b/media/base/mock_filters.h
@@ -578,7 +578,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log)); + MediaLog* media_log)); MOCK_METHOD0(Flush, void()); MOCK_METHOD2(Parse, bool(const uint8_t*, int));
diff --git a/media/base/mock_media_log.h b/media/base/mock_media_log.h index c992fc2..9e90fbe 100644 --- a/media/base/mock_media_log.h +++ b/media/base/mock_media_log.h
@@ -16,15 +16,16 @@ // |outer| is the std::string searched for substring |sub|. #define CONTAINS_STRING(outer, sub) (std::string::npos != (outer).find(sub)) -// "media_log_" is expected to be a scoped_refptr<MockMediaLog>, optionally a -// StrictMock, in scope of the usage of this macro. -#define EXPECT_MEDIA_LOG(x) EXPECT_CALL(*media_log_, DoAddEventLogString((x))) +// "media_log_" is expected to be a MockMediaLog, optionally a StrictMock, in +// scope of the usage of this macro. +#define EXPECT_MEDIA_LOG(x) EXPECT_CALL(media_log_, DoAddEventLogString((x))) namespace media { class MockMediaLog : public MediaLog { public: MockMediaLog(); + ~MockMediaLog() override; MOCK_METHOD1(DoAddEventLogString, void(const std::string& event)); @@ -35,9 +36,6 @@ DoAddEventLogString(MediaEventToLogString(*event)); } - protected: - virtual ~MockMediaLog(); - private: DISALLOW_COPY_AND_ASSIGN(MockMediaLog); };
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index a1e47d1e..9f074c0 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc
@@ -48,7 +48,7 @@ public RendererClient { public: RendererWrapper(scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); ~RendererWrapper() final; void Start(Demuxer* demuxer, @@ -149,7 +149,7 @@ const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; - const scoped_refptr<MediaLog> media_log_; + MediaLog* const media_log_; base::WeakPtr<PipelineImpl> weak_pipeline_; Demuxer* demuxer_; @@ -187,10 +187,10 @@ PipelineImpl::RendererWrapper::RendererWrapper( scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, - scoped_refptr<MediaLog> media_log) + MediaLog* media_log) : media_task_runner_(std::move(media_task_runner)), main_task_runner_(base::ThreadTaskRunnerHandle::Get()), - media_log_(std::move(media_log)), + media_log_(media_log), demuxer_(nullptr), playback_rate_(kDefaultPlaybackRate), volume_(kDefaultVolume),
diff --git a/media/base/pipeline_impl.h b/media/base/pipeline_impl.h index 54f3c89..d04ca0d 100644 --- a/media/base/pipeline_impl.h +++ b/media/base/pipeline_impl.h
@@ -143,7 +143,7 @@ // Parameters passed in the constructor. const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; - const scoped_refptr<MediaLog> media_log_; + MediaLog* const media_log_; // Pipeline client. Valid only while the pipeline is running. Client* client_;
diff --git a/media/base/pipeline_impl_unittest.cc b/media/base/pipeline_impl_unittest.cc index 7b719c0..8e81bd2d 100644 --- a/media/base/pipeline_impl_unittest.cc +++ b/media/base/pipeline_impl_unittest.cc
@@ -98,8 +98,7 @@ }; PipelineImplTest() - : pipeline_( - new PipelineImpl(message_loop_.task_runner(), new MediaLog())), + : pipeline_(new PipelineImpl(message_loop_.task_runner(), &media_log_)), demuxer_(new StrictMock<MockDemuxer>()), demuxer_host_(nullptr), scoped_renderer_(new StrictMock<MockRenderer>()), @@ -324,6 +323,7 @@ StrictMock<CallbackHelper> callbacks_; base::SimpleTestTickClock test_tick_clock_; base::MessageLoop message_loop_; + MediaLog media_log_; std::unique_ptr<PipelineImpl> pipeline_; std::unique_ptr<StrictMock<MockDemuxer>> demuxer_;
diff --git a/media/base/stream_parser.h b/media/base/stream_parser.h index 1ff2830..20c2d1b 100644 --- a/media/base/stream_parser.h +++ b/media/base/stream_parser.h
@@ -128,7 +128,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) = 0; + MediaLog* media_log) = 0; // Called during the reset parser state algorithm. This flushes the current // parser and puts the parser in a state where it can receive data. This
diff --git a/media/blink/multibuffer_data_source.h b/media/blink/multibuffer_data_source.h index bf4c5ea..d46264f8 100644 --- a/media/blink/multibuffer_data_source.h +++ b/media/blink/multibuffer_data_source.h
@@ -231,7 +231,7 @@ // Current playback rate. double playback_rate_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Host object to report buffered byte range changes to. BufferedDataSourceHost* host_;
diff --git a/media/blink/multibuffer_data_source_unittest.cc b/media/blink/multibuffer_data_source_unittest.cc index 0b5a1ba..90a6cea 100644 --- a/media/blink/multibuffer_data_source_unittest.cc +++ b/media/blink/multibuffer_data_source_unittest.cc
@@ -195,7 +195,7 @@ task_runner, url_index, frame, - new media::MediaLog(), + &media_log_, host, base::Bind(&MockMultibufferDataSource::set_downloading, base::Unretained(this))), @@ -208,6 +208,7 @@ private: // Whether the resource is downloading or deferred. bool downloading_; + MediaLog media_log_; DISALLOW_COPY_AND_ASSIGN(MockMultibufferDataSource); };
diff --git a/media/blink/watch_time_reporter.cc b/media/blink/watch_time_reporter.cc index b0127d7..cad61c4 100644 --- a/media/blink/watch_time_reporter.cc +++ b/media/blink/watch_time_reporter.cc
@@ -27,7 +27,7 @@ bool is_mse, bool is_encrypted, bool is_embedded_media_experience_enabled, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, const gfx::Size& initial_video_size, const GetMediaTimeCB& get_media_time_cb) : WatchTimeReporter(has_audio, @@ -35,7 +35,7 @@ is_mse, is_encrypted, is_embedded_media_experience_enabled, - std::move(media_log), + media_log, initial_video_size, get_media_time_cb, false) {} @@ -45,7 +45,7 @@ bool is_mse, bool is_encrypted, bool is_embedded_media_experience_enabled, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, const gfx::Size& initial_video_size, const GetMediaTimeCB& get_media_time_cb, bool is_background) @@ -55,7 +55,7 @@ is_encrypted_(is_encrypted), is_embedded_media_experience_enabled_( is_embedded_media_experience_enabled), - media_log_(std::move(media_log)), + media_log_(media_log), initial_video_size_(initial_video_size), get_media_time_cb_(get_media_time_cb), is_background_(is_background) {
diff --git a/media/blink/watch_time_reporter.h b/media/blink/watch_time_reporter.h index 9b3b93b..9887ae27 100644 --- a/media/blink/watch_time_reporter.h +++ b/media/blink/watch_time_reporter.h
@@ -66,7 +66,7 @@ bool is_mse, bool is_encrypted, bool is_embedded_media_experience_enabled, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, const gfx::Size& initial_video_size, const GetMediaTimeCB& get_media_time_cb); ~WatchTimeReporter() override; @@ -130,7 +130,7 @@ bool is_mse, bool is_encrypted, bool is_embedded_media_experience_enabled, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, const gfx::Size& initial_video_size, const GetMediaTimeCB& get_media_time_cb, bool is_background); @@ -154,7 +154,7 @@ const bool is_mse_; const bool is_encrypted_; const bool is_embedded_media_experience_enabled_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; const gfx::Size initial_video_size_; const GetMediaTimeCB get_media_time_cb_; const bool is_background_;
diff --git a/media/blink/watch_time_reporter_unittest.cc b/media/blink/watch_time_reporter_unittest.cc index 2aa2635a..7e075e3 100644 --- a/media/blink/watch_time_reporter_unittest.cc +++ b/media/blink/watch_time_reporter_unittest.cc
@@ -20,7 +20,7 @@ #define EXPECT_WATCH_TIME(key, value) \ do { \ EXPECT_CALL( \ - *media_log_, \ + media_log_, \ OnWatchTimeUpdate(has_video_ ? MediaLog::kWatchTimeAudioVideo##key \ : MediaLog::kWatchTimeAudio##key, \ value)) \ @@ -30,23 +30,21 @@ #define EXPECT_BACKGROUND_WATCH_TIME(key, value) \ do { \ DCHECK(has_video_); \ - EXPECT_CALL(*media_log_, \ + EXPECT_CALL(media_log_, \ OnWatchTimeUpdate( \ MediaLog::kWatchTimeAudioVideoBackground##key, value)) \ .RetiresOnSaturation(); \ } while (0) #define EXPECT_WATCH_TIME_FINALIZED() \ - EXPECT_CALL(*media_log_, OnWatchTimeFinalized()).RetiresOnSaturation(); + EXPECT_CALL(media_log_, OnWatchTimeFinalized()).RetiresOnSaturation(); #define EXPECT_POWER_WATCH_TIME_FINALIZED() \ - EXPECT_CALL(*media_log_, OnPowerWatchTimeFinalized()).RetiresOnSaturation(); + EXPECT_CALL(media_log_, OnPowerWatchTimeFinalized()).RetiresOnSaturation(); class WatchTimeReporterTest : public testing::TestWithParam<bool> { public: - WatchTimeReporterTest() - : has_video_(GetParam()), - media_log_(new testing::StrictMock<WatchTimeLogMonitor>()) {} + WatchTimeReporterTest() : has_video_(GetParam()) {} ~WatchTimeReporterTest() override {} protected: @@ -93,7 +91,7 @@ EXPECT_WATCH_TIME_FINALIZED(); wtr_.reset(new WatchTimeReporter( - has_audio, has_video_, is_mse, is_encrypted, false, media_log_, + has_audio, has_video_, is_mse, is_encrypted, false, &media_log_, initial_video_size, base::Bind(&WatchTimeReporterTest::GetCurrentMediaTime, base::Unretained(this)))); @@ -263,8 +261,8 @@ MOCK_METHOD0(GetCurrentMediaTime, base::TimeDelta()); const bool has_video_; + testing::StrictMock<WatchTimeLogMonitor> media_log_; base::TestMessageLoop message_loop_; - scoped_refptr<testing::StrictMock<WatchTimeLogMonitor>> media_log_; std::unique_ptr<WatchTimeReporter> wtr_; private:
diff --git a/media/blink/webaudiosourceprovider_impl.cc b/media/blink/webaudiosourceprovider_impl.cc index 09ee98b..4cace43 100644 --- a/media/blink/webaudiosourceprovider_impl.cc +++ b/media/blink/webaudiosourceprovider_impl.cc
@@ -100,13 +100,13 @@ WebAudioSourceProviderImpl::WebAudioSourceProviderImpl( scoped_refptr<SwitchableAudioRendererSink> sink, - scoped_refptr<MediaLog> media_log) + MediaLog* media_log) : volume_(1.0), state_(kStopped), client_(nullptr), sink_(std::move(sink)), tee_filter_(new TeeFilter()), - media_log_(std::move(media_log)), + media_log_(media_log), weak_factory_(this) {} WebAudioSourceProviderImpl::~WebAudioSourceProviderImpl() {
diff --git a/media/blink/webaudiosourceprovider_impl.h b/media/blink/webaudiosourceprovider_impl.h index 1bc6c40..aa7b9f4 100644 --- a/media/blink/webaudiosourceprovider_impl.h +++ b/media/blink/webaudiosourceprovider_impl.h
@@ -49,7 +49,7 @@ int sample_rate)>; WebAudioSourceProviderImpl(scoped_refptr<SwitchableAudioRendererSink> sink, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); // blink::WebAudioSourceProvider implementation. void SetClient(blink::WebAudioSourceProviderClient* client) override; @@ -107,7 +107,7 @@ class TeeFilter; const std::unique_ptr<TeeFilter> tee_filter_; - const scoped_refptr<MediaLog> media_log_; + MediaLog* const media_log_; // NOTE: Weak pointers must be invalidated before all other member variables. base::WeakPtrFactory<WebAudioSourceProviderImpl> weak_factory_;
diff --git a/media/blink/webaudiosourceprovider_impl_unittest.cc b/media/blink/webaudiosourceprovider_impl_unittest.cc index ff271e0..fbee299a 100644 --- a/media/blink/webaudiosourceprovider_impl_unittest.cc +++ b/media/blink/webaudiosourceprovider_impl_unittest.cc
@@ -29,7 +29,7 @@ public: WebAudioSourceProviderImplUnderTest( scoped_refptr<SwitchableAudioRendererSink> sink) - : WebAudioSourceProviderImpl(std::move(sink), new MediaLog()), + : WebAudioSourceProviderImpl(std::move(sink), &media_log_), fallback_sink_(new MockAudioRendererSink()) {} MockAudioRendererSink* fallback_sink() { return fallback_sink_.get(); } @@ -41,6 +41,7 @@ private: ~WebAudioSourceProviderImplUnderTest() override = default; + MediaLog media_log_; scoped_refptr<MockAudioRendererSink> fallback_sink_; DISALLOW_COPY_AND_ASSIGN(WebAudioSourceProviderImplUnderTest);
diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc index 4bf7b985..75eb03e 100644 --- a/media/blink/webencryptedmediaclient_impl.cc +++ b/media/blink/webencryptedmediaclient_impl.cc
@@ -89,7 +89,7 @@ base::Callback<bool(void)> are_secure_codecs_supported_cb, CdmFactory* cdm_factory, MediaPermission* media_permission, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : are_secure_codecs_supported_cb_(are_secure_codecs_supported_cb), cdm_factory_(cdm_factory), key_system_config_selector_(KeySystems::GetInstance(), media_permission),
diff --git a/media/blink/webencryptedmediaclient_impl.h b/media/blink/webencryptedmediaclient_impl.h index 6f792b6..68dbb32 100644 --- a/media/blink/webencryptedmediaclient_impl.h +++ b/media/blink/webencryptedmediaclient_impl.h
@@ -38,7 +38,7 @@ base::Callback<bool(void)> are_secure_codecs_supported_cb, CdmFactory* cdm_factory, MediaPermission* media_permission, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~WebEncryptedMediaClientImpl() override; // WebEncryptedMediaClient implementation. @@ -81,7 +81,7 @@ base::Callback<bool(void)> are_secure_codecs_supported_cb_; CdmFactory* cdm_factory_; KeySystemConfigSelector key_system_config_selector_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; base::WeakPtrFactory<WebEncryptedMediaClientImpl> weak_factory_; };
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index 9b79fba..af8d74c1 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -177,7 +177,7 @@ WebMediaPlayerDelegate* delegate, std::unique_ptr<RendererFactory> renderer_factory, linked_ptr<UrlIndex> url_index, - const WebMediaPlayerParams& params) + std::unique_ptr<WebMediaPlayerParams> params) : frame_(frame), delegate_state_(DelegateState::GONE), delegate_has_audio_(false), @@ -186,9 +186,9 @@ highest_ready_state_(WebMediaPlayer::kReadyStateHaveNothing), preload_(MultibufferDataSource::AUTO), main_task_runner_(frame->LoadingTaskRunner()), - media_task_runner_(params.media_task_runner()), - worker_task_runner_(params.worker_task_runner()), - media_log_(params.media_log()), + media_task_runner_(params->media_task_runner()), + worker_task_runner_(params->worker_task_runner()), + media_log_(params->take_media_log()), pipeline_controller_( base::MakeUnique<PipelineImpl>(media_task_runner_, media_log_.get()), base::Bind(&WebMediaPlayerImpl::CreateRenderer, @@ -213,40 +213,40 @@ encrypted_client_(encrypted_client), delegate_(delegate), delegate_id_(0), - defer_load_cb_(params.defer_load_cb()), - context_3d_cb_(params.context_3d_cb()), - adjust_allocated_memory_cb_(params.adjust_allocated_memory_cb()), + defer_load_cb_(params->defer_load_cb()), + context_3d_cb_(params->context_3d_cb()), + adjust_allocated_memory_cb_(params->adjust_allocated_memory_cb()), last_reported_memory_usage_(0), supports_save_(true), chunk_demuxer_(NULL), url_index_(url_index), // Threaded compositing isn't enabled universally yet. - compositor_task_runner_(params.compositor_task_runner() - ? params.compositor_task_runner() + compositor_task_runner_(params->compositor_task_runner() + ? params->compositor_task_runner() : base::ThreadTaskRunnerHandle::Get()), compositor_(new VideoFrameCompositor(compositor_task_runner_)), #if defined(OS_ANDROID) // WMPI_CAST - cast_impl_(this, client_, params.context_3d_cb()), + cast_impl_(this, client_, params->context_3d_cb()), #endif volume_(1.0), volume_multiplier_(1.0), renderer_factory_(std::move(renderer_factory)), - surface_manager_(params.surface_manager()), + surface_manager_(params->surface_manager()), overlay_surface_id_(SurfaceManager::kNoSurfaceID), suppress_destruction_errors_(false), - suspend_enabled_(params.allow_suspend()), + suspend_enabled_(params->allow_suspend()), use_fallback_path_(false), is_encrypted_(false), preroll_attempt_pending_(false), - observer_(params.media_observer()), + observer_(params->media_observer()), max_keyframe_distance_to_disable_background_video_( - params.max_keyframe_distance_to_disable_background_video()), + params->max_keyframe_distance_to_disable_background_video()), max_keyframe_distance_to_disable_background_video_mse_( - params.max_keyframe_distance_to_disable_background_video_mse()), + params->max_keyframe_distance_to_disable_background_video_mse()), enable_instant_source_buffer_gc_( - params.enable_instant_source_buffer_gc()), + params->enable_instant_source_buffer_gc()), embedded_media_experience_enabled_( - params.embedded_media_experience_enabled()) { + params->embedded_media_experience_enabled()) { DVLOG(1) << __func__; DCHECK(!adjust_allocated_memory_cb_.is_null()); DCHECK(renderer_factory_); @@ -267,13 +267,13 @@ media_log_->AddEvent( media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); - if (params.initial_cdm()) - SetCdm(params.initial_cdm()); + if (params->initial_cdm()) + SetCdm(params->initial_cdm()); // TODO(xhwang): When we use an external Renderer, many methods won't work, // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 - audio_source_provider_ = - new WebAudioSourceProviderImpl(params.audio_renderer_sink(), media_log_); + audio_source_provider_ = new WebAudioSourceProviderImpl( + params->audio_renderer_sink(), media_log_.get()); if (observer_) observer_->SetClient(this); @@ -400,7 +400,7 @@ DCHECK(main_task_runner_->BelongsToCurrentThread()); GURL gurl(url); - ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_); + ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_.get()); // Set subresource URL for crash reporting. base::debug::SetCrashKeyValue("subresource_url", gurl.spec()); @@ -669,8 +669,8 @@ logstr << track_id << " "; enabledMediaTrackIds.push_back(track_id); } - MEDIA_LOG(INFO, media_log_) << "Enabled audio tracks: [" << logstr.str() - << "]"; + MEDIA_LOG(INFO, media_log_.get()) + << "Enabled audio tracks: [" << logstr.str() << "]"; pipeline_controller_.OnEnabledAudioTracksChanged(enabledMediaTrackIds); } @@ -681,8 +681,9 @@ base::Optional<MediaTrack::Id> selected_video_track_id; if (selectedTrackId && !video_track_disabled_) selected_video_track_id = MediaTrack::Id(selectedTrackId->Utf8().data()); - MEDIA_LOG(INFO, media_log_) << "Selected video track: [" - << selected_video_track_id.value_or("") << "]"; + MEDIA_LOG(INFO, media_log_.get()) + << "Selected video track: [" << selected_video_track_id.value_or("") + << "]"; pipeline_controller_.OnSelectedVideoTrackChanged(selected_video_track_id); } @@ -1186,8 +1187,7 @@ void WebMediaPlayerImpl::OnDemuxerOpened() { DCHECK(main_task_runner_->BelongsToCurrentThread()); - client_->MediaSourceOpened( - new WebMediaSourceImpl(chunk_demuxer_, media_log_)); + client_->MediaSourceOpened(new WebMediaSourceImpl(chunk_demuxer_)); } void WebMediaPlayerImpl::OnMemoryPressure( @@ -1228,7 +1228,7 @@ if (suppress_destruction_errors_) return; - ReportPipelineError(load_type_, status, media_log_); + ReportPipelineError(load_type_, status, media_log_.get()); media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status)); if (ready_state_ == WebMediaPlayer::kReadyStateHaveNothing) { @@ -1755,9 +1755,9 @@ BindToCurrentLoop(base::Bind( &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr())); - demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), - encrypted_media_init_data_cb, - media_tracks_updated_cb, media_log_)); + demuxer_.reset(new FFmpegDemuxer( + media_task_runner_, data_source_.get(), encrypted_media_init_data_cb, + media_tracks_updated_cb, media_log_.get())); #else OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); return; @@ -1769,7 +1769,7 @@ chunk_demuxer_ = new ChunkDemuxer( BindToCurrentLoop( base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())), - encrypted_media_init_data_cb, media_log_); + encrypted_media_init_data_cb, media_log_.get()); demuxer_.reset(chunk_demuxer_); if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) { @@ -2168,7 +2168,7 @@ watch_time_reporter_.reset( new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_, is_encrypted_, embedded_media_experience_enabled_, - media_log_, pipeline_metadata_.natural_size, + media_log_.get(), pipeline_metadata_.natural_size, base::Bind(&GetCurrentTimeInternal, this))); watch_time_reporter_->OnVolumeChange(volume_); if (delegate_->IsFrameHidden())
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 0d932b3..d154f00 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -100,7 +100,7 @@ WebMediaPlayerDelegate* delegate, std::unique_ptr<RendererFactory> renderer_factory, linked_ptr<UrlIndex> url_index, - const WebMediaPlayerParams& params); + std::unique_ptr<WebMediaPlayerParams> params); ~WebMediaPlayerImpl() override; void Load(LoadType load_type, @@ -481,7 +481,7 @@ scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; scoped_refptr<base::TaskRunner> worker_task_runner_; - scoped_refptr<MediaLog> media_log_; + std::unique_ptr<MediaLog> media_log_; // |pipeline_controller_| owns an instance of Pipeline. PipelineController pipeline_controller_;
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc index 0d4e6f8..f607b65 100644 --- a/media/blink/webmediaplayer_impl_unittest.cc +++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -204,21 +204,24 @@ &web_frame_client_, nullptr, nullptr)), - media_log_(new MediaLog()), audio_parameters_(TestAudioParameters::Normal()) { web_view_->SetMainFrame(web_local_frame_); media_thread_.StartAndWaitForTesting(); } void InitializeWebMediaPlayerImpl(bool allow_suspend) { + std::unique_ptr<MediaLog> media_log(new MediaLog()); + std::unique_ptr<RendererFactory> renderer_factory( + new DefaultRendererFactory( + media_log.get(), nullptr, + DefaultRendererFactory::GetGpuFactoriesCB())); + wmpi_ = base::MakeUnique<WebMediaPlayerImpl>( web_local_frame_, &client_, nullptr, &delegate_, - base::MakeUnique<DefaultRendererFactory>( - media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()), - url_index_, - WebMediaPlayerParams( - WebMediaPlayerParams::DeferLoadCB(), - scoped_refptr<SwitchableAudioRendererSink>(), media_log_, + std::move(renderer_factory), url_index_, + base::MakeUnique<WebMediaPlayerParams>( + std::move(media_log), WebMediaPlayerParams::DeferLoadCB(), + scoped_refptr<SwitchableAudioRendererSink>(), media_thread_.task_runner(), message_loop_.task_runner(), message_loop_.task_runner(), WebMediaPlayerParams::Context3DCB(), base::Bind(&OnAdjustAllocatedMemory), nullptr, nullptr, nullptr, @@ -356,7 +359,6 @@ blink::WebView* web_view_; blink::WebLocalFrame* web_local_frame_; - scoped_refptr<MediaLog> media_log_; linked_ptr<media::UrlIndex> url_index_; // Audio hardware configuration.
diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc index ce635b6..3cd835f 100644 --- a/media/blink/webmediaplayer_params.cc +++ b/media/blink/webmediaplayer_params.cc
@@ -7,14 +7,13 @@ #include "base/single_thread_task_runner.h" #include "base/task_runner.h" #include "media/base/audio_renderer_sink.h" -#include "media/base/media_log.h" namespace media { WebMediaPlayerParams::WebMediaPlayerParams( + std::unique_ptr<MediaLog> media_log, const DeferLoadCB& defer_load_cb, const scoped_refptr<SwitchableAudioRendererSink>& audio_renderer_sink, - const scoped_refptr<MediaLog>& media_log, const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::TaskRunner>& worker_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, @@ -30,7 +29,7 @@ bool embedded_media_experience_enabled) : defer_load_cb_(defer_load_cb), audio_renderer_sink_(audio_renderer_sink), - media_log_(media_log), + media_log_(std::move(media_log)), media_task_runner_(media_task_runner), worker_task_runner_(worker_task_runner), compositor_task_runner_(compositor_task_runner),
diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h index 2da0d23..206d23f 100644 --- a/media/blink/webmediaplayer_params.h +++ b/media/blink/webmediaplayer_params.h
@@ -12,6 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" +#include "media/base/media_log.h" #include "media/base/media_observer.h" #include "media/blink/media_blink_export.h" #include "media/filters/context_3d.h" @@ -28,7 +29,6 @@ namespace media { class SwitchableAudioRendererSink; -class MediaLog; class SurfaceManager; // Holds parameters for constructing WebMediaPlayerImpl without having @@ -48,9 +48,9 @@ // |defer_load_cb|, |audio_renderer_sink|, |compositor_task_runner|, and // |context_3d_cb| may be null. WebMediaPlayerParams( + std::unique_ptr<MediaLog> media_log, const DeferLoadCB& defer_load_cb, const scoped_refptr<SwitchableAudioRendererSink>& audio_renderer_sink, - const scoped_refptr<MediaLog>& media_log, const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::TaskRunner>& worker_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, @@ -74,9 +74,7 @@ return audio_renderer_sink_; } - const scoped_refptr<MediaLog>& media_log() const { - return media_log_; - } + std::unique_ptr<MediaLog> take_media_log() { return std::move(media_log_); } const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner() const { return media_task_runner_; @@ -129,7 +127,7 @@ private: DeferLoadCB defer_load_cb_; scoped_refptr<SwitchableAudioRendererSink> audio_renderer_sink_; - scoped_refptr<MediaLog> media_log_; + std::unique_ptr<MediaLog> media_log_; scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; scoped_refptr<base::TaskRunner> worker_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
diff --git a/media/blink/webmediaplayer_util.cc b/media/blink/webmediaplayer_util.cc index 4eabad2..340f09b 100644 --- a/media/blink/webmediaplayer_util.cc +++ b/media/blink/webmediaplayer_util.cc
@@ -110,7 +110,7 @@ void ReportMetrics(blink::WebMediaPlayer::LoadType load_type, const GURL& url, const blink::WebSecurityOrigin& security_origin, - scoped_refptr<MediaLog> media_log) { + MediaLog* media_log) { DCHECK(media_log); // Report URL scheme, such as http, https, file, blob etc. @@ -137,7 +137,7 @@ void ReportPipelineError(blink::WebMediaPlayer::LoadType load_type, PipelineStatus error, - scoped_refptr<MediaLog> media_log) { + MediaLog* media_log) { DCHECK_NE(PIPELINE_OK, error); // Report the origin from where the media player is created.
diff --git a/media/blink/webmediaplayer_util.h b/media/blink/webmediaplayer_util.h index 0428030d..f7f2914a 100644 --- a/media/blink/webmediaplayer_util.h +++ b/media/blink/webmediaplayer_util.h
@@ -34,13 +34,13 @@ ReportMetrics(blink::WebMediaPlayer::LoadType load_type, const GURL& url, const blink::WebSecurityOrigin& security_origin, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); // Report metrics about pipeline errors. void MEDIA_BLINK_EXPORT ReportPipelineError(blink::WebMediaPlayer::LoadType load_type, PipelineStatus error, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); // TODO(ddorwin): Move this function to an EME-specific file. // We may also want to move the next one and pass Blink types to WMPI.
diff --git a/media/blink/webmediasource_impl.cc b/media/blink/webmediasource_impl.cc index 4c54f22..812b9cc 100644 --- a/media/blink/webmediasource_impl.cc +++ b/media/blink/webmediasource_impl.cc
@@ -24,9 +24,8 @@ STATIC_ASSERT_MATCHING_STATUS_ENUM(kAddStatusReachedIdLimit, kReachedIdLimit); #undef STATIC_ASSERT_MATCHING_STATUS_ENUM -WebMediaSourceImpl::WebMediaSourceImpl(ChunkDemuxer* demuxer, - const scoped_refptr<MediaLog>& media_log) - : demuxer_(demuxer), media_log_(media_log) { +WebMediaSourceImpl::WebMediaSourceImpl(ChunkDemuxer* demuxer) + : demuxer_(demuxer) { DCHECK(demuxer_); }
diff --git a/media/blink/webmediasource_impl.h b/media/blink/webmediasource_impl.h index 281b08b..025fc56a 100644 --- a/media/blink/webmediasource_impl.h +++ b/media/blink/webmediasource_impl.h
@@ -9,7 +9,6 @@ #include <vector> #include "base/macros.h" -#include "media/base/media_log.h" #include "media/blink/media_blink_export.h" #include "third_party/WebKit/public/platform/WebMediaSource.h" @@ -19,8 +18,7 @@ class MEDIA_BLINK_EXPORT WebMediaSourceImpl : NON_EXPORTED_BASE(public blink::WebMediaSource) { public: - WebMediaSourceImpl(ChunkDemuxer* demuxer, - const scoped_refptr<MediaLog>& media_log); + WebMediaSourceImpl(ChunkDemuxer* demuxer); ~WebMediaSourceImpl() override; // blink::WebMediaSource implementation. @@ -34,7 +32,6 @@ private: ChunkDemuxer* demuxer_; // Owned by WebMediaPlayerImpl. - scoped_refptr<MediaLog> media_log_; DISALLOW_COPY_AND_ASSIGN(WebMediaSourceImpl); };
diff --git a/media/cast/sender/h264_vt_encoder_unittest.cc b/media/cast/sender/h264_vt_encoder_unittest.cc index 8fdf50ab..9fa7639 100644 --- a/media/cast/sender/h264_vt_encoder_unittest.cc +++ b/media/cast/sender/h264_vt_encoder_unittest.cc
@@ -130,8 +130,7 @@ : public base::RefCountedThreadSafe<EndToEndFrameChecker> { public: explicit EndToEndFrameChecker(const VideoDecoderConfig& config) - : decoder_(make_scoped_refptr(new media::MediaLog())), - count_frames_checked_(0) { + : decoder_(&media_log_), count_frames_checked_(0) { bool decoder_init_result; decoder_.Initialize( config, false, nullptr, @@ -169,6 +168,7 @@ friend class base::RefCountedThreadSafe<EndToEndFrameChecker>; virtual ~EndToEndFrameChecker() {} + MediaLog media_log_; FFmpegVideoDecoder decoder_; std::queue<scoped_refptr<VideoFrame>> expectations_; int count_frames_checked_;
diff --git a/media/filters/audio_decoder_selector_unittest.cc b/media/filters/audio_decoder_selector_unittest.cc index a8a0cba9..937a8838 100644 --- a/media/filters/audio_decoder_selector_unittest.cc +++ b/media/filters/audio_decoder_selector_unittest.cc
@@ -52,8 +52,7 @@ }; AudioDecoderSelectorTest() - : media_log_(new MediaLog()), - traits_(media_log_), + : traits_(&media_log_), demuxer_stream_( new StrictMock<MockDemuxerStream>(DemuxerStream::AUDIO)), decoder_1_(new StrictMock<MockAudioDecoder>()), @@ -112,7 +111,7 @@ all_decoders_.begin() + num_decoders, all_decoders_.end()); decoder_selector_.reset(new AudioDecoderSelector( - message_loop_.task_runner(), std::move(all_decoders_), media_log_)); + message_loop_.task_runner(), std::move(all_decoders_), &media_log_)); } void SelectDecoder() { @@ -141,7 +140,7 @@ NOTREACHED(); } - scoped_refptr<MediaLog> media_log_; + MediaLog media_log_; // Stream traits specific to audio decoding. DecoderStreamTraits<DemuxerStream::AUDIO> traits_;
diff --git a/media/filters/audio_decoder_unittest.cc b/media/filters/audio_decoder_unittest.cc index 414cd15a..5356856 100644 --- a/media/filters/audio_decoder_unittest.cc +++ b/media/filters/audio_decoder_unittest.cc
@@ -131,8 +131,8 @@ last_decode_status_(DecodeStatus::DECODE_ERROR) { switch (decoder_type_) { case FFMPEG: - decoder_.reset(new FFmpegAudioDecoder(message_loop_.task_runner(), - new MediaLog())); + decoder_.reset( + new FFmpegAudioDecoder(message_loop_.task_runner(), &media_log_)); break; #if defined(OS_ANDROID) case MEDIA_CODEC: @@ -391,6 +391,7 @@ base::MessageLoop message_loop_; + MediaLog media_log_; scoped_refptr<DecoderBuffer> data_; std::unique_ptr<InMemoryUrlProtocol> protocol_; std::unique_ptr<AudioFileReader> reader_;
diff --git a/media/filters/audio_timestamp_validator.cc b/media/filters/audio_timestamp_validator.cc index 1507efa..0bc40bc 100644 --- a/media/filters/audio_timestamp_validator.cc +++ b/media/filters/audio_timestamp_validator.cc
@@ -25,7 +25,7 @@ AudioTimestampValidator::AudioTimestampValidator( const AudioDecoderConfig& decoder_config, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : has_codec_delay_(decoder_config.codec_delay() > 0), media_log_(media_log), audio_base_ts_(kNoTimestamp),
diff --git a/media/filters/audio_timestamp_validator.h b/media/filters/audio_timestamp_validator.h index ba4c1ba..0b73f3f 100644 --- a/media/filters/audio_timestamp_validator.h +++ b/media/filters/audio_timestamp_validator.h
@@ -19,7 +19,7 @@ class MEDIA_EXPORT AudioTimestampValidator { public: AudioTimestampValidator(const AudioDecoderConfig& decoder_config, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~AudioTimestampValidator(); // These methods monitor DecoderBuffer timestamps for gaps for the purpose of @@ -31,7 +31,7 @@ private: bool has_codec_delay_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Accumulates time from decoded audio frames. We adjust the base timestamp as // needed for the first few buffers (stabilization period) of decoded output
diff --git a/media/filters/audio_timestamp_validator_unittest.cc b/media/filters/audio_timestamp_validator_unittest.cc index de2f4744..7724b04 100644 --- a/media/filters/audio_timestamp_validator_unittest.cc +++ b/media/filters/audio_timestamp_validator_unittest.cc
@@ -41,8 +41,7 @@ : public testing::Test, public ::testing::WithParamInterface<ValidatorTestParams> { public: - AudioTimestampValidatorTest() - : media_log_(new testing::StrictMock<MockMediaLog>()) {} + AudioTimestampValidatorTest() {} protected: void SetUp() override { @@ -57,7 +56,7 @@ base::TimeDelta front_discard_; - scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_; + testing::StrictMock<MockMediaLog> media_log_; }; TEST_P(AudioTimestampValidatorTest, WarnForEraticTimes) { @@ -75,7 +74,7 @@ // stabilized. EXPECT_MEDIA_LOG(HasSubstr("timestamp gap detected")).Times(0); - AudioTimestampValidator validator(decoder_config, media_log_); + AudioTimestampValidator validator(decoder_config, &media_log_); const base::TimeDelta kRandomOffsets[] = { base::TimeDelta::FromMilliseconds(100), @@ -123,7 +122,7 @@ // Expect no gap warnings for series of buffers with valid timestamps. EXPECT_MEDIA_LOG(HasSubstr("timestamp gap detected")).Times(0); - AudioTimestampValidator validator(decoder_config, media_log_); + AudioTimestampValidator validator(decoder_config, &media_log_); for (int i = 0; i < 100; ++i) { // Each buffer's timestamp is kBufferDuration from the previous buffer. @@ -154,7 +153,7 @@ kSamplesPerSecond, EmptyExtraData(), Unencrypted(), kSeekPreroll, codec_delay_); - AudioTimestampValidator validator(decoder_config, media_log_); + AudioTimestampValidator validator(decoder_config, &media_log_); // Validator should quickly stabilize pattern for timestamp expectations. EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times " @@ -199,7 +198,7 @@ kSamplesPerSecond, EmptyExtraData(), Unencrypted(), kSeekPreroll, codec_delay_); - AudioTimestampValidator validator(decoder_config, media_log_); + AudioTimestampValidator validator(decoder_config, &media_log_); EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times " "with decoded output."))
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index d9d5607..f8a7c46d 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc
@@ -186,9 +186,8 @@ stream_->OnStartOfCodedFrameGroup(start_timestamp); } -bool ChunkDemuxerStream::UpdateAudioConfig( - const AudioDecoderConfig& config, - const scoped_refptr<MediaLog>& media_log) { +bool ChunkDemuxerStream::UpdateAudioConfig(const AudioDecoderConfig& config, + MediaLog* media_log) { DCHECK(config.IsValidConfig()); DCHECK_EQ(type_, AUDIO); base::AutoLock auto_lock(lock_); @@ -208,9 +207,8 @@ return stream_->UpdateAudioConfig(config); } -bool ChunkDemuxerStream::UpdateVideoConfig( - const VideoDecoderConfig& config, - const scoped_refptr<MediaLog>& media_log) { +bool ChunkDemuxerStream::UpdateVideoConfig(const VideoDecoderConfig& config, + MediaLog* media_log) { DCHECK(config.IsValidConfig()); DCHECK_EQ(type_, VIDEO); base::AutoLock auto_lock(lock_); @@ -224,9 +222,8 @@ return stream_->UpdateVideoConfig(config); } -void ChunkDemuxerStream::UpdateTextConfig( - const TextTrackConfig& config, - const scoped_refptr<MediaLog>& media_log) { +void ChunkDemuxerStream::UpdateTextConfig(const TextTrackConfig& config, + MediaLog* media_log) { DCHECK_EQ(type_, TEXT); base::AutoLock auto_lock(lock_); DCHECK(!stream_); @@ -402,7 +399,7 @@ ChunkDemuxer::ChunkDemuxer( const base::Closure& open_cb, const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : state_(WAITING_FOR_INIT), cancel_next_seek_(false), host_(NULL),
diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h index b857221..17dc59b 100644 --- a/media/filters/chunk_demuxer.h +++ b/media/filters/chunk_demuxer.h
@@ -96,12 +96,9 @@ // Called when midstream config updates occur. // Returns true if the new config is accepted. // Returns false if the new config should trigger an error. - bool UpdateAudioConfig(const AudioDecoderConfig& config, - const scoped_refptr<MediaLog>& media_log); - bool UpdateVideoConfig(const VideoDecoderConfig& config, - const scoped_refptr<MediaLog>& media_log); - void UpdateTextConfig(const TextTrackConfig& config, - const scoped_refptr<MediaLog>& media_log); + bool UpdateAudioConfig(const AudioDecoderConfig& config, MediaLog* media_log); + bool UpdateVideoConfig(const VideoDecoderConfig& config, MediaLog* media_log); + void UpdateTextConfig(const TextTrackConfig& config, MediaLog* media_log); void MarkEndOfStream(); void UnmarkEndOfStream(); @@ -184,7 +181,7 @@ // |media_log| Used to report content and engine debug messages. ChunkDemuxer(const base::Closure& open_cb, const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~ChunkDemuxer() override; // Demuxer implementation. @@ -410,7 +407,7 @@ bool enable_text_; // MediaLog for reporting messages and properties to debug content and engine. - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; PipelineStatusCB init_cb_; // Callback to execute upon seek completion.
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc index 7653ee7..4ae5b9c 100644 --- a/media/filters/chunk_demuxer_unittest.cc +++ b/media/filters/chunk_demuxer_unittest.cc
@@ -178,9 +178,7 @@ return GenerateCluster(46, 66, 5); } - ChunkDemuxerTest() - : media_log_(new StrictMock<MockMediaLog>()), - append_window_end_for_next_append_(kInfiniteDuration) { + ChunkDemuxerTest() : append_window_end_for_next_append_(kInfiniteDuration) { init_segment_received_cb_ = base::Bind( &ChunkDemuxerTest::InitSegmentReceived, base::Unretained(this)); CreateNewDemuxer(); @@ -192,7 +190,7 @@ Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = base::Bind( &ChunkDemuxerTest::OnEncryptedMediaInitData, base::Unretained(this)); demuxer_.reset( - new ChunkDemuxer(open_cb, encrypted_media_init_data_cb, media_log_)); + new ChunkDemuxer(open_cb, encrypted_media_init_data_cb, &media_log_)); } virtual ~ChunkDemuxerTest() { @@ -1298,11 +1296,11 @@ return true; } + StrictMock<MockMediaLog> media_log_; + base::MessageLoop message_loop_; MockDemuxerHost host_; - scoped_refptr<StrictMock<MockMediaLog>> media_log_; - std::unique_ptr<ChunkDemuxer> demuxer_; Demuxer::MediaTracksUpdatedCB init_segment_received_cb_;
diff --git a/media/filters/decoder_selector.cc b/media/filters/decoder_selector.cc index c4271060..925ea49 100644 --- a/media/filters/decoder_selector.cc +++ b/media/filters/decoder_selector.cc
@@ -44,7 +44,7 @@ DecoderSelector<StreamType>::DecoderSelector( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, ScopedVector<Decoder> decoders, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : task_runner_(task_runner), decoders_(std::move(decoders)), media_log_(media_log),
diff --git a/media/filters/decoder_selector.h b/media/filters/decoder_selector.h index 09378b8..3ce4df6 100644 --- a/media/filters/decoder_selector.h +++ b/media/filters/decoder_selector.h
@@ -56,7 +56,7 @@ DecoderSelector( const scoped_refptr<base::SingleThreadTaskRunner>& message_loop, ScopedVector<Decoder> decoders, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); // Aborts pending Decoder selection and fires |select_decoder_cb| with // NULL and NULL immediately if it's pending. @@ -91,7 +91,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; ScopedVector<Decoder> decoders_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; StreamTraits* traits_;
diff --git a/media/filters/decoder_stream.cc b/media/filters/decoder_stream.cc index 5247734..dde9947 100644 --- a/media/filters/decoder_stream.cc +++ b/media/filters/decoder_stream.cc
@@ -46,7 +46,7 @@ DecoderStream<StreamType>::DecoderStream( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, ScopedVector<Decoder> decoders, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : traits_(media_log), task_runner_(task_runner), media_log_(media_log),
diff --git a/media/filters/decoder_stream.h b/media/filters/decoder_stream.h index 00562693..e0f26c9 100644 --- a/media/filters/decoder_stream.h +++ b/media/filters/decoder_stream.h
@@ -56,10 +56,9 @@ // Indicates completion of a DecoderStream read. typedef base::Callback<void(Status, const scoped_refptr<Output>&)> ReadCB; - DecoderStream( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - ScopedVector<Decoder> decoders, - const scoped_refptr<MediaLog>& media_log); + DecoderStream(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, + ScopedVector<Decoder> decoders, + MediaLog* media_log); virtual ~DecoderStream(); // Returns the string representation of the StreamType for logging purpose. @@ -187,7 +186,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; State state_;
diff --git a/media/filters/decoder_stream_traits.cc b/media/filters/decoder_stream_traits.cc index a578f40..68b1b1a 100644 --- a/media/filters/decoder_stream_traits.cc +++ b/media/filters/decoder_stream_traits.cc
@@ -43,7 +43,7 @@ } DecoderStreamTraits<DemuxerStream::AUDIO>::DecoderStreamTraits( - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : media_log_(media_log) {} void DecoderStreamTraits<DemuxerStream::AUDIO>::ReportStatistics( @@ -111,7 +111,7 @@ } DecoderStreamTraits<DemuxerStream::VIDEO>::DecoderStreamTraits( - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) // Randomly selected number of samples to keep. : keyframe_distance_average_(16) {}
diff --git a/media/filters/decoder_stream_traits.h b/media/filters/decoder_stream_traits.h index e00de2f..e84e37da 100644 --- a/media/filters/decoder_stream_traits.h +++ b/media/filters/decoder_stream_traits.h
@@ -44,7 +44,7 @@ static scoped_refptr<OutputType> CreateEOSOutput(); static DecoderConfigType GetDecoderConfig(DemuxerStream* stream); - explicit DecoderStreamTraits(const scoped_refptr<MediaLog>& media_log); + explicit DecoderStreamTraits(MediaLog* media_log); void ReportStatistics(const StatisticsCB& statistics_cb, int bytes_decoded); void InitializeDecoder(DecoderType* decoder, @@ -63,7 +63,7 @@ // drift. std::unique_ptr<AudioTimestampValidator> audio_ts_validator_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; }; template <> @@ -81,7 +81,7 @@ static scoped_refptr<OutputType> CreateEOSOutput(); static DecoderConfigType GetDecoderConfig(DemuxerStream* stream); - explicit DecoderStreamTraits(const scoped_refptr<MediaLog>& media_log); + explicit DecoderStreamTraits(MediaLog* media_log); void ReportStatistics(const StatisticsCB& statistics_cb, int bytes_decoded); void InitializeDecoder(DecoderType* decoder,
diff --git a/media/filters/decrypting_audio_decoder.cc b/media/filters/decrypting_audio_decoder.cc index 719e9adc..9d9eb376 100644 --- a/media/filters/decrypting_audio_decoder.cc +++ b/media/filters/decrypting_audio_decoder.cc
@@ -36,7 +36,7 @@ DecryptingAudioDecoder::DecryptingAudioDecoder( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, const base::Closure& waiting_for_decryption_key_cb) : task_runner_(task_runner), media_log_(media_log),
diff --git a/media/filters/decrypting_audio_decoder.h b/media/filters/decrypting_audio_decoder.h index 061ef1d..5d80799 100644 --- a/media/filters/decrypting_audio_decoder.h +++ b/media/filters/decrypting_audio_decoder.h
@@ -36,7 +36,7 @@ public: DecryptingAudioDecoder( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, const base::Closure& waiting_for_decryption_key_cb); ~DecryptingAudioDecoder() override; @@ -90,7 +90,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; State state_;
diff --git a/media/filters/decrypting_audio_decoder_unittest.cc b/media/filters/decrypting_audio_decoder_unittest.cc index 70166bf..fb34c76 100644 --- a/media/filters/decrypting_audio_decoder_unittest.cc +++ b/media/filters/decrypting_audio_decoder_unittest.cc
@@ -57,7 +57,7 @@ DecryptingAudioDecoderTest() : decoder_(new DecryptingAudioDecoder( message_loop_.task_runner(), - new MediaLog(), + &media_log_, base::Bind(&DecryptingAudioDecoderTest::OnWaitingForDecryptionKey, base::Unretained(this)))), cdm_context_(new StrictMock<MockCdmContext>()), @@ -246,6 +246,7 @@ MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); base::MessageLoop message_loop_; + MediaLog media_log_; std::unique_ptr<DecryptingAudioDecoder> decoder_; std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_; std::unique_ptr<StrictMock<MockDecryptor>> decryptor_;
diff --git a/media/filters/decrypting_demuxer_stream.cc b/media/filters/decrypting_demuxer_stream.cc index 8967203c..1afb497 100644 --- a/media/filters/decrypting_demuxer_stream.cc +++ b/media/filters/decrypting_demuxer_stream.cc
@@ -26,7 +26,7 @@ DecryptingDemuxerStream::DecryptingDemuxerStream( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, const base::Closure& waiting_for_decryption_key_cb) : task_runner_(task_runner), media_log_(media_log),
diff --git a/media/filters/decrypting_demuxer_stream.h b/media/filters/decrypting_demuxer_stream.h index 9dfcb327..5980873 100644 --- a/media/filters/decrypting_demuxer_stream.h +++ b/media/filters/decrypting_demuxer_stream.h
@@ -33,7 +33,7 @@ public: DecryptingDemuxerStream( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, const base::Closure& waiting_for_decryption_key_cb); // Cancels all pending operations immediately and fires all pending callbacks. @@ -102,7 +102,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; State state_;
diff --git a/media/filters/decrypting_demuxer_stream_unittest.cc b/media/filters/decrypting_demuxer_stream_unittest.cc index e6a57e2..8e0e457fc 100644 --- a/media/filters/decrypting_demuxer_stream_unittest.cc +++ b/media/filters/decrypting_demuxer_stream_unittest.cc
@@ -62,7 +62,7 @@ DecryptingDemuxerStreamTest() : demuxer_stream_(new DecryptingDemuxerStream( message_loop_.task_runner(), - new MediaLog(), + &media_log_, base::Bind(&DecryptingDemuxerStreamTest::OnWaitingForDecryptionKey, base::Unretained(this)))), cdm_context_(new StrictMock<MockCdmContext>()), @@ -254,6 +254,7 @@ MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); base::MessageLoop message_loop_; + MediaLog media_log_; std::unique_ptr<DecryptingDemuxerStream> demuxer_stream_; std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_; std::unique_ptr<StrictMock<MockDecryptor>> decryptor_;
diff --git a/media/filters/decrypting_video_decoder.cc b/media/filters/decrypting_video_decoder.cc index 4f379d9..bb883bd5 100644 --- a/media/filters/decrypting_video_decoder.cc +++ b/media/filters/decrypting_video_decoder.cc
@@ -23,7 +23,7 @@ DecryptingVideoDecoder::DecryptingVideoDecoder( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, const base::Closure& waiting_for_decryption_key_cb) : task_runner_(task_runner), media_log_(media_log),
diff --git a/media/filters/decrypting_video_decoder.h b/media/filters/decrypting_video_decoder.h index cd3549c..034ec943 100644 --- a/media/filters/decrypting_video_decoder.h +++ b/media/filters/decrypting_video_decoder.h
@@ -33,7 +33,7 @@ public: DecryptingVideoDecoder( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, const base::Closure& waiting_for_decryption_key_cb); ~DecryptingVideoDecoder() override; @@ -83,7 +83,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; State state_;
diff --git a/media/filters/decrypting_video_decoder_unittest.cc b/media/filters/decrypting_video_decoder_unittest.cc index 7f1b029..2f9c0b6 100644 --- a/media/filters/decrypting_video_decoder_unittest.cc +++ b/media/filters/decrypting_video_decoder_unittest.cc
@@ -50,7 +50,7 @@ DecryptingVideoDecoderTest() : decoder_(new DecryptingVideoDecoder( message_loop_.task_runner(), - new MediaLog(), + &media_log_, base::Bind(&DecryptingVideoDecoderTest::OnWaitingForDecryptionKey, base::Unretained(this)))), cdm_context_(new StrictMock<MockCdmContext>()), @@ -223,6 +223,7 @@ MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); base::MessageLoop message_loop_; + MediaLog media_log_; std::unique_ptr<DecryptingVideoDecoder> decoder_; std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_; std::unique_ptr<StrictMock<MockDecryptor>> decryptor_;
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc index b5c4431..7f81864 100644 --- a/media/filters/ffmpeg_audio_decoder.cc +++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -61,7 +61,7 @@ FFmpegAudioDecoder::FFmpegAudioDecoder( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : task_runner_(task_runner), state_(kUninitialized), av_sample_format_(0),
diff --git a/media/filters/ffmpeg_audio_decoder.h b/media/filters/ffmpeg_audio_decoder.h index 8ac9d70..b719d78 100644 --- a/media/filters/ffmpeg_audio_decoder.h +++ b/media/filters/ffmpeg_audio_decoder.h
@@ -34,7 +34,7 @@ public: FFmpegAudioDecoder( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~FFmpegAudioDecoder() override; // AudioDecoder implementation. @@ -115,7 +115,7 @@ std::unique_ptr<AudioDiscardHelper> discard_helper_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; scoped_refptr<AudioBufferMemoryPool> pool_;
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc index 5adc3da..0541b52d 100644 --- a/media/filters/ffmpeg_demuxer.cc +++ b/media/filters/ffmpeg_demuxer.cc
@@ -203,7 +203,7 @@ std::unique_ptr<FFmpegDemuxerStream> FFmpegDemuxerStream::Create( FFmpegDemuxer* demuxer, AVStream* stream, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { if (!demuxer || !stream) return nullptr; @@ -265,14 +265,14 @@ AVStream* stream, std::unique_ptr<AudioDecoderConfig> audio_config, std::unique_ptr<VideoDecoderConfig> video_config, - scoped_refptr<MediaLog> media_log) + MediaLog* media_log) : demuxer_(demuxer), task_runner_(base::ThreadTaskRunnerHandle::Get()), stream_(stream), start_time_(kNoTimestamp), audio_config_(audio_config.release()), video_config_(video_config.release()), - media_log_(std::move(media_log)), + media_log_(media_log), type_(UNKNOWN), liveness_(LIVENESS_UNKNOWN), end_of_stream_(false), @@ -836,7 +836,7 @@ DataSource* data_source, const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const MediaTracksUpdatedCB& media_tracks_updated_cb, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : host_(NULL), task_runner_(task_runner), // FFmpeg has no asynchronous API, so we use base::WaitableEvents inside @@ -1374,7 +1374,7 @@ VideoDecoderConfig video_config = streams_[i]->video_decoder_config(); RecordVideoCodecStats(video_config, stream->codecpar->color_range, - media_log_.get()); + media_log_); media_track = media_tracks->AddVideoTrack(video_config, track_id, "main", track_label, track_language);
diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h index 8fcde2b..b81a13d 100644 --- a/media/filters/ffmpeg_demuxer.h +++ b/media/filters/ffmpeg_demuxer.h
@@ -68,10 +68,9 @@ // // FFmpegDemuxerStream keeps a copy of |demuxer| and initializes itself using // information inside |stream|. Both parameters must outlive |this|. - static std::unique_ptr<FFmpegDemuxerStream> Create( - FFmpegDemuxer* demuxer, - AVStream* stream, - const scoped_refptr<MediaLog>& media_log); + static std::unique_ptr<FFmpegDemuxerStream> Create(FFmpegDemuxer* demuxer, + AVStream* stream, + MediaLog* media_log); ~FFmpegDemuxerStream() override; @@ -155,7 +154,7 @@ AVStream* stream, std::unique_ptr<AudioDecoderConfig> audio_config, std::unique_ptr<VideoDecoderConfig> video_config, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); // Runs |read_cb_| if present with the front of |buffer_queue_|, calling // NotifyCapacityAvailable() if capacity is still available. @@ -177,7 +176,7 @@ base::TimeDelta start_time_; std::unique_ptr<AudioDecoderConfig> audio_config_; std::unique_ptr<VideoDecoderConfig> video_config_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; Type type_; Liveness liveness_; base::TimeDelta duration_; @@ -210,7 +209,7 @@ DataSource* data_source, const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const MediaTracksUpdatedCB& media_tracks_updated_cb, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~FFmpegDemuxer() override; // Demuxer implementation. @@ -332,7 +331,7 @@ // integrate with libavformat. DataSource* data_source_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Derived bitrate after initialization has completed. int bitrate_;
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index 1c84ca9..c828cfa 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -108,7 +108,7 @@ demuxer_.reset(new FFmpegDemuxer( base::ThreadTaskRunnerHandle::Get(), data_source_.get(), - encrypted_media_init_data_cb, tracks_updated_cb, new MediaLog())); + encrypted_media_init_data_cb, tracks_updated_cb, &media_log_)); } DemuxerStream* GetStream(DemuxerStream::Type type) { @@ -246,6 +246,7 @@ // Fixture members. base::test::ScopedTaskScheduler task_scheduler_; + MediaLog media_log_; std::unique_ptr<FileDataSource> data_source_; std::unique_ptr<FFmpegDemuxer> demuxer_; StrictMock<MockDemuxerHost> host_;
diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc index c6541e6..1ed42bb 100644 --- a/media/filters/ffmpeg_video_decoder.cc +++ b/media/filters/ffmpeg_video_decoder.cc
@@ -113,10 +113,8 @@ return avcodec_find_decoder(VideoCodecToCodecID(codec)) != nullptr; } -FFmpegVideoDecoder::FFmpegVideoDecoder(scoped_refptr<MediaLog> media_log) - : media_log_(std::move(media_log)), - state_(kUninitialized), - decode_nalus_(false) { +FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log) + : media_log_(media_log), state_(kUninitialized), decode_nalus_(false) { thread_checker_.DetachFromThread(); }
diff --git a/media/filters/ffmpeg_video_decoder.h b/media/filters/ffmpeg_video_decoder.h index 0c107f6..7737e4b8 100644 --- a/media/filters/ffmpeg_video_decoder.h +++ b/media/filters/ffmpeg_video_decoder.h
@@ -29,7 +29,7 @@ public: static bool IsCodecSupported(VideoCodec codec); - explicit FFmpegVideoDecoder(scoped_refptr<MediaLog> media_log); + explicit FFmpegVideoDecoder(MediaLog* media_log); ~FFmpegVideoDecoder() override; // Allow decoding of individual NALU. Entire frames are required by default. @@ -75,7 +75,7 @@ void ReleaseFFmpegResources(); base::ThreadChecker thread_checker_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; DecoderState state_;
diff --git a/media/filters/ffmpeg_video_decoder_unittest.cc b/media/filters/ffmpeg_video_decoder_unittest.cc index 1fe0a65..72ca256e 100644 --- a/media/filters/ffmpeg_video_decoder_unittest.cc +++ b/media/filters/ffmpeg_video_decoder_unittest.cc
@@ -60,8 +60,7 @@ class FFmpegVideoDecoderTest : public testing::Test { public: FFmpegVideoDecoderTest() - : media_log_(new StrictMock<MockMediaLog>()), - decoder_(new FFmpegVideoDecoder(media_log_)), + : decoder_(new FFmpegVideoDecoder(&media_log_)), decode_cb_(base::Bind(&FFmpegVideoDecoderTest::DecodeDone, base::Unretained(this))) { FFmpegGlue::InitializeFFmpeg(); @@ -205,7 +204,7 @@ MOCK_METHOD1(DecodeDone, void(DecodeStatus)); - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; base::MessageLoop message_loop_; std::unique_ptr<FFmpegVideoDecoder> decoder_;
diff --git a/media/filters/frame_processor.cc b/media/filters/frame_processor.cc index 3deb3f8..e5afa803 100644 --- a/media/filters/frame_processor.cc +++ b/media/filters/frame_processor.cc
@@ -162,7 +162,7 @@ } FrameProcessor::FrameProcessor(const UpdateDurationCB& update_duration_cb, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : group_start_timestamp_(kNoTimestamp), update_duration_cb_(update_duration_cb), media_log_(media_log) {
diff --git a/media/filters/frame_processor.h b/media/filters/frame_processor.h index dd28bad8..71bac67 100644 --- a/media/filters/frame_processor.h +++ b/media/filters/frame_processor.h
@@ -27,7 +27,7 @@ typedef base::Callback<void(base::TimeDelta)> UpdateDurationCB; FrameProcessor(const UpdateDurationCB& update_duration_cb, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~FrameProcessor(); // Get/set the current append mode, which if true means "sequence" and if @@ -170,7 +170,7 @@ UpdateDurationCB update_duration_cb_; // MediaLog for reporting messages and properties to debug content and engine. - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Counters that limit spam to |media_log_| for frame processor warnings. int num_dropped_preroll_warnings_ = 0;
diff --git a/media/filters/frame_processor_unittest.cc b/media/filters/frame_processor_unittest.cc index b08e749..679a6f4 100644 --- a/media/filters/frame_processor_unittest.cc +++ b/media/filters/frame_processor_unittest.cc
@@ -65,7 +65,7 @@ base::Bind( &FrameProcessorTestCallbackHelper::OnPossibleDurationIncrease, base::Unretained(&callbacks_)), - new MediaLog())), + &media_log_)), append_window_end_(kInfiniteDuration), frame_duration_(base::TimeDelta::FromMilliseconds(10)), audio_id_(1), @@ -264,6 +264,7 @@ } base::MessageLoop message_loop_; + MediaLog media_log_; StrictMock<FrameProcessorTestCallbackHelper> callbacks_; std::unique_ptr<FrameProcessor> frame_processor_; @@ -307,14 +308,14 @@ CHANNEL_LAYOUT_STEREO, 1000, EmptyExtraData(), Unencrypted()); frame_processor_->OnPossibleAudioConfigUpdate(decoder_config); - ASSERT_TRUE(audio_->UpdateAudioConfig(decoder_config, new MediaLog())); + ASSERT_TRUE(audio_->UpdateAudioConfig(decoder_config, &media_log_)); break; } case DemuxerStream::VIDEO: { ASSERT_FALSE(video_); video_.reset(new ChunkDemuxerStream(DemuxerStream::VIDEO, "2")); - ASSERT_TRUE(video_->UpdateVideoConfig(TestVideoConfig::Normal(), - new MediaLog())); + ASSERT_TRUE( + video_->UpdateVideoConfig(TestVideoConfig::Normal(), &media_log_)); break; } // TODO(wolenetz): Test text coded frame processing.
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc index 953a414..3207c34 100644 --- a/media/filters/gpu_video_decoder.cc +++ b/media/filters/gpu_video_decoder.cc
@@ -113,7 +113,7 @@ GpuVideoDecoder::GpuVideoDecoder(GpuVideoAcceleratorFactories* factories, const RequestSurfaceCB& request_surface_cb, - scoped_refptr<MediaLog> media_log) + MediaLog* media_log) : needs_bitstream_conversion_(false), factories_(factories), request_surface_cb_(request_surface_cb), @@ -169,7 +169,7 @@ // callsite to always be called with the same stat name (can't parameterize it). static void ReportGpuVideoDecoderInitializeStatusToUMAAndRunCB( const VideoDecoder::InitCB& cb, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, bool success) { // TODO(xhwang): Report |success| directly. PipelineStatus status = success ? PIPELINE_OK : DECODER_ERROR_NOT_SUPPORTED;
diff --git a/media/filters/gpu_video_decoder.h b/media/filters/gpu_video_decoder.h index 45c5b20..8b001c7 100644 --- a/media/filters/gpu_video_decoder.h +++ b/media/filters/gpu_video_decoder.h
@@ -48,7 +48,7 @@ public: GpuVideoDecoder(GpuVideoAcceleratorFactories* factories, const RequestSurfaceCB& request_surface_cb, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); // VideoDecoder implementation. std::string GetDisplayName() const override; @@ -172,7 +172,7 @@ // normal video frames and not render them to a surface. RequestSurfaceCB request_surface_cb_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Populated during Initialize() (on success) and unchanged until an error // occurs.
diff --git a/media/filters/source_buffer_state.cc b/media/filters/source_buffer_state.cc index 30436e8b..0a16c22 100644 --- a/media/filters/source_buffer_state.cc +++ b/media/filters/source_buffer_state.cc
@@ -119,7 +119,7 @@ std::unique_ptr<StreamParser> stream_parser, std::unique_ptr<FrameProcessor> frame_processor, const CreateDemuxerStreamCB& create_demuxer_stream_cb, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : create_demuxer_stream_cb_(create_demuxer_stream_cb), timestamp_offset_during_append_(NULL), parsing_media_segment_(false),
diff --git a/media/filters/source_buffer_state.h b/media/filters/source_buffer_state.h index 81d50596..ddad2f7 100644 --- a/media/filters/source_buffer_state.h +++ b/media/filters/source_buffer_state.h
@@ -39,7 +39,7 @@ SourceBufferState(std::unique_ptr<StreamParser> stream_parser, std::unique_ptr<FrameProcessor> frame_processor, const CreateDemuxerStreamCB& create_demuxer_stream_cb, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~SourceBufferState(); @@ -209,7 +209,7 @@ DemuxerStreamMap text_streams_; std::unique_ptr<FrameProcessor> frame_processor_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; StreamParser::InitCB init_cb_; State state_;
diff --git a/media/filters/source_buffer_state_unittest.cc b/media/filters/source_buffer_state_unittest.cc index f0ed97d..3cd7759e 100644 --- a/media/filters/source_buffer_state_unittest.cc +++ b/media/filters/source_buffer_state_unittest.cc
@@ -55,21 +55,19 @@ class SourceBufferStateTest : public ::testing::Test { public: - SourceBufferStateTest() - : media_log_(new testing::StrictMock<MockMediaLog>()), - mock_stream_parser_(nullptr) {} + SourceBufferStateTest() : mock_stream_parser_(nullptr) {} std::unique_ptr<SourceBufferState> CreateSourceBufferState() { std::unique_ptr<FrameProcessor> frame_processor = base::WrapUnique( new FrameProcessor(base::Bind(&SourceBufferStateTest::OnUpdateDuration, base::Unretained(this)), - media_log_)); + &media_log_)); mock_stream_parser_ = new testing::StrictMock<MockStreamParser>(); return base::WrapUnique(new SourceBufferState( base::WrapUnique(mock_stream_parser_), std::move(frame_processor), base::Bind(&SourceBufferStateTest::CreateDemuxerStream, base::Unretained(this)), - media_log_)); + &media_log_)); } std::unique_ptr<SourceBufferState> CreateAndInitSourceBufferState( @@ -132,7 +130,7 @@ return demuxer_streams_.back().get(); } - scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_; + testing::StrictMock<MockMediaLog> media_log_; std::vector<std::unique_ptr<ChunkDemuxerStream>> demuxer_streams_; MockStreamParser* mock_stream_parser_; StreamParser::NewConfigCB new_config_cb_;
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc index f6cb9d1..895df15 100644 --- a/media/filters/source_buffer_stream.cc +++ b/media/filters/source_buffer_stream.cc
@@ -139,7 +139,7 @@ } // namespace SourceBufferStream::SourceBufferStream(const AudioDecoderConfig& audio_config, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : media_log_(media_log), seek_buffer_timestamp_(kNoTimestamp), coded_frame_group_start_time_(kNoDecodeTimestamp()), @@ -152,7 +152,7 @@ } SourceBufferStream::SourceBufferStream(const VideoDecoderConfig& video_config, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : media_log_(media_log), seek_buffer_timestamp_(kNoTimestamp), coded_frame_group_start_time_(kNoDecodeTimestamp()), @@ -165,7 +165,7 @@ } SourceBufferStream::SourceBufferStream(const TextTrackConfig& text_config, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : media_log_(media_log), text_track_config_(text_config), seek_buffer_timestamp_(kNoTimestamp),
diff --git a/media/filters/source_buffer_stream.h b/media/filters/source_buffer_stream.h index 0a3f023..381dbbd 100644 --- a/media/filters/source_buffer_stream.h +++ b/media/filters/source_buffer_stream.h
@@ -58,11 +58,10 @@ }; SourceBufferStream(const AudioDecoderConfig& audio_config, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); SourceBufferStream(const VideoDecoderConfig& video_config, - const scoped_refptr<MediaLog>& media_log); - SourceBufferStream(const TextTrackConfig& text_config, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); + SourceBufferStream(const TextTrackConfig& text_config, MediaLog* media_log); ~SourceBufferStream(); @@ -370,7 +369,7 @@ // Used to report log messages that can help the web developer figure out what // is wrong with the content. - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // List of disjoint buffered ranges, ordered by start time. RangeList ranges_;
diff --git a/media/filters/source_buffer_stream_unittest.cc b/media/filters/source_buffer_stream_unittest.cc index d1e56ec..c9099ae15 100644 --- a/media/filters/source_buffer_stream_unittest.cc +++ b/media/filters/source_buffer_stream_unittest.cc
@@ -63,10 +63,10 @@ class SourceBufferStreamTest : public testing::Test { protected: - SourceBufferStreamTest() : media_log_(new StrictMock<MockMediaLog>()) { + SourceBufferStreamTest() { video_config_ = TestVideoConfig::Normal(); SetStreamInfo(kDefaultFramesPerSecond, kDefaultKeyframesPerSecond); - stream_.reset(new SourceBufferStream(video_config_, media_log_)); + stream_.reset(new SourceBufferStream(video_config_, &media_log_)); } void SetMemoryLimit(size_t buffers_of_data) { @@ -82,7 +82,7 @@ void SetTextStream() { video_config_ = TestVideoConfig::Invalid(); TextTrackConfig config(kTextSubtitles, "", "", ""); - stream_.reset(new SourceBufferStream(config, media_log_)); + stream_.reset(new SourceBufferStream(config, &media_log_)); SetStreamInfo(2, 2); } @@ -91,7 +91,7 @@ audio_config_.Initialize(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 1000, EmptyExtraData(), Unencrypted(), base::TimeDelta(), 0); - stream_.reset(new SourceBufferStream(audio_config_, media_log_)); + stream_.reset(new SourceBufferStream(audio_config_, &media_log_)); // Equivalent to 2ms per frame. SetStreamInfo(500, 500); @@ -408,10 +408,10 @@ base::TimeDelta frame_duration() const { return frame_duration_; } + StrictMock<MockMediaLog> media_log_; std::unique_ptr<SourceBufferStream> stream_; VideoDecoderConfig video_config_; AudioDecoderConfig audio_config_; - scoped_refptr<StrictMock<MockMediaLog>> media_log_; private: base::TimeDelta ConvertToFrameDuration(int frames_per_second) { @@ -3658,7 +3658,7 @@ TEST_F(SourceBufferStreamTest, SameTimestamp_Audio) { AudioDecoderConfig config(kCodecMP3, kSampleFormatF32, CHANNEL_LAYOUT_STEREO, 44100, EmptyExtraData(), Unencrypted()); - stream_.reset(new SourceBufferStream(config, media_log_)); + stream_.reset(new SourceBufferStream(config, &media_log_)); Seek(0); NewCodedFrameGroupAppend("0K 0K 30K 30 60 60"); CheckExpectedBuffers("0K 0K 30K 30 60 60"); @@ -3669,7 +3669,7 @@ AudioDecoderConfig config(kCodecMP3, kSampleFormatF32, CHANNEL_LAYOUT_STEREO, 44100, EmptyExtraData(), Unencrypted()); - stream_.reset(new SourceBufferStream(config, media_log_)); + stream_.reset(new SourceBufferStream(config, &media_log_)); Seek(0); // Note, in reality, a non-keyframe audio frame is rare or perhaps not @@ -4214,7 +4214,7 @@ audio_config_.Initialize(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 4000, EmptyExtraData(), Unencrypted(), base::TimeDelta(), 0); - stream_.reset(new SourceBufferStream(audio_config_, media_log_)); + stream_.reset(new SourceBufferStream(audio_config_, &media_log_)); // Equivalent to 0.5ms per frame. SetStreamInfo(2000, 2000); Seek(0);
diff --git a/media/filters/stream_parser_factory.cc b/media/filters/stream_parser_factory.cc index 26325f3d..772d1e5 100644 --- a/media/filters/stream_parser_factory.cc +++ b/media/filters/stream_parser_factory.cc
@@ -35,9 +35,8 @@ namespace media { -typedef bool (*CodecIDValidatorFunction)( - const std::string& codecs_id, - const scoped_refptr<MediaLog>& media_log); +typedef bool (*CodecIDValidatorFunction)(const std::string& codecs_id, + MediaLog* media_log); struct CodecInfo { enum Type { @@ -73,7 +72,7 @@ typedef StreamParser* (*ParserFactoryFunction)( const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); struct SupportedTypeInfo { const char* type; @@ -103,13 +102,13 @@ }; static StreamParser* BuildWebMParser(const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { return new WebMStreamParser(); } #if BUILDFLAG(USE_PROPRIETARY_CODECS) bool CheckIfMp4Vp9DemuxingEnabled(const std::string& codec_id, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { return base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableVp9InMp4); } @@ -120,7 +119,7 @@ static const int kAACPSObjectType = 29; static int GetMP4AudioObjectType(const std::string& codec_id, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { // From RFC 6381 section 3.3 (ISO Base Media File Format Name Space): // When the first element of a ['codecs' parameter value] is 'mp4a' ..., // the second element is a hexadecimal representation of the MP4 Registration @@ -143,8 +142,7 @@ return -1; } -bool ValidateMP4ACodecID(const std::string& codec_id, - const scoped_refptr<MediaLog>& media_log) { +bool ValidateMP4ACodecID(const std::string& codec_id, MediaLog* media_log) { int audio_object_type = GetMP4AudioObjectType(codec_id, media_log); if (audio_object_type == kAACLCObjectType || audio_object_type == kAACSBRObjectType || @@ -237,7 +235,7 @@ NULL}; static StreamParser* BuildMP4Parser(const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { std::set<int> audio_object_types; bool has_sbr = false; @@ -281,7 +279,7 @@ }; static StreamParser* BuildMP3Parser(const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { return new MPEG1AudioStreamParser(); } @@ -293,7 +291,7 @@ }; static StreamParser* BuildADTSParser(const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { return new ADTSStreamParser(); } @@ -317,7 +315,7 @@ NULL}; static StreamParser* BuildMP2TParser(const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { bool has_sbr = false; for (size_t i = 0; i < codecs.size(); ++i) { std::string codec_id = codecs[i]; @@ -404,7 +402,7 @@ static bool CheckTypeAndCodecs( const std::string& type, const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, ParserFactoryFunction* factory_function, std::vector<CodecInfo::HistogramTag>* audio_codecs, std::vector<CodecInfo::HistogramTag>* video_codecs) { @@ -464,14 +462,17 @@ } bool StreamParserFactory::IsTypeSupported( - const std::string& type, const std::vector<std::string>& codecs) { - return CheckTypeAndCodecs(type, codecs, new MediaLog(), NULL, NULL, NULL); + const std::string& type, + const std::vector<std::string>& codecs) { + // TODO(wolenetz): Questionable MediaLog usage, http://crbug.com/712310 + MediaLog media_log; + return CheckTypeAndCodecs(type, codecs, &media_log, NULL, NULL, NULL); } std::unique_ptr<StreamParser> StreamParserFactory::Create( const std::string& type, const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { std::unique_ptr<StreamParser> stream_parser; ParserFactoryFunction factory_function; std::vector<CodecInfo::HistogramTag> audio_codecs;
diff --git a/media/filters/stream_parser_factory.h b/media/filters/stream_parser_factory.h index a0dd183b..e879c708 100644 --- a/media/filters/stream_parser_factory.h +++ b/media/filters/stream_parser_factory.h
@@ -32,7 +32,7 @@ static std::unique_ptr<StreamParser> Create( const std::string& type, const std::vector<std::string>& codecs, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); }; } // namespace media
diff --git a/media/filters/video_decoder_selector_unittest.cc b/media/filters/video_decoder_selector_unittest.cc index c756324..9743f58 100644 --- a/media/filters/video_decoder_selector_unittest.cc +++ b/media/filters/video_decoder_selector_unittest.cc
@@ -50,8 +50,7 @@ }; VideoDecoderSelectorTest() - : media_log_(new MediaLog()), - traits_(media_log_), + : traits_(&media_log_), demuxer_stream_( new StrictMock<MockDemuxerStream>(DemuxerStream::VIDEO)), decoder_1_(new StrictMock<MockVideoDecoder>()), @@ -105,7 +104,7 @@ all_decoders_.begin() + num_decoders, all_decoders_.end()); decoder_selector_.reset(new VideoDecoderSelector( - message_loop_.task_runner(), std::move(all_decoders_), media_log_)); + message_loop_.task_runner(), std::move(all_decoders_), &media_log_)); } void SelectDecoder() { @@ -136,7 +135,7 @@ NOTREACHED(); } - scoped_refptr<MediaLog> media_log_; + MediaLog media_log_; // Stream traits specific to video decoding. DecoderStreamTraits<DemuxerStream::VIDEO> traits_;
diff --git a/media/filters/video_frame_stream_unittest.cc b/media/filters/video_frame_stream_unittest.cc index 27fea03..c82dadd2 100644 --- a/media/filters/video_frame_stream_unittest.cc +++ b/media/filters/video_frame_stream_unittest.cc
@@ -92,7 +92,7 @@ decoders.push_back(decoder3_); video_frame_stream_.reset(new VideoFrameStream( - message_loop_.task_runner(), std::move(decoders), new MediaLog())); + message_loop_.task_runner(), std::move(decoders), &media_log_)); if (GetParam().is_encrypted && GetParam().has_decryptor) { decryptor_.reset(new NiceMock<MockDecryptor>()); @@ -364,6 +364,7 @@ base::MessageLoop message_loop_; + MediaLog media_log_; std::unique_ptr<VideoFrameStream> video_frame_stream_; std::unique_ptr<FakeDemuxerStream> demuxer_stream_; std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_;
diff --git a/media/filters/video_renderer_algorithm.cc b/media/filters/video_renderer_algorithm.cc index a49c107..32bab9759 100644 --- a/media/filters/video_renderer_algorithm.cc +++ b/media/filters/video_renderer_algorithm.cc
@@ -39,8 +39,8 @@ VideoRendererAlgorithm::VideoRendererAlgorithm( const TimeSource::WallClockTimeCB& wall_clock_time_cb, - scoped_refptr<MediaLog> media_log) - : media_log_(std::move(media_log)), + MediaLog* media_log) + : media_log_(media_log), cadence_estimator_(base::TimeDelta::FromSeconds( kMinimumAcceptableTimeBetweenGlitchesSecs)), wall_clock_time_cb_(wall_clock_time_cb),
diff --git a/media/filters/video_renderer_algorithm.h b/media/filters/video_renderer_algorithm.h index 0ce7809..929a87b1 100644 --- a/media/filters/video_renderer_algorithm.h +++ b/media/filters/video_renderer_algorithm.h
@@ -51,7 +51,7 @@ class MEDIA_EXPORT VideoRendererAlgorithm { public: VideoRendererAlgorithm(const TimeSource::WallClockTimeCB& wall_clock_time_cb, - scoped_refptr<MediaLog> media_log); + MediaLog* media_log); ~VideoRendererAlgorithm(); // Chooses the best frame for the interval [deadline_min, deadline_max] based @@ -267,7 +267,7 @@ // UpdateEffectiveFramesQueued(). size_t CountEffectiveFramesQueued() const; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; int out_of_order_frame_logs_ = 0; // Queue of incoming frames waiting for rendering.
diff --git a/media/filters/video_renderer_algorithm_unittest.cc b/media/filters/video_renderer_algorithm_unittest.cc index 296f71d..da84d097 100644 --- a/media/filters/video_renderer_algorithm_unittest.cc +++ b/media/filters/video_renderer_algorithm_unittest.cc
@@ -73,7 +73,7 @@ : tick_clock_(new base::SimpleTestTickClock()), algorithm_(base::Bind(&WallClockTimeSource::GetWallClockTimes, base::Unretained(&time_source_)), - make_scoped_refptr(new MediaLog())) { + &media_log_) { // Always start the TickClock at a non-zero value since null values have // special connotations. tick_clock_->Advance(base::TimeDelta::FromMicroseconds(10000)); @@ -331,6 +331,7 @@ } protected: + MediaLog media_log_; VideoFramePool frame_pool_; std::unique_ptr<base::SimpleTestTickClock> tick_clock_; WallClockTimeSource time_source_;
diff --git a/media/formats/common/stream_parser_test_base.cc b/media/formats/common/stream_parser_test_base.cc index c8d0bb4..026c6b9 100644 --- a/media/formats/common/stream_parser_test_base.cc +++ b/media/formats/common/stream_parser_test_base.cc
@@ -44,7 +44,7 @@ base::Bind(&StreamParserTestBase::OnKeyNeeded, base::Unretained(this)), base::Bind(&StreamParserTestBase::OnNewSegment, base::Unretained(this)), base::Bind(&StreamParserTestBase::OnEndOfSegment, base::Unretained(this)), - new MediaLog()); + &media_log_); } StreamParserTestBase::~StreamParserTestBase() {}
diff --git a/media/formats/common/stream_parser_test_base.h b/media/formats/common/stream_parser_test_base.h index 58aac2e..2cc97c6 100644 --- a/media/formats/common/stream_parser_test_base.h +++ b/media/formats/common/stream_parser_test_base.h
@@ -12,6 +12,7 @@ #include "base/macros.h" #include "media/base/audio_decoder_config.h" +#include "media/base/media_log.h" #include "media/base/stream_parser.h" #include "media/base/stream_parser_buffer.h" #include "media/base/text_track_config.h" @@ -65,6 +66,7 @@ void OnNewSegment(); void OnEndOfSegment(); + MediaLog media_log_; std::unique_ptr<StreamParser> parser_; std::stringstream results_stream_; AudioDecoderConfig last_audio_config_;
diff --git a/media/formats/mp2t/es_parser_mpeg1audio.cc b/media/formats/mp2t/es_parser_mpeg1audio.cc index 50cb1cb..65640db 100644 --- a/media/formats/mp2t/es_parser_mpeg1audio.cc +++ b/media/formats/mp2t/es_parser_mpeg1audio.cc
@@ -39,11 +39,10 @@ EsParserMpeg1Audio::EsParserMpeg1Audio( const NewAudioConfigCB& new_audio_config_cb, const EmitBufferCB& emit_buffer_cb, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : media_log_(media_log), new_audio_config_cb_(new_audio_config_cb), - emit_buffer_cb_(emit_buffer_cb) { -} + emit_buffer_cb_(emit_buffer_cb) {} EsParserMpeg1Audio::~EsParserMpeg1Audio() { }
diff --git a/media/formats/mp2t/es_parser_mpeg1audio.h b/media/formats/mp2t/es_parser_mpeg1audio.h index ad29132..56e5a8b 100644 --- a/media/formats/mp2t/es_parser_mpeg1audio.h +++ b/media/formats/mp2t/es_parser_mpeg1audio.h
@@ -33,7 +33,7 @@ EsParserMpeg1Audio(const NewAudioConfigCB& new_audio_config_cb, const EmitBufferCB& emit_buffer_cb, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~EsParserMpeg1Audio() override; // EsParser implementation. @@ -65,7 +65,7 @@ void SkipMpeg1AudioFrame(const Mpeg1AudioFrame& mpeg1audio_frame); - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Callbacks: // - to signal a new audio configuration,
diff --git a/media/formats/mp2t/es_parser_mpeg1audio_unittest.cc b/media/formats/mp2t/es_parser_mpeg1audio_unittest.cc index c29f4df..a7edeaf5 100644 --- a/media/formats/mp2t/es_parser_mpeg1audio_unittest.cc +++ b/media/formats/mp2t/es_parser_mpeg1audio_unittest.cc
@@ -28,6 +28,7 @@ bool Process(const std::vector<Packet>& pes_packets, bool force_timing); private: + MediaLog media_log_; DISALLOW_COPY_AND_ASSIGN(EsParserMpeg1AudioTest); }; @@ -41,7 +42,7 @@ base::Bind(&EsParserMpeg1AudioTest::NewAudioConfig, base::Unretained(this)), base::Bind(&EsParserMpeg1AudioTest::EmitBuffer, base::Unretained(this)), - new MediaLog()); + &media_log_); return ProcessPesPackets(&es_parser, pes_packets, force_timing); }
diff --git a/media/formats/mp2t/mp2t_stream_parser.cc b/media/formats/mp2t/mp2t_stream_parser.cc index eea80da..d0392de 100644 --- a/media/formats/mp2t/mp2t_stream_parser.cc +++ b/media/formats/mp2t/mp2t_stream_parser.cc
@@ -209,7 +209,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { DCHECK(!is_initialized_); DCHECK(init_cb_.is_null()); DCHECK(!init_cb.is_null());
diff --git a/media/formats/mp2t/mp2t_stream_parser.h b/media/formats/mp2t/mp2t_stream_parser.h index bc24377..6557756 100644 --- a/media/formats/mp2t/mp2t_stream_parser.h +++ b/media/formats/mp2t/mp2t_stream_parser.h
@@ -45,7 +45,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) override; + MediaLog* media_log) override; void Flush() override; bool Parse(const uint8_t* buf, int size) override; @@ -127,7 +127,7 @@ EncryptedMediaInitDataCB encrypted_media_init_data_cb_; NewMediaSegmentCB new_segment_cb_; EndMediaSegmentCB end_of_segment_cb_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // True when AAC SBR extension is signalled in the mimetype // (mp4a.40.5 in the codecs parameter).
diff --git a/media/formats/mp2t/mp2t_stream_parser_unittest.cc b/media/formats/mp2t/mp2t_stream_parser_unittest.cc index 933a5de..3555b91 100644 --- a/media/formats/mp2t/mp2t_stream_parser_unittest.cc +++ b/media/formats/mp2t/mp2t_stream_parser_unittest.cc
@@ -174,6 +174,7 @@ } protected: + MediaLog media_log_; std::unique_ptr<Mp2tStreamParser> parser_; int segment_count_; int config_count_; @@ -358,7 +359,7 @@ base::Bind(&Mp2tStreamParserTest::OnNewSegment, base::Unretained(this)), base::Bind(&Mp2tStreamParserTest::OnEndOfSegment, base::Unretained(this)), - new MediaLog()); + &media_log_); } bool ParseMpeg2TsFile(const std::string& filename, int append_bytes) {
diff --git a/media/formats/mp4/aac.cc b/media/formats/mp4/aac.cc index cbabddb0..9ab7cbb 100644 --- a/media/formats/mp4/aac.cc +++ b/media/formats/mp4/aac.cc
@@ -27,8 +27,7 @@ AAC::~AAC() { } -bool AAC::Parse(const std::vector<uint8_t>& data, - const scoped_refptr<MediaLog>& media_log) { +bool AAC::Parse(const std::vector<uint8_t>& data, MediaLog* media_log) { #if defined(OS_ANDROID) codec_specific_data_ = data; #endif
diff --git a/media/formats/mp4/aac.h b/media/formats/mp4/aac.h index ac694cd..b6244ab 100644 --- a/media/formats/mp4/aac.h +++ b/media/formats/mp4/aac.h
@@ -34,8 +34,7 @@ // The function will parse the data and get the ElementaryStreamDescriptor, // then it will parse the ElementaryStreamDescriptor to get audio stream // configurations. - bool Parse(const std::vector<uint8_t>& data, - const scoped_refptr<MediaLog>& media_log); + bool Parse(const std::vector<uint8_t>& data, MediaLog* media_log); // Gets the output sample rate for the AAC stream. // |sbr_in_mimetype| should be set to true if the SBR mode is
diff --git a/media/formats/mp4/aac_unittest.cc b/media/formats/mp4/aac_unittest.cc index 645dbe8..dcf1e42 100644 --- a/media/formats/mp4/aac_unittest.cc +++ b/media/formats/mp4/aac_unittest.cc
@@ -49,13 +49,13 @@ class AACTest : public testing::Test { public: - AACTest() : media_log_(new StrictMock<MockMediaLog>()) {} + AACTest() {} bool Parse(const std::vector<uint8_t>& data) { - return aac_.Parse(data, media_log_); + return aac_.Parse(data, &media_log_); } - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; AAC aac_; };
diff --git a/media/formats/mp4/box_definitions.cc b/media/formats/mp4/box_definitions.cc index c1c9934..329d74e 100644 --- a/media/formats/mp4/box_definitions.cc +++ b/media/formats/mp4/box_definitions.cc
@@ -587,12 +587,13 @@ bool AVCDecoderConfigurationRecord::Parse(const uint8_t* data, int data_size) { BufferReader reader(data, data_size); - return ParseInternal(&reader, new MediaLog()); + // TODO(wolenetz): Questionable MediaLog usage, http://crbug.com/712310 + MediaLog media_log; + return ParseInternal(&reader, &media_log); } -bool AVCDecoderConfigurationRecord::ParseInternal( - BufferReader* reader, - const scoped_refptr<MediaLog>& media_log) { +bool AVCDecoderConfigurationRecord::ParseInternal(BufferReader* reader, + MediaLog* media_log) { RCHECK(reader->Read1(&version) && version == 1 && reader->Read1(&profile_indication) && reader->Read1(&profile_compatibility) &&
diff --git a/media/formats/mp4/box_definitions.h b/media/formats/mp4/box_definitions.h index 311e782..cd0caec 100644 --- a/media/formats/mp4/box_definitions.h +++ b/media/formats/mp4/box_definitions.h
@@ -233,8 +233,7 @@ std::vector<PPS> pps_list; private: - bool ParseInternal(BufferReader* reader, - const scoped_refptr<MediaLog>& media_log); + bool ParseInternal(BufferReader* reader, MediaLog* media_log); }; struct MEDIA_EXPORT VPCodecConfigurationRecord : Box {
diff --git a/media/formats/mp4/box_reader.cc b/media/formats/mp4/box_reader.cc index 863f2a0f..a6f94c9 100644 --- a/media/formats/mp4/box_reader.cc +++ b/media/formats/mp4/box_reader.cc
@@ -91,7 +91,7 @@ BoxReader::BoxReader(const uint8_t* buf, const size_t buf_size, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, bool is_EOS) : BufferReader(buf, buf_size), media_log_(media_log), @@ -117,7 +117,7 @@ // static BoxReader* BoxReader::ReadTopLevelBox(const uint8_t* buf, const size_t buf_size, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, bool* err) { std::unique_ptr<BoxReader> reader( new BoxReader(buf, buf_size, media_log, false)); @@ -140,7 +140,7 @@ // static bool BoxReader::StartTopLevelBox(const uint8_t* buf, const size_t buf_size, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, FourCC* type, size_t* box_size, bool* err) { @@ -158,7 +158,9 @@ // static BoxReader* BoxReader::ReadConcatentatedBoxes(const uint8_t* buf, const size_t buf_size) { - BoxReader* reader = new BoxReader(buf, buf_size, new MediaLog(), true); + // TODO(wolenetz): Questionable MediaLog usage, http://crbug.com/712310 + MediaLog media_log; + BoxReader* reader = new BoxReader(buf, buf_size, &media_log, true); // Concatenated boxes are passed in without a wrapping parent box. Set // |box_size_| to the concatenated buffer length to mimic having already @@ -170,8 +172,7 @@ } // static -bool BoxReader::IsValidTopLevelBox(const FourCC& type, - const scoped_refptr<MediaLog>& media_log) { +bool BoxReader::IsValidTopLevelBox(const FourCC& type, MediaLog* media_log) { switch (type) { case FOURCC_FTYP: case FOURCC_PDIN:
diff --git a/media/formats/mp4/box_reader.h b/media/formats/mp4/box_reader.h index ac5495c..96e9ae53 100644 --- a/media/formats/mp4/box_reader.h +++ b/media/formats/mp4/box_reader.h
@@ -101,7 +101,7 @@ // |buf| is retained but not owned, and must outlive the BoxReader instance. static BoxReader* ReadTopLevelBox(const uint8_t* buf, const size_t buf_size, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, bool* err); // Read the box header from the current buffer. This function returns true if @@ -112,7 +112,7 @@ // |buf| is not retained. static bool StartTopLevelBox(const uint8_t* buf, const size_t buf_size, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, FourCC* type, size_t* box_size, bool* err) WARN_UNUSED_RESULT; @@ -128,8 +128,7 @@ // Returns true if |type| is recognized to be a top-level box, false // otherwise. This returns true for some boxes which we do not parse. // Helpful in debugging misaligned appends. - static bool IsValidTopLevelBox(const FourCC& type, - const scoped_refptr<MediaLog>& media_log); + static bool IsValidTopLevelBox(const FourCC& type, MediaLog* media_log); // Scan through all boxes within the current box, starting at the current // buffer position. Must be called before any of the *Child functions work. @@ -183,14 +182,14 @@ uint8_t version() const { return version_; } uint32_t flags() const { return flags_; } - const scoped_refptr<MediaLog>& media_log() const { return media_log_; } + MediaLog* media_log() const { return media_log_; } private: // Create a BoxReader from |buf|. |is_EOS| should be true if |buf| is // complete stream (i.e. no additional data is expected to be appended). BoxReader(const uint8_t* buf, const size_t buf_size, - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, bool is_EOS); // Must be called immediately after init. If the return is false, this @@ -209,7 +208,7 @@ template <typename T> bool ReadAllChildrenInternal(std::vector<T>* children, bool check_box_type); - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; size_t box_size_; bool box_size_known_; FourCC type_;
diff --git a/media/formats/mp4/box_reader_unittest.cc b/media/formats/mp4/box_reader_unittest.cc index 818d807..08d0bb79 100644 --- a/media/formats/mp4/box_reader_unittest.cc +++ b/media/formats/mp4/box_reader_unittest.cc
@@ -83,7 +83,7 @@ class BoxReaderTest : public testing::Test { public: - BoxReaderTest() : media_log_(new StrictMock<MockMediaLog>()) {} + BoxReaderTest() {} protected: std::vector<uint8_t> GetBuf() { @@ -95,7 +95,7 @@ bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(&buf[0], buf.size(), media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size(), &media_log_, &err)); EXPECT_FALSE(err); EXPECT_TRUE(reader); @@ -127,7 +127,7 @@ bool err; std::unique_ptr<BoxReader> reader(BoxReader::ReadTopLevelBox( - &buffer_wrapper[0], buffer_wrapper.size(), media_log_, &err)); + &buffer_wrapper[0], buffer_wrapper.size(), &media_log_, &err)); EXPECT_FALSE(err); EXPECT_TRUE(reader); EXPECT_EQ(FOURCC_EMSG, reader->type()); @@ -148,14 +148,14 @@ EXPECT_FALSE(reader->ReadAllChildrenAndCheckFourCC(&children)); } - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; }; TEST_F(BoxReaderTest, ExpectedOperationTest) { std::vector<uint8_t> buf = GetBuf(); bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(&buf[0], buf.size(), media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size(), &media_log_, &err)); EXPECT_FALSE(err); EXPECT_TRUE(reader.get()); @@ -183,7 +183,7 @@ // Create a soft failure by truncating the outer box. std::unique_ptr<BoxReader> r( - BoxReader::ReadTopLevelBox(&buf[0], buf.size() - 2, media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size() - 2, &media_log_, &err)); EXPECT_FALSE(err); EXPECT_FALSE(r.get()); @@ -196,7 +196,7 @@ // Make an inner box too big for its outer box. buf[25] = 1; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(&buf[0], buf.size(), media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size(), &media_log_, &err)); SkipBox box; EXPECT_FALSE(box.Parse(reader.get())); @@ -215,7 +215,7 @@ EXPECT_MEDIA_LOG(HasSubstr("Unrecognized top-level box type DALE")); std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(&buf[0], buf.size(), media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size(), &media_log_, &err)); EXPECT_FALSE(reader.get()); EXPECT_TRUE(err); } @@ -224,7 +224,7 @@ std::vector<uint8_t> buf = GetBuf(); bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(&buf[0], buf.size(), media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size(), &media_log_, &err)); EXPECT_TRUE(reader->SkipBytes(16) && reader->ScanChildren()); @@ -248,7 +248,7 @@ buf[3] = 0x38; bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(&buf[0], buf.size(), media_log_, &err)); + BoxReader::ReadTopLevelBox(&buf[0], buf.size(), &media_log_, &err)); std::vector<PsshBox> kids; EXPECT_TRUE(reader->SkipBytes(16) && reader->ReadAllChildren(&kids)); @@ -306,7 +306,7 @@ bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(kData, sizeof(kData), media_log_, &err)); + BoxReader::ReadTopLevelBox(kData, sizeof(kData), &media_log_, &err)); EXPECT_FALSE(err); EXPECT_TRUE(reader); @@ -331,7 +331,7 @@ bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(kData, sizeof(kData), media_log_, &err)); + BoxReader::ReadTopLevelBox(kData, sizeof(kData), &media_log_, &err)); EXPECT_FALSE(err); EXPECT_TRUE(reader); @@ -352,7 +352,7 @@ bool err; std::unique_ptr<BoxReader> reader( - BoxReader::ReadTopLevelBox(kData, sizeof(kData), media_log_, &err)); + BoxReader::ReadTopLevelBox(kData, sizeof(kData), &media_log_, &err)); EXPECT_FALSE(err); EXPECT_TRUE(reader);
diff --git a/media/formats/mp4/dolby_vision.cc b/media/formats/mp4/dolby_vision.cc index c40decd..fd32c85f 100644 --- a/media/formats/mp4/dolby_vision.cc +++ b/media/formats/mp4/dolby_vision.cc
@@ -32,14 +32,15 @@ return ParseInternal(reader, reader->media_log()); } -bool DolbyVisionConfiguration::Parse(const uint8_t* data, int data_size) { +bool DolbyVisionConfiguration::ParseForTesting(const uint8_t* data, + int data_size) { BufferReader reader(data, data_size); - return ParseInternal(&reader, new MediaLog()); + MediaLog media_log; + return ParseInternal(&reader, &media_log); } -bool DolbyVisionConfiguration::ParseInternal( - BufferReader* reader, - const scoped_refptr<MediaLog>& media_log) { +bool DolbyVisionConfiguration::ParseInternal(BufferReader* reader, + MediaLog* media_log) { uint16_t profile_track_indication = 0; RCHECK(reader->Read1(&dv_version_major) && reader->Read1(&dv_version_minor) && reader->Read2(&profile_track_indication));
diff --git a/media/formats/mp4/dolby_vision.h b/media/formats/mp4/dolby_vision.h index f527975e..3a0561a 100644 --- a/media/formats/mp4/dolby_vision.h +++ b/media/formats/mp4/dolby_vision.h
@@ -25,7 +25,7 @@ // context and therefore the box header is not expected to be present // in |data|. // Returns true if |data| was successfully parsed. - bool Parse(const uint8_t* data, int data_size); + bool ParseForTesting(const uint8_t* data, int data_size); uint8_t dv_version_major; uint8_t dv_version_minor; @@ -38,8 +38,7 @@ VideoCodecProfile codec_profile; private: - bool ParseInternal(BufferReader* reader, - const scoped_refptr<MediaLog>& media_log); + bool ParseInternal(BufferReader* reader, MediaLog* media_log); }; } // namespace mp4
diff --git a/media/formats/mp4/dolby_vision_unittest.cc b/media/formats/mp4/dolby_vision_unittest.cc index f24f0908..959bf22 100644 --- a/media/formats/mp4/dolby_vision_unittest.cc +++ b/media/formats/mp4/dolby_vision_unittest.cc
@@ -16,7 +16,7 @@ DolbyVisionConfiguration dv_config; uint8_t data[] = {0x00, 0x00, 0x00, 0x0E}; - dv_config.Parse(data, sizeof(data)); + dv_config.ParseForTesting(data, sizeof(data)); EXPECT_EQ(dv_config.dv_version_major, 0); EXPECT_EQ(dv_config.dv_version_minor, 0); @@ -31,7 +31,7 @@ DolbyVisionConfiguration dv_config; uint8_t data[] = {0x00, 0x00, 0x08, 0x16}; - dv_config.Parse(data, sizeof(data)); + dv_config.ParseForTesting(data, sizeof(data)); EXPECT_EQ(dv_config.dv_version_major, 0); EXPECT_EQ(dv_config.dv_version_minor, 0); @@ -46,7 +46,7 @@ DolbyVisionConfiguration dv_config; uint8_t data[] = {0x00, 0x00, 0x0A, 0x17}; - dv_config.Parse(data, sizeof(data)); + dv_config.ParseForTesting(data, sizeof(data)); EXPECT_EQ(dv_config.dv_version_major, 0); EXPECT_EQ(dv_config.dv_version_minor, 0); @@ -61,7 +61,7 @@ DolbyVisionConfiguration dv_config; uint8_t data[] = {0x00, 0x00, 0x0C}; - EXPECT_FALSE(dv_config.Parse(data, sizeof(data))); + EXPECT_FALSE(dv_config.ParseForTesting(data, sizeof(data))); } } // namespace mp4
diff --git a/media/formats/mp4/hevc.cc b/media/formats/mp4/hevc.cc index de8fe962..c0224ab 100644 --- a/media/formats/mp4/hevc.cc +++ b/media/formats/mp4/hevc.cc
@@ -48,7 +48,9 @@ bool HEVCDecoderConfigurationRecord::Parse(const uint8_t* data, int data_size) { BufferReader reader(data, data_size); - return ParseInternal(&reader, new MediaLog()); + // TODO(wolenetz): Questionable MediaLog usage, http://crbug.com/712310 + MediaLog media_log; + return ParseInternal(&reader, &media_log); } HEVCDecoderConfigurationRecord::HVCCNALArray::HVCCNALArray() @@ -59,9 +61,8 @@ HEVCDecoderConfigurationRecord::HVCCNALArray::~HVCCNALArray() {} -bool HEVCDecoderConfigurationRecord::ParseInternal( - BufferReader* reader, - const scoped_refptr<MediaLog>& media_log) { +bool HEVCDecoderConfigurationRecord::ParseInternal(BufferReader* reader, + MediaLog* media_log) { uint8_t profile_indication = 0; uint32_t general_constraint_indicator_flags_hi = 0; uint16_t general_constraint_indicator_flags_lo = 0;
diff --git a/media/formats/mp4/hevc.h b/media/formats/mp4/hevc.h index c653e81..afa184d 100644 --- a/media/formats/mp4/hevc.h +++ b/media/formats/mp4/hevc.h
@@ -64,8 +64,7 @@ VideoCodecProfile GetVideoProfile() const; private: - bool ParseInternal(BufferReader* reader, - const scoped_refptr<MediaLog>& media_log); + bool ParseInternal(BufferReader* reader, MediaLog* media_log); }; class MEDIA_EXPORT HEVC {
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc index 1f914bf..2079b98 100644 --- a/media/formats/mp4/mp4_stream_parser.cc +++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -95,7 +95,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { DCHECK_EQ(state_, kWaitingForInit); DCHECK(init_cb_.is_null()); DCHECK(!init_cb.is_null());
diff --git a/media/formats/mp4/mp4_stream_parser.h b/media/formats/mp4/mp4_stream_parser.h index c099743..888cf30 100644 --- a/media/formats/mp4/mp4_stream_parser.h +++ b/media/formats/mp4/mp4_stream_parser.h
@@ -37,7 +37,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) override; + MediaLog* media_log) override; void Flush() override; bool Parse(const uint8_t* buf, int size) override; @@ -94,7 +94,7 @@ EncryptedMediaInitDataCB encrypted_media_init_data_cb_; NewMediaSegmentCB new_segment_cb_; EndMediaSegmentCB end_of_segment_cb_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; OffsetByteQueue queue_;
diff --git a/media/formats/mp4/mp4_stream_parser_unittest.cc b/media/formats/mp4/mp4_stream_parser_unittest.cc index ba32379..59a8dcb 100644 --- a/media/formats/mp4/mp4_stream_parser_unittest.cc +++ b/media/formats/mp4/mp4_stream_parser_unittest.cc
@@ -51,8 +51,7 @@ class MP4StreamParserTest : public testing::Test { public: MP4StreamParserTest() - : media_log_(new StrictMock<MockMediaLog>()), - configs_received_(false), + : configs_received_(false), lower_bound_( DecodeTimestamp::FromPresentationTime(base::TimeDelta::Max())) { std::set<int> audio_object_types; @@ -61,7 +60,7 @@ } protected: - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; std::unique_ptr<MP4StreamParser> parser_; bool configs_received_; std::unique_ptr<MediaTracks> media_tracks_; @@ -192,7 +191,7 @@ base::Bind(&MP4StreamParserTest::KeyNeededF, base::Unretained(this)), base::Bind(&MP4StreamParserTest::NewSegmentF, base::Unretained(this)), base::Bind(&MP4StreamParserTest::EndOfSegmentF, base::Unretained(this)), - media_log_); + &media_log_); } StreamParser::InitParameters GetDefaultInitParametersExpectations() {
diff --git a/media/formats/mp4/track_run_iterator.cc b/media/formats/mp4/track_run_iterator.cc index 545e39c..25fc5ec 100644 --- a/media/formats/mp4/track_run_iterator.cc +++ b/media/formats/mp4/track_run_iterator.cc
@@ -94,8 +94,7 @@ TimeDeltaFromRational(numer, denom)); } -TrackRunIterator::TrackRunIterator(const Movie* moov, - const scoped_refptr<MediaLog>& media_log) +TrackRunIterator::TrackRunIterator(const Movie* moov, MediaLog* media_log) : moov_(moov), media_log_(media_log), sample_offset_(0) { CHECK(moov); } @@ -117,7 +116,7 @@ SampleInfo* sample_info, const SampleDependsOn sdtp_sample_depends_on, bool is_audio, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { if (i < trun.sample_sizes.size()) { sample_info->size = trun.sample_sizes[i]; } else if (tfhd.default_sample_size > 0) {
diff --git a/media/formats/mp4/track_run_iterator.h b/media/formats/mp4/track_run_iterator.h index 127cafa..d7198888 100644 --- a/media/formats/mp4/track_run_iterator.h +++ b/media/formats/mp4/track_run_iterator.h
@@ -37,7 +37,7 @@ public: // Create a new TrackRunIterator. A reference to |moov| will be retained for // the lifetime of this object. - TrackRunIterator(const Movie* moov, const scoped_refptr<MediaLog>& media_log); + TrackRunIterator(const Movie* moov, MediaLog* media_log); ~TrackRunIterator(); // Sets up the iterator to handle all the runs from the current fragment. @@ -105,7 +105,7 @@ #endif const Movie* moov_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; std::vector<TrackRunInfo> runs_; std::vector<TrackRunInfo>::const_iterator run_itr_;
diff --git a/media/formats/mp4/track_run_iterator_unittest.cc b/media/formats/mp4/track_run_iterator_unittest.cc index 7c2043b..992d7b2 100644 --- a/media/formats/mp4/track_run_iterator_unittest.cc +++ b/media/formats/mp4/track_run_iterator_unittest.cc
@@ -150,13 +150,11 @@ class TrackRunIteratorTest : public testing::Test { public: - TrackRunIteratorTest() : media_log_(new StrictMock<MockMediaLog>()) { - CreateMovie(); - } + TrackRunIteratorTest() { CreateMovie(); } protected: + StrictMock<MockMediaLog> media_log_; Movie moov_; - scoped_refptr<StrictMock<MockMediaLog>> media_log_; std::unique_ptr<TrackRunIterator> iter_; void CreateMovie() { @@ -486,14 +484,14 @@ }; TEST_F(TrackRunIteratorTest, NoRunsTest) { - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); ASSERT_TRUE(iter_->Init(MovieFragment())); EXPECT_FALSE(iter_->IsRunValid()); EXPECT_FALSE(iter_->IsSampleValid()); } TEST_F(TrackRunIteratorTest, BasicOperationTest) { - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); // Test that runs are sorted correctly, and that properties of the initial @@ -550,7 +548,7 @@ moov_.extends.tracks[0].default_sample_duration = 50; moov_.extends.tracks[0].default_sample_size = 3; moov_.extends.tracks[0].default_sample_flags = ToSampleFlags("UN"); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); moof.tracks[0].header.has_default_sample_flags = false; moof.tracks[0].header.default_sample_size = 0; @@ -569,7 +567,7 @@ // Ensure that keyframes are flagged correctly in the face of BMFF boxes which // explicitly specify the flags for the first sample in a run and rely on // defaults for all subsequent samples - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); moof.tracks[1].header.has_default_sample_flags = true; moof.tracks[1].header.default_sample_flags = ToSampleFlags("UN"); @@ -585,7 +583,7 @@ // Verify that parsing fails if a reserved value is in the sample flags. TEST_F(TrackRunIteratorTest, SampleInfoTest_ReservedInSampleFlags) { EXPECT_MEDIA_LOG(ReservedValueInSampleDependencyInfo()); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); // Change the "depends on" field on one of the samples to a // reserved value. @@ -596,7 +594,7 @@ // Verify that parsing fails if a reserved value is in the default sample flags. TEST_F(TrackRunIteratorTest, SampleInfoTest_ReservedInDefaultSampleFlags) { EXPECT_MEDIA_LOG(ReservedValueInSampleDependencyInfo()); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); // Set the default flag to contain a reserved "depends on" value. moof.tracks[0].header.default_sample_flags = ToSampleFlags("RN"); @@ -619,7 +617,7 @@ // (that is, 2 / kVideoTimescale) and a duration of zero (which is treated as // infinite according to 14496-12:2012). This will cause the first 80ms of the // media timeline - which will be empty, due to CTS biasing - to be discarded. - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); EditListEntry entry; entry.segment_duration = 0; entry.media_time = 2; @@ -656,7 +654,7 @@ } TEST_F(TrackRunIteratorTest, IgnoreUnknownAuxInfoTest) { - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); moof.tracks[1].auxiliary_offset.offsets.push_back(50); moof.tracks[1].auxiliary_size.default_sample_info_size = 2; @@ -670,7 +668,7 @@ TEST_F(TrackRunIteratorTest, DecryptConfigTestWithSampleEncryptionAndNoSubsample) { AddEncryption(&moov_.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); AddSampleEncryption(!SampleEncryption::kUseSubsampleEncryption, @@ -705,7 +703,7 @@ TEST_F(TrackRunIteratorTest, DecryptConfigTestWithSampleEncryptionAndSubsample) { AddEncryption(&moov_.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); AddSampleEncryption(SampleEncryption::kUseSubsampleEncryption, @@ -751,7 +749,7 @@ TEST_F(TrackRunIteratorTest, DecryptConfigTestWithAuxInfo) { AddEncryption(&moov_.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); AddAuxInfoHeaders(50, &moof.tracks[1]); @@ -798,7 +796,7 @@ AddCencSampleGroup(&moov_.tracks[0], &moof.tracks[0], kSampleToGroupTable, arraysize(kSampleToGroupTable)); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); ASSERT_TRUE(InitMoofWithArbitraryAuxInfo(&moof)); std::string cenc_sample_group_key_id( @@ -829,7 +827,7 @@ AddCencSampleGroup(&moov_.tracks[0], &moof.tracks[0], kSampleToGroupTable, arraysize(kSampleToGroupTable)); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); ASSERT_TRUE(InitMoofWithArbitraryAuxInfo(&moof)); std::string track_encryption_key_id(kKeyId, kKeyId + arraysize(kKeyId)); @@ -875,7 +873,7 @@ TEST_F(TrackRunIteratorTest, SharedAuxInfoTest) { AddEncryption(&moov_.tracks[0]); AddEncryption(&moov_.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); moof.tracks[0].runs.resize(1); @@ -917,7 +915,7 @@ TEST_F(TrackRunIteratorTest, UnexpectedOrderingTest) { AddEncryption(&moov_.tracks[0]); AddEncryption(&moov_.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); AddAuxInfoHeaders(20000, &moof.tracks[0]); @@ -961,7 +959,7 @@ moof.tracks[1].runs[0].sample_count = 6; SetFlagsOnSamples("US UN OS ON NS NN", &moof.tracks[0].runs[0]); SetFlagsOnSamples("US UN OS ON NS NN", &moof.tracks[1].runs[0]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); ASSERT_TRUE(iter_->Init(moof)); EXPECT_TRUE(iter_->IsRunValid()); @@ -992,7 +990,7 @@ #if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME) TEST_F(TrackRunIteratorTest, DecryptConfigTestWithConstantIvNoAuxInfo) { AddEncryptionCbcs(&moov_.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); MovieFragment moof = CreateFragment(); @@ -1040,7 +1038,7 @@ AddCencSampleGroup(&moov_.tracks[1], &moof.tracks[1], kSampleToGroupTable, arraysize(kSampleToGroupTable)); AddConstantIvsToCencSampleGroup(&moov_.tracks[1], &moof.tracks[1]); - iter_.reset(new TrackRunIterator(&moov_, media_log_)); + iter_.reset(new TrackRunIterator(&moov_, &media_log_)); ASSERT_TRUE(iter_->Init(moof)); // The run for track 2 will be the second.
diff --git a/media/formats/mpeg/mpeg1_audio_stream_parser.cc b/media/formats/mpeg/mpeg1_audio_stream_parser.cc index a86c1e1b..843b3ad 100644 --- a/media/formats/mpeg/mpeg1_audio_stream_parser.cc +++ b/media/formats/mpeg/mpeg1_audio_stream_parser.cc
@@ -88,10 +88,9 @@ static const int kCodecDelay = 529; // static -bool MPEG1AudioStreamParser::ParseHeader( - const scoped_refptr<MediaLog>& media_log, - const uint8_t* data, - Header* header) { +bool MPEG1AudioStreamParser::ParseHeader(MediaLog* media_log, + const uint8_t* data, + Header* header) { BitReader reader(data, kHeaderSize); int sync; int version;
diff --git a/media/formats/mpeg/mpeg1_audio_stream_parser.h b/media/formats/mpeg/mpeg1_audio_stream_parser.h index fc0ce35..f162bd10 100644 --- a/media/formats/mpeg/mpeg1_audio_stream_parser.h +++ b/media/formats/mpeg/mpeg1_audio_stream_parser.h
@@ -64,7 +64,7 @@ // Parses the header starting at |data|. // Assumption: size of array |data| should be at least |kHeaderSize|. // Returns false if the header is not valid. - static bool ParseHeader(const scoped_refptr<MediaLog>& media_log, + static bool ParseHeader(MediaLog* media_log, const uint8_t* data, Header* header);
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc index 338a202..4c377e6 100644 --- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc +++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
@@ -69,7 +69,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { DVLOG(1) << __func__; DCHECK_EQ(state_, UNINITIALIZED); init_cb_ = init_cb;
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.h b/media/formats/mpeg/mpeg_audio_stream_parser_base.h index febd814..f0712380 100644 --- a/media/formats/mpeg/mpeg_audio_stream_parser_base.h +++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.h
@@ -41,7 +41,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) override; + MediaLog* media_log) override; void Flush() override; bool Parse(const uint8_t* buf, int size) override; @@ -85,7 +85,7 @@ bool* metadata_frame, std::vector<uint8_t>* extra_data) const = 0; - const scoped_refptr<MediaLog>& media_log() const { return media_log_; } + MediaLog* media_log() const { return media_log_; } private: enum State { @@ -141,7 +141,7 @@ NewBuffersCB new_buffers_cb_; NewMediaSegmentCB new_segment_cb_; EndMediaSegmentCB end_of_segment_cb_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; ByteQueue queue_;
diff --git a/media/formats/webm/webm_audio_client.cc b/media/formats/webm/webm_audio_client.cc index 173d81f..d6eda2f 100644 --- a/media/formats/webm/webm_audio_client.cc +++ b/media/formats/webm/webm_audio_client.cc
@@ -10,8 +10,7 @@ namespace media { -WebMAudioClient::WebMAudioClient(const scoped_refptr<MediaLog>& media_log) - : media_log_(media_log) { +WebMAudioClient::WebMAudioClient(MediaLog* media_log) : media_log_(media_log) { Reset(); }
diff --git a/media/formats/webm/webm_audio_client.h b/media/formats/webm/webm_audio_client.h index 06d7e0c6..5b3357da 100644 --- a/media/formats/webm/webm_audio_client.h +++ b/media/formats/webm/webm_audio_client.h
@@ -21,7 +21,7 @@ // Helper class used to parse an Audio element inside a TrackEntry element. class WebMAudioClient : public WebMParserClient { public: - explicit WebMAudioClient(const scoped_refptr<MediaLog>& media_log); + explicit WebMAudioClient(MediaLog* media_log); ~WebMAudioClient() override; // Reset this object's state so it can process a new audio track element. @@ -45,7 +45,7 @@ bool OnUInt(int id, int64_t val) override; bool OnFloat(int id, double val) override; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; int channels_; double samples_per_second_; double output_samples_per_second_;
diff --git a/media/formats/webm/webm_cluster_parser.cc b/media/formats/webm/webm_cluster_parser.cc index b2718d5..9b367b4 100644 --- a/media/formats/webm/webm_cluster_parser.cc +++ b/media/formats/webm/webm_cluster_parser.cc
@@ -45,7 +45,7 @@ const std::string& audio_encryption_key_id, const std::string& video_encryption_key_id, const AudioCodec audio_codec, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : timecode_multiplier_(timecode_scale / 1000.0), ignored_tracks_(ignored_tracks), audio_encryption_key_id_(audio_encryption_key_id), @@ -604,7 +604,7 @@ WebMClusterParser::Track::Track(int track_num, bool is_video, base::TimeDelta default_duration, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : track_num_(track_num), is_video_(is_video), default_duration_(default_duration),
diff --git a/media/formats/webm/webm_cluster_parser.h b/media/formats/webm/webm_cluster_parser.h index 4fd9d84..03ac73d 100644 --- a/media/formats/webm/webm_cluster_parser.h +++ b/media/formats/webm/webm_cluster_parser.h
@@ -54,7 +54,7 @@ Track(int track_num, bool is_video, base::TimeDelta default_duration, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); Track(const Track& other); ~Track(); @@ -141,7 +141,7 @@ // splicing when these estimates are observed in SourceBufferStream. base::TimeDelta estimated_next_frame_duration_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; }; typedef std::map<int, Track> TextTrackMap; @@ -157,7 +157,7 @@ const std::string& audio_encryption_key_id, const std::string& video_encryption_key_id, const AudioCodec audio_codec, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~WebMClusterParser() override; // Resets the parser state so it can accept a new cluster. @@ -315,7 +315,7 @@ // kInfiniteDuration if no buffers are currently missing duration. DecodeTimestamp ready_buffer_upper_bound_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; DISALLOW_IMPLICIT_CONSTRUCTORS(WebMClusterParser); };
diff --git a/media/formats/webm/webm_cluster_parser_unittest.cc b/media/formats/webm/webm_cluster_parser_unittest.cc index 7a66958..ced132e 100644 --- a/media/formats/webm/webm_cluster_parser_unittest.cc +++ b/media/formats/webm/webm_cluster_parser_unittest.cc
@@ -294,9 +294,7 @@ class WebMClusterParserTest : public testing::Test { public: - WebMClusterParserTest() - : media_log_(new StrictMock<MockMediaLog>()), - parser_(CreateDefaultParser()) {} + WebMClusterParserTest() : parser_(CreateDefaultParser()) {} protected: void ResetParserToHaveDefaultDurations() { @@ -326,7 +324,7 @@ kTimecodeScale, kAudioTrackNum, audio_default_duration, kVideoTrackNum, video_default_duration, text_tracks, ignored_tracks, audio_encryption_key_id, video_encryption_key_id, audio_codec, - media_log_); + &media_log_); } // Create a default version of the parser for test. @@ -365,7 +363,7 @@ video_encryption_key_id, audio_codec); } - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; std::unique_ptr<WebMClusterParser> parser_; private: @@ -1094,7 +1092,7 @@ ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); // Fail early if any iteration fails to meet the logging expectations. - ASSERT_TRUE(Mock::VerifyAndClearExpectations(media_log_.get())); + ASSERT_TRUE(Mock::VerifyAndClearExpectations(&media_log_)); loop_count++; } @@ -1141,7 +1139,7 @@ ASSERT_TRUE(VerifyBuffers(parser_, block_infos, block_count)); // Fail early if any iteration fails to meet the logging expectations. - ASSERT_TRUE(Mock::VerifyAndClearExpectations(media_log_.get())); + ASSERT_TRUE(Mock::VerifyAndClearExpectations(&media_log_)); loop_count++; }
diff --git a/media/formats/webm/webm_content_encodings_client.cc b/media/formats/webm/webm_content_encodings_client.cc index 82dbd60..105a4918 100644 --- a/media/formats/webm/webm_content_encodings_client.cc +++ b/media/formats/webm/webm_content_encodings_client.cc
@@ -9,12 +9,10 @@ namespace media { -WebMContentEncodingsClient::WebMContentEncodingsClient( - const scoped_refptr<MediaLog>& media_log) +WebMContentEncodingsClient::WebMContentEncodingsClient(MediaLog* media_log) : media_log_(media_log), content_encryption_encountered_(false), - content_encodings_ready_(false) { -} + content_encodings_ready_(false) {} WebMContentEncodingsClient::~WebMContentEncodingsClient() { }
diff --git a/media/formats/webm/webm_content_encodings_client.h b/media/formats/webm/webm_content_encodings_client.h index a72db118..23820c52 100644 --- a/media/formats/webm/webm_content_encodings_client.h +++ b/media/formats/webm/webm_content_encodings_client.h
@@ -25,7 +25,7 @@ // Parser for WebM ContentEncodings element. class MEDIA_EXPORT WebMContentEncodingsClient : public WebMParserClient { public: - explicit WebMContentEncodingsClient(const scoped_refptr<MediaLog>& media_log); + explicit WebMContentEncodingsClient(MediaLog* media_log); ~WebMContentEncodingsClient() override; const ContentEncodings& content_encodings() const; @@ -37,7 +37,7 @@ bool OnBinary(int id, const uint8_t* data, int size) override; private: - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; std::unique_ptr<ContentEncoding> cur_content_encoding_; bool content_encryption_encountered_; ContentEncodings content_encodings_;
diff --git a/media/formats/webm/webm_content_encodings_client_unittest.cc b/media/formats/webm/webm_content_encodings_client_unittest.cc index 268eee0..9dcc12c 100644 --- a/media/formats/webm/webm_content_encodings_client_unittest.cc +++ b/media/formats/webm/webm_content_encodings_client_unittest.cc
@@ -51,9 +51,7 @@ class WebMContentEncodingsClientTest : public testing::Test { public: WebMContentEncodingsClientTest() - : media_log_(new StrictMock<MockMediaLog>()), - client_(media_log_), - parser_(kWebMIdContentEncodings, &client_) {} + : client_(&media_log_), parser_(kWebMIdContentEncodings, &client_) {} void ParseAndExpectToFail(const uint8_t* buf, int size) { int result = parser_.Parse(buf, size); @@ -61,7 +59,7 @@ } protected: - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; WebMContentEncodingsClient client_; WebMListParser parser_; };
diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc index fc5b680..99b5321 100644 --- a/media/formats/webm/webm_stream_parser.cc +++ b/media/formats/webm/webm_stream_parser.cc
@@ -38,7 +38,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { DCHECK_EQ(state_, kWaitingForInit); DCHECK(init_cb_.is_null()); DCHECK(!init_cb.is_null());
diff --git a/media/formats/webm/webm_stream_parser.h b/media/formats/webm/webm_stream_parser.h index 0259e083..bc79c60 100644 --- a/media/formats/webm/webm_stream_parser.h +++ b/media/formats/webm/webm_stream_parser.h
@@ -35,7 +35,7 @@ const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, const NewMediaSegmentCB& new_segment_cb, const EndMediaSegmentCB& end_of_segment_cb, - const scoped_refptr<MediaLog>& media_log) override; + MediaLog* media_log) override; void Flush() override; bool Parse(const uint8_t* buf, int size) override; @@ -80,7 +80,7 @@ NewMediaSegmentCB new_segment_cb_; EndMediaSegmentCB end_of_segment_cb_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; bool unknown_segment_size_;
diff --git a/media/formats/webm/webm_stream_parser_unittest.cc b/media/formats/webm/webm_stream_parser_unittest.cc index 1251f2d8..b1d3eaa 100644 --- a/media/formats/webm/webm_stream_parser_unittest.cc +++ b/media/formats/webm/webm_stream_parser_unittest.cc
@@ -23,8 +23,7 @@ class WebMStreamParserTest : public testing::Test { public: - WebMStreamParserTest() - : media_log_(new testing::StrictMock<MockMediaLog>()) {} + WebMStreamParserTest() {} protected: void ParseWebMFile(const std::string& filename, @@ -52,7 +51,7 @@ base::Unretained(this)), base::Bind(&WebMStreamParserTest::EndMediaSegmentCB, base::Unretained(this)), - media_log_); + &media_log_); bool result = parser_->Parse(buffer->data(), buffer->data_size()); EXPECT_TRUE(result); } @@ -86,7 +85,7 @@ MOCK_METHOD0(NewMediaSegmentCB, void()); MOCK_METHOD0(EndMediaSegmentCB, void()); - scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_; + testing::StrictMock<MockMediaLog> media_log_; std::unique_ptr<WebMStreamParser> parser_; std::unique_ptr<MediaTracks> media_tracks_; };
diff --git a/media/formats/webm/webm_tracks_parser.cc b/media/formats/webm/webm_tracks_parser.cc index 6628766..afa56ec 100644 --- a/media/formats/webm/webm_tracks_parser.cc +++ b/media/formats/webm/webm_tracks_parser.cc
@@ -45,8 +45,7 @@ return base::TimeDelta::FromMicroseconds(mult); } -WebMTracksParser::WebMTracksParser(const scoped_refptr<MediaLog>& media_log, - bool ignore_text_tracks) +WebMTracksParser::WebMTracksParser(MediaLog* media_log, bool ignore_text_tracks) : ignore_text_tracks_(ignore_text_tracks), media_log_(media_log), audio_client_(media_log),
diff --git a/media/formats/webm/webm_tracks_parser.h b/media/formats/webm/webm_tracks_parser.h index 8cef4fba..1e8cb04 100644 --- a/media/formats/webm/webm_tracks_parser.h +++ b/media/formats/webm/webm_tracks_parser.h
@@ -31,8 +31,7 @@ // Parser for WebM Tracks element. class MEDIA_EXPORT WebMTracksParser : public WebMParserClient { public: - WebMTracksParser(const scoped_refptr<MediaLog>& media_log, - bool ignore_text_tracks); + WebMTracksParser(MediaLog* media_log, bool ignore_text_tracks); ~WebMTracksParser() override; // Parses a WebM Tracks element in |buf|. @@ -126,7 +125,7 @@ std::set<int64_t> ignored_tracks_; std::string audio_encryption_key_id_; std::string video_encryption_key_id_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; WebMAudioClient audio_client_; AudioDecoderConfig audio_decoder_config_;
diff --git a/media/formats/webm/webm_tracks_parser_unittest.cc b/media/formats/webm/webm_tracks_parser_unittest.cc index 1f3e08d..2cdb231 100644 --- a/media/formats/webm/webm_tracks_parser_unittest.cc +++ b/media/formats/webm/webm_tracks_parser_unittest.cc
@@ -30,7 +30,7 @@ class WebMTracksParserTest : public testing::Test { public: - WebMTracksParserTest() : media_log_(new StrictMock<MockMediaLog>()) {} + WebMTracksParserTest() {} protected: void VerifyTextTrackInfo(const uint8_t* buffer, @@ -39,7 +39,7 @@ const std::string& name, const std::string& language) { std::unique_ptr<WebMTracksParser> parser( - new WebMTracksParser(media_log_, false)); + new WebMTracksParser(&media_log_, false)); int result = parser->Parse(buffer, buffer_size); EXPECT_GT(result, 0); @@ -58,7 +58,7 @@ EXPECT_TRUE(config.language() == language); } - scoped_refptr<StrictMock<MockMediaLog>> media_log_; + StrictMock<MockMediaLog> media_log_; }; TEST_F(WebMTracksParserTest, SubtitleNoNameNoLang) { @@ -110,7 +110,7 @@ const std::vector<uint8_t> buf = tb.Finish(); std::unique_ptr<WebMTracksParser> parser( - new WebMTracksParser(media_log_, true)); + new WebMTracksParser(&media_log_, true)); EXPECT_MEDIA_LOG(HasSubstr("Ignoring text track 1")); EXPECT_MEDIA_LOG(HasSubstr("Ignoring text track 2")); @@ -126,7 +126,7 @@ EXPECT_TRUE(ignored_tracks.find(2) != ignored_tracks.end()); // Test again w/o ignoring the test tracks. - parser.reset(new WebMTracksParser(media_log_, false)); + parser.reset(new WebMTracksParser(&media_log_, false)); result = parser->Parse(&buf[0], buf.size()); EXPECT_GT(result, 0); @@ -147,7 +147,7 @@ const std::vector<uint8_t> buf = tb.Finish(); std::unique_ptr<WebMTracksParser> parser( - new WebMTracksParser(media_log_, true)); + new WebMTracksParser(&media_log_, true)); int result = parser->Parse(&buf[0], buf.size()); EXPECT_LE(0, result); EXPECT_EQ(static_cast<int>(buf.size()), result); @@ -177,7 +177,7 @@ const std::vector<uint8_t> buf = tb.Finish(); std::unique_ptr<WebMTracksParser> parser( - new WebMTracksParser(media_log_, true)); + new WebMTracksParser(&media_log_, true)); int result = parser->Parse(&buf[0], buf.size()); EXPECT_LE(0, result); EXPECT_EQ(static_cast<int>(buf.size()), result); @@ -200,7 +200,7 @@ const std::vector<uint8_t> buf = tb.Finish(); std::unique_ptr<WebMTracksParser> parser( - new WebMTracksParser(media_log_, true)); + new WebMTracksParser(&media_log_, true)); EXPECT_MEDIA_LOG(HasSubstr("Illegal 0ns audio TrackEntry DefaultDuration")); @@ -215,7 +215,7 @@ const std::vector<uint8_t> buf = tb.Finish(); std::unique_ptr<WebMTracksParser> parser( - new WebMTracksParser(media_log_, true)); + new WebMTracksParser(&media_log_, true)); EXPECT_GT(parser->Parse(&buf[0], buf.size()),0); }
diff --git a/media/formats/webm/webm_video_client.cc b/media/formats/webm/webm_video_client.cc index 1f8d288..3a48d2af 100644 --- a/media/formats/webm/webm_video_client.cc +++ b/media/formats/webm/webm_video_client.cc
@@ -9,8 +9,7 @@ namespace media { -WebMVideoClient::WebMVideoClient(const scoped_refptr<MediaLog>& media_log) - : media_log_(media_log) { +WebMVideoClient::WebMVideoClient(MediaLog* media_log) : media_log_(media_log) { Reset(); }
diff --git a/media/formats/webm/webm_video_client.h b/media/formats/webm/webm_video_client.h index abcd928..88c97e6 100644 --- a/media/formats/webm/webm_video_client.h +++ b/media/formats/webm/webm_video_client.h
@@ -22,7 +22,7 @@ // Helper class used to parse a Video element inside a TrackEntry element. class WebMVideoClient : public WebMParserClient { public: - explicit WebMVideoClient(const scoped_refptr<MediaLog>& media_log); + explicit WebMVideoClient(MediaLog* media_log); ~WebMVideoClient() override; // Reset this object's state so it can process a new video track element. @@ -48,7 +48,7 @@ bool OnBinary(int id, const uint8_t* data, int size) override; bool OnFloat(int id, double val) override; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; int64_t pixel_width_; int64_t pixel_height_; int64_t crop_bottom_;
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc index b330202b..2ee1df6 100644 --- a/media/gpu/video_encode_accelerator_unittest.cc +++ b/media/gpu/video_encode_accelerator_unittest.cc
@@ -730,6 +730,7 @@ enum State { UNINITIALIZED, INITIALIZED, DECODING, DECODER_ERROR }; + MediaLog media_log_; const VideoCodecProfile profile_; std::unique_ptr<FFmpegVideoDecoder> decoder_; VideoDecoder::DecodeCB decode_cb_; @@ -749,7 +750,7 @@ const base::Closure& flush_complete_cb, const base::Closure& decode_error_cb) : profile_(profile), - decoder_(new FFmpegVideoDecoder(make_scoped_refptr(new MediaLog()))), + decoder_(new FFmpegVideoDecoder(&media_log_)), decode_cb_( base::Bind(&VideoFrameQualityValidator::DecodeDone, AsWeakPtr())), eos_decode_cb_(
diff --git a/media/mojo/services/interface_factory_impl.cc b/media/mojo/services/interface_factory_impl.cc index 143e5b6..baac449 100644 --- a/media/mojo/services/interface_factory_impl.cc +++ b/media/mojo/services/interface_factory_impl.cc
@@ -37,14 +37,16 @@ InterfaceFactoryImpl::InterfaceFactoryImpl( service_manager::mojom::InterfaceProviderPtr interfaces, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, std::unique_ptr<service_manager::ServiceContextRef> connection_ref, MojoMediaClient* mojo_media_client) : +#if defined(ENABLE_MOJO_RENDERER) + media_log_(media_log), +#endif #if defined(ENABLE_MOJO_CDM) interfaces_(std::move(interfaces)), #endif - media_log_(media_log), connection_ref_(std::move(connection_ref)), mojo_media_client_(mojo_media_client) { DVLOG(1) << __func__;
diff --git a/media/mojo/services/interface_factory_impl.h b/media/mojo/services/interface_factory_impl.h index 19be2185..9c0cbb9 100644 --- a/media/mojo/services/interface_factory_impl.h +++ b/media/mojo/services/interface_factory_impl.h
@@ -25,7 +25,7 @@ public: InterfaceFactoryImpl( service_manager::mojom::InterfaceProviderPtr interfaces, - scoped_refptr<MediaLog> media_log, + MediaLog* media_log, std::unique_ptr<service_manager::ServiceContextRef> connection_ref, MojoMediaClient* mojo_media_client); ~InterfaceFactoryImpl() final; @@ -57,6 +57,7 @@ #endif // defined(ENABLE_MOJO_VIDEO_DECODER) #if defined(ENABLE_MOJO_RENDERER) + MediaLog* media_log_; std::unique_ptr<RendererFactory> renderer_factory_; mojo::StrongBindingSet<mojom::Renderer> renderer_bindings_; #endif // defined(ENABLE_MOJO_RENDERER) @@ -67,7 +68,6 @@ mojo::StrongBindingSet<mojom::ContentDecryptionModule> cdm_bindings_; #endif // defined(ENABLE_MOJO_CDM) - scoped_refptr<MediaLog> media_log_; std::unique_ptr<service_manager::ServiceContextRef> connection_ref_; MojoMediaClient* mojo_media_client_;
diff --git a/media/mojo/services/media_service.cc b/media/mojo/services/media_service.cc index e1b5145..a3ff2a53 100644 --- a/media/mojo/services/media_service.cc +++ b/media/mojo/services/media_service.cc
@@ -17,8 +17,7 @@ // TODO(xhwang): Hook up MediaLog when possible. MediaService::MediaService(std::unique_ptr<MojoMediaClient> mojo_media_client) - : mojo_media_client_(std::move(mojo_media_client)), - media_log_(new MediaLog()) { + : mojo_media_client_(std::move(mojo_media_client)) { DCHECK(mojo_media_client_); registry_.AddInterface<mojom::MediaService>(this); } @@ -59,7 +58,7 @@ mojo::MakeStrongBinding( base::MakeUnique<InterfaceFactoryImpl>( - std::move(host_interfaces), media_log_, ref_factory_->CreateRef(), + std::move(host_interfaces), &media_log_, ref_factory_->CreateRef(), mojo_media_client_.get()), std::move(request)); }
diff --git a/media/mojo/services/media_service.h b/media/mojo/services/media_service.h index 44171762..e77e4dd 100644 --- a/media/mojo/services/media_service.h +++ b/media/mojo/services/media_service.h
@@ -12,6 +12,7 @@ #include "base/callback.h" #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" +#include "media/base/media_log.h" #include "media/mojo/interfaces/interface_factory.mojom.h" #include "media/mojo/interfaces/media_service.mojom.h" #include "media/mojo/services/media_mojo_export.h" @@ -25,7 +26,6 @@ namespace media { -class MediaLog; class MojoMediaClient; class MEDIA_MOJO_EXPORT MediaService @@ -59,7 +59,7 @@ // a unique_ptr here. std::unique_ptr<MojoMediaClient> mojo_media_client_; - scoped_refptr<MediaLog> media_log_; + MediaLog media_log_; std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_; service_manager::BinderRegistry registry_;
diff --git a/media/mojo/services/mojo_media_client.cc b/media/mojo/services/mojo_media_client.cc index 9ced9b2..59e657e2 100644 --- a/media/mojo/services/mojo_media_client.cc +++ b/media/mojo/services/mojo_media_client.cc
@@ -43,7 +43,7 @@ } std::unique_ptr<RendererFactory> MojoMediaClient::CreateRendererFactory( - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { return nullptr; }
diff --git a/media/mojo/services/mojo_media_client.h b/media/mojo/services/mojo_media_client.h index f376ffd..442481cf4 100644 --- a/media/mojo/services/mojo_media_client.h +++ b/media/mojo/services/mojo_media_client.h
@@ -63,7 +63,7 @@ // Returns the RendererFactory to be used by MojoRendererService. virtual std::unique_ptr<RendererFactory> CreateRendererFactory( - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); // Returns the CdmFactory to be used by MojoCdmService. |host_interfaces| can // be used to request interfaces provided remotely by the host. It may be a
diff --git a/media/mojo/services/test_mojo_media_client.cc b/media/mojo/services/test_mojo_media_client.cc index fee57e4..f47188b 100644 --- a/media/mojo/services/test_mojo_media_client.cc +++ b/media/mojo/services/test_mojo_media_client.cc
@@ -62,10 +62,9 @@ } std::unique_ptr<RendererFactory> TestMojoMediaClient::CreateRendererFactory( - const scoped_refptr<MediaLog>& media_log) { + MediaLog* media_log) { return base::MakeUnique<DefaultRendererFactory>( - std::move(media_log), nullptr, - DefaultRendererFactory::GetGpuFactoriesCB()); + media_log, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()); } std::unique_ptr<CdmFactory> TestMojoMediaClient::CreateCdmFactory(
diff --git a/media/mojo/services/test_mojo_media_client.h b/media/mojo/services/test_mojo_media_client.h index d59bc026..85b0ff3 100644 --- a/media/mojo/services/test_mojo_media_client.h +++ b/media/mojo/services/test_mojo_media_client.h
@@ -36,7 +36,7 @@ std::unique_ptr<VideoRendererSink> CreateVideoRendererSink( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) final; std::unique_ptr<RendererFactory> CreateRendererFactory( - const scoped_refptr<MediaLog>& media_log) final; + MediaLog* media_log) final; std::unique_ptr<CdmFactory> CreateCdmFactory( service_manager::mojom::InterfaceProvider* /* host_interfaces */) final;
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc index 523d5d6d..42582417 100644 --- a/media/renderers/audio_renderer_impl.cc +++ b/media/renderers/audio_renderer_impl.cc
@@ -37,7 +37,7 @@ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, media::AudioRendererSink* sink, const CreateAudioDecodersCB& create_audio_decoders_cb, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : task_runner_(task_runner), expecting_config_changes_(false), sink_(sink),
diff --git a/media/renderers/audio_renderer_impl.h b/media/renderers/audio_renderer_impl.h index 93d1989..8b8273cb 100644 --- a/media/renderers/audio_renderer_impl.h +++ b/media/renderers/audio_renderer_impl.h
@@ -64,7 +64,7 @@ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, AudioRendererSink* sink, const CreateAudioDecodersCB& create_audio_decoders_cb, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~AudioRendererImpl() override; // TimeSource implementation. @@ -217,7 +217,7 @@ std::unique_ptr<AudioBufferStream> audio_buffer_stream_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Cached copy of hardware params from |sink_|. AudioParameters audio_parameters_;
diff --git a/media/renderers/audio_renderer_impl_unittest.cc b/media/renderers/audio_renderer_impl_unittest.cc index 6fad71c..1b0e5a54 100644 --- a/media/renderers/audio_renderer_impl_unittest.cc +++ b/media/renderers/audio_renderer_impl_unittest.cc
@@ -114,7 +114,7 @@ message_loop_.task_runner(), sink_.get(), base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, base::Unretained(this)), - new MediaLog())); + &media_log_)); renderer_->tick_clock_.reset(tick_clock_); tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); } @@ -141,7 +141,7 @@ message_loop_.task_runner(), sink_.get(), base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, base::Unretained(this)), - new MediaLog())); + &media_log_)); testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); ConfigureDemuxerStream(false); } @@ -155,7 +155,7 @@ message_loop_.task_runner(), sink_.get(), base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, base::Unretained(this)), - new MediaLog())); + &media_log_)); testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); ConfigureDemuxerStream(true); } @@ -448,6 +448,7 @@ // Fixture members. AudioParameters hardware_params_; base::MessageLoop message_loop_; + MediaLog media_log_; std::unique_ptr<AudioRendererImpl> renderer_; scoped_refptr<FakeAudioRendererSink> sink_; base::SimpleTestTickClock* tick_clock_;
diff --git a/media/renderers/default_renderer_factory.cc b/media/renderers/default_renderer_factory.cc index 9bf6b6e..9d61092 100644 --- a/media/renderers/default_renderer_factory.cc +++ b/media/renderers/default_renderer_factory.cc
@@ -32,7 +32,7 @@ namespace media { DefaultRendererFactory::DefaultRendererFactory( - const scoped_refptr<MediaLog>& media_log, + MediaLog* media_log, DecoderFactory* decoder_factory, const GetGpuFactoriesCB& get_gpu_factories_cb) : media_log_(media_log),
diff --git a/media/renderers/default_renderer_factory.h b/media/renderers/default_renderer_factory.h index 3cef53a..ba6a936 100644 --- a/media/renderers/default_renderer_factory.h +++ b/media/renderers/default_renderer_factory.h
@@ -33,7 +33,7 @@ public: using GetGpuFactoriesCB = base::Callback<GpuVideoAcceleratorFactories*()>; - DefaultRendererFactory(const scoped_refptr<MediaLog>& media_log, + DefaultRendererFactory(MediaLog* media_log, DecoderFactory* decoder_factory, const GetGpuFactoriesCB& get_gpu_factories_cb); ~DefaultRendererFactory() final; @@ -53,7 +53,7 @@ const RequestSurfaceCB& request_surface_cb, GpuVideoAcceleratorFactories* gpu_factories); - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Factory to create extra audio and video decoders. // Could be nullptr if not extra decoders are available.
diff --git a/media/renderers/skcanvas_video_renderer.cc b/media/renderers/skcanvas_video_renderer.cc index c96919a5..2531dc5 100644 --- a/media/renderers/skcanvas_video_renderer.cc +++ b/media/renderers/skcanvas_video_renderer.cc
@@ -209,7 +209,7 @@ mailbox_holder.texture_target, mailbox_holder.mailbox.name); } GrBackendTextureDesc desc; - desc.fFlags = kRenderTarget_GrBackendTextureFlag; + desc.fFlags = kNone_GrBackendTextureFlag; desc.fOrigin = kTopLeft_GrSurfaceOrigin; desc.fWidth = video_frame->coded_size().width(); desc.fHeight = video_frame->coded_size().height();
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc index a755c21..d4e66027 100644 --- a/media/renderers/video_renderer_impl.cc +++ b/media/renderers/video_renderer_impl.cc
@@ -34,7 +34,7 @@ const CreateVideoDecodersCB& create_video_decoders_cb, bool drop_frames, GpuVideoAcceleratorFactories* gpu_factories, - const scoped_refptr<MediaLog>& media_log) + MediaLog* media_log) : task_runner_(media_task_runner), sink_(sink), sink_started_(false),
diff --git a/media/renderers/video_renderer_impl.h b/media/renderers/video_renderer_impl.h index 45af124b..d33b0ec 100644 --- a/media/renderers/video_renderer_impl.h +++ b/media/renderers/video_renderer_impl.h
@@ -60,7 +60,7 @@ const CreateVideoDecodersCB& create_video_decoders_cb, bool drop_frames, GpuVideoAcceleratorFactories* gpu_factories, - const scoped_refptr<MediaLog>& media_log); + MediaLog* media_log); ~VideoRendererImpl() override; // VideoRenderer implementation. @@ -208,7 +208,7 @@ // Pool of GpuMemoryBuffers and resources used to create hardware frames. std::unique_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; - scoped_refptr<MediaLog> media_log_; + MediaLog* media_log_; // Flag indicating low-delay mode. bool low_delay_;
diff --git a/media/renderers/video_renderer_impl_unittest.cc b/media/renderers/video_renderer_impl_unittest.cc index 259fcef..282c264f 100644 --- a/media/renderers/video_renderer_impl_unittest.cc +++ b/media/renderers/video_renderer_impl_unittest.cc
@@ -85,7 +85,7 @@ base::Unretained(this)), true, nullptr, // gpu_factories - new MediaLog())); + &media_log_)); renderer_->SetTickClockForTesting( std::unique_ptr<base::TickClock>(tick_clock_)); null_video_sink_->set_tick_clock_for_testing(tick_clock_); @@ -439,6 +439,9 @@ } protected: + base::MessageLoop message_loop_; + MediaLog media_log_; + // Fixture members. std::unique_ptr<VideoRendererImpl> renderer_; base::SimpleTestTickClock* tick_clock_; // Owned by |renderer_|. @@ -459,8 +462,6 @@ WallClockTimeSource time_source_; - base::MessageLoop message_loop_; - private: void DecodeRequested(const scoped_refptr<DecoderBuffer>& buffer, const VideoDecoder::DecodeCB& decode_cb) {
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc index d51bb2e..ee4c41e 100644 --- a/media/test/pipeline_integration_test.cc +++ b/media/test/pipeline_integration_test.cc
@@ -456,7 +456,7 @@ base::Bind(&MockMediaSource::DemuxerOpened, base::Unretained(this)), base::Bind(&MockMediaSource::OnEncryptedMediaInitData, base::Unretained(this)), - scoped_refptr<MediaLog>(new MediaLog()))), + &media_log_)), owned_chunk_demuxer_(chunk_demuxer_) { file_data_ = ReadTestDataFile(filename); @@ -633,6 +633,7 @@ MOCK_METHOD1(InitSegmentReceivedMock, void(std::unique_ptr<MediaTracks>&)); private: + MediaLog media_log_; scoped_refptr<DecoderBuffer> file_data_; size_t current_position_; size_t initial_append_size_;
diff --git a/media/test/pipeline_integration_test_base.cc b/media/test/pipeline_integration_test_base.cc index dc5f085..b2fd6f60 100644 --- a/media/test/pipeline_integration_test_base.cc +++ b/media/test/pipeline_integration_test_base.cc
@@ -41,13 +41,52 @@ namespace media { +static ScopedVector<VideoDecoder> CreateVideoDecodersForTest( + MediaLog* media_log, + CreateVideoDecodersCB prepend_video_decoders_cb) { + ScopedVector<VideoDecoder> video_decoders; + + if (!prepend_video_decoders_cb.is_null()) { + video_decoders = prepend_video_decoders_cb.Run(); + DCHECK(!video_decoders.empty()); + } + +#if !defined(MEDIA_DISABLE_LIBVPX) + video_decoders.push_back(new VpxVideoDecoder()); +#endif // !defined(MEDIA_DISABLE_LIBVPX) + +// Android does not have an ffmpeg video decoder. +#if !defined(MEDIA_DISABLE_FFMPEG) && !defined(OS_ANDROID) + video_decoders.push_back(new FFmpegVideoDecoder(media_log)); +#endif + return video_decoders; +} + +static ScopedVector<AudioDecoder> CreateAudioDecodersForTest( + MediaLog* media_log, + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, + CreateAudioDecodersCB prepend_audio_decoders_cb) { + ScopedVector<AudioDecoder> audio_decoders; + + if (!prepend_audio_decoders_cb.is_null()) { + audio_decoders = prepend_audio_decoders_cb.Run(); + DCHECK(!audio_decoders.empty()); + } + +#if !defined(MEDIA_DISABLE_FFMPEG) + audio_decoders.push_back( + new FFmpegAudioDecoder(media_task_runner, media_log)); +#endif + return audio_decoders; +} + const char kNullVideoHash[] = "d41d8cd98f00b204e9800998ecf8427e"; const char kNullAudioHash[] = "0.00,0.00,0.00,0.00,0.00,0.00,"; PipelineIntegrationTestBase::PipelineIntegrationTestBase() : hashing_enabled_(false), clockless_playback_(false), - pipeline_(new PipelineImpl(message_loop_.task_runner(), new MediaLog())), + pipeline_(new PipelineImpl(message_loop_.task_runner(), &media_log_)), ended_(false), pipeline_status_(PIPELINE_OK), last_video_frame_format_(PIXEL_FORMAT_UNKNOWN), @@ -319,48 +358,10 @@ base::Unretained(this)), base::Bind(&PipelineIntegrationTestBase::DemuxerMediaTracksUpdatedCB, base::Unretained(this)), - new MediaLog())); + &media_log_)); #endif } -ScopedVector<VideoDecoder> CreateVideoDecodersForTest( - CreateVideoDecodersCB prepend_video_decoders_cb) { - ScopedVector<VideoDecoder> video_decoders; - - if (!prepend_video_decoders_cb.is_null()) { - video_decoders = prepend_video_decoders_cb.Run(); - DCHECK(!video_decoders.empty()); - } - -#if !defined(MEDIA_DISABLE_LIBVPX) - video_decoders.push_back(new VpxVideoDecoder()); -#endif // !defined(MEDIA_DISABLE_LIBVPX) - -// Android does not have an ffmpeg video decoder. -#if !defined(MEDIA_DISABLE_FFMPEG) && !defined(OS_ANDROID) - video_decoders.push_back( - new FFmpegVideoDecoder(make_scoped_refptr(new MediaLog()))); -#endif - return video_decoders; -} - -ScopedVector<AudioDecoder> CreateAudioDecodersForTest( - const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, - CreateAudioDecodersCB prepend_audio_decoders_cb) { - ScopedVector<AudioDecoder> audio_decoders; - - if (!prepend_audio_decoders_cb.is_null()) { - audio_decoders = prepend_audio_decoders_cb.Run(); - DCHECK(!audio_decoders.empty()); - } - -#if !defined(MEDIA_DISABLE_FFMPEG) - audio_decoders.push_back( - new FFmpegAudioDecoder(media_task_runner, new MediaLog())); -#endif - return audio_decoders; -} - std::unique_ptr<Renderer> PipelineIntegrationTestBase::CreateRenderer( CreateVideoDecodersCB prepend_video_decoders_cb, CreateAudioDecodersCB prepend_audio_decoders_cb) { @@ -375,8 +376,9 @@ std::unique_ptr<VideoRenderer> video_renderer(new VideoRendererImpl( message_loop_.task_runner(), message_loop_.task_runner().get(), video_sink_.get(), - base::Bind(&CreateVideoDecodersForTest, prepend_video_decoders_cb), false, - nullptr, new MediaLog())); + base::Bind(&CreateVideoDecodersForTest, &media_log_, + prepend_video_decoders_cb), + false, nullptr, &media_log_)); if (!clockless_playback_) { audio_sink_ = new NullAudioSink(message_loop_.task_runner()); @@ -396,9 +398,9 @@ (clockless_playback_) ? static_cast<AudioRendererSink*>(clockless_audio_sink_.get()) : audio_sink_.get(), - base::Bind(&CreateAudioDecodersForTest, message_loop_.task_runner(), - prepend_audio_decoders_cb), - new MediaLog())); + base::Bind(&CreateAudioDecodersForTest, &media_log_, + message_loop_.task_runner(), prepend_audio_decoders_cb), + &media_log_)); if (hashing_enabled_) { if (clockless_playback_) clockless_audio_sink_->StartAudioHashForTesting();
diff --git a/media/test/pipeline_integration_test_base.h b/media/test/pipeline_integration_test_base.h index 32f72ec6..a39eb3f 100644 --- a/media/test/pipeline_integration_test_base.h +++ b/media/test/pipeline_integration_test_base.h
@@ -127,6 +127,7 @@ } protected: + MediaLog media_log_; base::MessageLoop message_loop_; base::MD5Context md5_context_; bool hashing_enabled_;
diff --git a/mojo/public/tools/bindings/chromium_bindings_configuration.gni b/mojo/public/tools/bindings/chromium_bindings_configuration.gni index 8cd72da..0d020488 100644 --- a/mojo/public/tools/bindings/chromium_bindings_configuration.gni +++ b/mojo/public/tools/bindings/chromium_bindings_configuration.gni
@@ -5,9 +5,9 @@ _typemap_imports = [ "//ash/public/interfaces/typemaps.gni", "//cc/ipc/typemaps.gni", - "//chrome/browser/media/router/mojo/typemaps.gni", "//chrome/common/extensions/typemaps.gni", "//chrome/common/importer/typemaps.gni", + "//chrome/common/media_router/mojo/typemaps.gni", "//chrome/typemaps.gni", "//components/arc/common/typemaps.gni", "//components/metrics/public/cpp/typemaps.gni",
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h index b9d713c..19f97d6 100644 --- a/net/base/net_error_list.h +++ b/net/base/net_error_list.h
@@ -642,8 +642,11 @@ // The HTTP response contained multiple Location headers. NET_ERROR(RESPONSE_HEADERS_MULTIPLE_LOCATION, -350) -// SPDY server refused the stream. Client should retry. This should never be a -// user-visible error. +// HTTP/2 server refused the request without processing, and sent either a +// GOAWAY frame with error code NO_ERROR and Last-Stream-ID lower than the +// stream id corresponding to the request indicating that this request has not +// been processed yet, or a RST_STREAM frame with error code REFUSED_STREAM. +// Client MAY retry (on a different connection). See RFC7540 Section 8.1.4. NET_ERROR(SPDY_SERVER_REFUSED_STREAM, -351) // SPDY server didn't respond to the PING message.
diff --git a/net/cert/x509_certificate_bytes.cc b/net/cert/x509_certificate_bytes.cc index a351fb90..8ffc3f6 100644 --- a/net/cert/x509_certificate_bytes.cc +++ b/net/cert/x509_certificate_bytes.cc
@@ -17,9 +17,9 @@ #include "net/cert/internal/verify_name_match.h" #include "net/cert/internal/verify_signed_data.h" #include "net/cert/x509_util.h" -#include "net/cert/x509_util_openssl.h" #include "net/der/parser.h" #include "third_party/boringssl/src/include/openssl/evp.h" +#include "third_party/boringssl/src/include/openssl/pkcs7.h" #include "third_party/boringssl/src/include/openssl/pool.h" #include "third_party/boringssl/src/include/openssl/sha.h" @@ -141,16 +141,17 @@ CBS der_data; CBS_init(&der_data, reinterpret_cast<const uint8_t*>(data), length); - STACK_OF(X509)* certs = sk_X509_new_null(); + STACK_OF(CRYPTO_BUFFER)* certs = sk_CRYPTO_BUFFER_new_null(); - if (PKCS7_get_certificates(certs, &der_data)) { - for (size_t i = 0; i < sk_X509_num(certs); ++i) { - base::StringPiece stringpiece; - x509_util::GetDER(sk_X509_value(certs, i), &stringpiece); - handles->push_back(x509_util::CreateCryptoBuffer(stringpiece).release()); + if (PKCS7_get_raw_certificates(certs, &der_data, + x509_util::GetBufferPool())) { + for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(certs); ++i) { + handles->push_back(sk_CRYPTO_BUFFER_value(certs, i)); } } - sk_X509_pop_free(certs, X509_free); + // |handles| took ownership of the individual buffers, so only free the list + // itself. + sk_CRYPTO_BUFFER_free(certs); } } // namespace
diff --git a/net/data/ssl/wosign/wosign_domains.gperf b/net/data/ssl/wosign/wosign_domains.gperf index a57719b3..580a9c7 100644 --- a/net/data/ssl/wosign/wosign_domains.gperf +++ b/net/data/ssl/wosign/wosign_domains.gperf
@@ -6,4250 +6,1251 @@ // This file contains the set of domains that were issued certificates by // WoSign and StartCom-branded CAs and were logged before // 2016-10-21 00:00:00 UTC. This list only contains those domains whose -// certificates were not revoked as of 2017-02-27 and which appear within -// the top 500,000 entries of the Alexa Top 1M dataset as of 2016-12-28. +// certificates were not revoked as of 2017-04-19 and which appear within +// the top 100,000 entries of the Alexa Top 1M dataset as of 2016-04-19. %} %% 005.tv, 0 -010100100000.com, 0 -0101shop.com, 0 -01788.net, 0 -020leader.com, 0 -05506.com, 0 05.ru, 0 06681.com, 0 -0678life.com, 0 07073.com, 0 -07zr.com, 0 -0fees.us, 0 -10000.com, 0 -10000link.com, 0 1000bankov.ru, 0 -1000bazi.com, 0 -1000lela.com, 0 -1000pokupok.com, 0 -1000ukg.kz, 0 -10010.org, 0 -10044.cn, 0 10086.cn, 0 -1008.cn, 0 100bt.com, 0 -100-k-1.ru, 0 -100megabit.ru, 0 100msh.com, 0 -100vkusov.ru, 0 100xuexi.com, 0 -10101111.com, 0 101.com, 0 -101sauna.ru, 0 10brandchina.com, 0 -10gigabit.net, 0 -10to8.com, 0 110.com, 0 11185.cn, 0 11315.com, 0 115.com, 0 1-1ads.com, 0 11x11.ru, 0 -121mai.com, 0 123.com.cn, 0 -124zhe.com, 0 -12580.tv, 0 125.la, 0 126.net, 0 -1360.com, 0 139site.com, 0 -1406.kz, 0 161.ru, 0 -16mb.com, 0 17500.cn, 0 178448.com, 0 -17bdc.com, 0 -17heli.com, 0 17house.com, 0 17k.com, 0 -17yigo.com, 0 189.cn, 0 -189cube.com, 0 1905.com, 0 -190.com, 0 -1919hdtv.com, 0 -1927.kiev.ua, 0 -197top.com, 0 -19800.com, 0 -19950501.com, 0 -1academy.pro, 0 1blu.de, 0 -1byone.com, 0 -1byone.co.uk, 0 -1byone.jp, 0 -1cbit.ru, 0 1conan.com, 0 -1dxr.com, 0 -1gb.ua, 0 1hai.cn, 0 1jbest.com, 0 1kejian.com, 0 -1kxun.mobi, 0 -1-page.com, 0 1plus1.ua, 0 -1popov.ru, 0 1prime.ru, 0 -1proxy.de, 0 1september.ru, 0 -1tempurl.com, 0 -1tv.co.ua, 0 -1tvcrimea.ru, 0 -2016bec.ro, 0 -2144.cn, 0 21cn.com, 0 -21.co.uk, 0 21food.cn, 0 21jrr.com, 0 -21vbluecloud.com, 0 -21vianet.com, 0 -22web.org, 0 -230km.ru, 0 -23356.com, 0 233.com, 0 -2341.tv, 0 23yy.com, 0 -24dx.ru, 0 24gadget.ru, 0 24maker.com, 0 -24paybank.com, 0 27.ua, 0 29.ru, 0 -2ap.pl, 0 -2bulu.com, 0 -2dfire.com, 0 2dip.su, 0 2do2go.ru, 0 2gis.ae, 0 -2gis.com, 0 -2gis.com.cy, 0 -2gis.kg, 0 2gis.kz, 0 2gis.ru, 0 2gis.ua, 0 -2k2k.cc, 0 -2kom.ru, 0 2manhua.com, 0 -2plus2.ua, 0 -300.cn, 0 -3023.com, 0 -30post.com, 0 -310win.com, 0 -315jiage.cn, 0 -3310.com, 0 3322.org, 0 33pol.net, 0 -33rus.ru, 0 -3400.org, 0 -34regiongaz.ru, 0 -34travel.by, 0 360.cn, 0 360.com, 0 360doc.com, 0 -360haoyao.com, 0 -360jie.com.cn, 0 360kad.com, 0 360kan.com, 0 360safe.com, 0 -360shouji.com, 0 -360shouzhuan.com, 0 360totalsecurity.com, 0 -360tpcdn.com, 0 -365rili.com, 0 365webcall.com, 0 -36fy.com, 0 -36jr.com, 0 36kr.com, 0 39.net, 0 3arrafni.com, 0 -3bro.info, 0 3cx.com, 0 -3cx.de, 0 -3cx.es, 0 -3cx.eu, 0 -3cx.fr, 0 -3cx.ru, 0 -3cx.us, 0 3dmgame.com, 0 3dnews.ru, 0 -3dyf.com, 0 -3proxy.de, 0 -3songshu.com, 0 40407.com, 0 -404content.com, 0 -4231.vn, 0 -442hz.com, 0 -45so.org, 0 -4848438.com, 0 48.cn, 0 4c.cn, 0 -4d.com, 0 -4hu.com, 0 -4ka.sk, 0 -4nmv.ru, 0 -4paradigm.com, 0 -4pda.uz, 0 4programmers.net, 0 4px.com, 0 4tuning.ro, 0 -4vision.ru, 0 517.cn, 0 -517na.com, 0 51bi.com, 0 51.com, 0 -51duoduo.com, 0 51duoying.com, 0 -51eng.com, 0 -51goagent.com, 0 -51laibei.com, 0 -51liucheng.com, 0 -51mypc.cn, 0 -51p2b.com, 0 -51pianmen.com, 0 -51rz.com, 0 -51shebao.com, 0 -51tuodao.com, 0 -51vip.biz, 0 51vv.com, 0 51yangsheng.com, 0 -51ykb.com, 0 -520cfc.com, 0 -52bug.cn, 0 -52daohang.com, 0 -52dfg.com, 0 -52ilm.vip, 0 -52itstyle.com, 0 52jbj.com, 0 -52jiaoshi.com, 0 -52joy.org, 0 -52life.cc, 0 -52ml.net, 0 531314.com, 0 55188.com, 0 -55freehost.com, 0 55haitao.com, 0 -565656.com, 0 -56p2b.com, 0 5778.com, 0 -58cdn.com.cn, 0 58corp.com, 0 59pi.com, 0 -5adm.cc, 0 -5di.tv, 0 -5dmat-web.com, 0 5gbfree.com, 0 -5g-ppp.eu, 0 -5hxn.com, 0 -5igupiao.com, 0 -5ilog.com, 0 5ppai.com, 0 -5qqksa.com, 0 5xiaoyuan.cn, 0 -5zig.net, 0 -600280.com, 0 -6080bo.com, 0 -60-fps.org, 0 -612459.com, 0 66163.com, 0 -6655.la, 0 66.ru, 0 -6789g.com, 0 68edu.ru, 0 -6ack.com, 0 6a.com, 0 -6d1b.cc, 0 -6kyun.com, 0 6lib.ru, 0 -6rz.in, 0 6so.so, 0 -6te.net, 0 72du.com, 0 -72e.net, 0 7618.com, 0 76.ru, 0 -77169.com, 0 77file.com, 0 -7958.com, 0 7days.ru, 0 7ero.org, 0 7fon.ru, 0 7i24.com, 0 -7launcher.com, 0 -7nujoom.com, 0 -7to.com.tw, 0 7tor.org, 0 800best.com, 0 -800pai.com, 0 -80code.com, 0 -80pai.net, 0 80s.tw, 0 -81mv.com, 0 -85vod.com, 0 -86y.org, 0 87.cn, 0 -87dyy.com, 0 8800.org, 0 -8864.com, 0 -8866.org, 0 890m.com, 0 -8a.hk, 0 -8eoe.com, 0 -8pig.com, 0 -8solution.de, 0 -8solutions.cloud, 0 -8solutions.de, 0 8th.com, 0 -8u.cz, 0 -8win.com, 0 -9080.tv, 0 -90music.ir, 0 9111.ru, 0 9158.com, 0 91.com, 0 -91game.com, 0 91huayi.com, 0 -91pxb.com, 0 91ri.org, 0 -91ssfq.com, 0 -91sst.com, 0 91wii.com, 0 -91wutong.com, 0 91yun.org, 0 91yunxiao.com, 0 -92081.org, 0 -921.com, 0 9384.com, 0 -945.com, 0 -9513.com, 0 -9527yy.com, 0 -95579.com, 0 -96533.com, 0 9666.cn, 0 96.lt, 0 -980x.com, 0 99496.com, 0 -999.com, 0 -999d.com, 0 99.com, 0 9ht.com, 0 -9ifriend.com, 0 -9tour.cn, 0 -9wody.com, 0 -a101.ru, 0 -a2hosted.com, 0 -a2yy.com, 0 -a360.ru, 0 a4yy.com, 0 -a-a-ah.ru, 0 -aaayun.com, 0 -aapig.com.cn, 0 aasaanjobs.com, 0 -aas.org, 0 -aasp.org.br, 0 -aauekpoma.edu.ng, 0 -aazyw.com, 0 abbyy.com, 0 -abbyyeu.com, 0 -abbyy.ru, 0 -abc188.com, 0 abc360.com, 0 -abcapk.com, 0 -abclite.net, 0 -abc.re, 0 -abcydia.com, 0 -abfar-kh.ir, 0 -abf.se, 0 -abileneisd.org, 0 -abit-poisk.org.ua, 0 -abitu.net, 0 abletive.com, 0 -abp.bzh, 0 -abresalamat.ir, 0 -abrites.com, 0 -absi.be, 0 -absolutbank.ru, 0 -absolutist.com, 0 -absolutist.ru, 0 -acanomas.com, 0 acer.com, 0 acfun.tv, 0 -acgcss.com, 0 -acg-moe.com, 0 -acgmoon.org, 0 -acgn.ren, 0 acgpy.com, 0 -acg.tf, 0 ac-illust.com, 0 -acision.com, 0 aclu.org, 0 acmcoder.com, 0 -acoola.ru, 0 -acornsau.com.au, 0 -acousticalsurfaces.com, 0 -acquadiparma.com, 0 acronis.com, 0 acrylicwifi.com, 0 -acsc.az, 0 -acs.si, 0 actionnetwork.org, 0 -actitime.com, 0 -active24.cz, 0 -activelink.ie, 0 activ.kz, 0 actoys.net, 0 -acueducto.com.co, 0 -ada.edu.az, 0 -adamas.ru, 0 -adashboard.info, 0 -adbusters.org, 0 -ad.co.kr, 0 -adcom.it, 0 -addison-electronique.com, 0 -addradio.de, 0 -adic.co.kr, 0 -adioma.com, 0 -adkulan.kz, 0 -admagazine.ru, 0 admin.ch, 0 -adminhost.org, 0 administrator.de, 0 -adminn.cn, 0 -admin.tomsk.ru, 0 -admkrsk.ru, 0 admoblkaluga.ru, 0 -admsakhalin.ru, 0 adp.com, 0 -adquisitio.es, 0 -adquisitio.it, 0 -adriagate.com, 0 adrs.me, 0 -ads1-adnow.com, 0 -ads2-adnow.com, 0 -ads3-adnow.com, 0 -ads5-adnow.com, 0 -adseedata.com, 0 -adsender.us, 0 -adsensor.org, 0 adstarknetwork.com, 0 -aduana.cl, 0 -advancedrenamer.com, 0 -advancedtomato.com, 0 advendor.net, 0 -adverten.com, 0 -advertising.management, 0 adview.cn, 0 -advisor.travel, 0 adways.net, 0 -adwhiztech.com, 0 -ady.az, 0 -ady-co.com, 0 -adygnet.ru, 0 -adzuna.ca, 0 adzuna.com.au, 0 adzuna.com.br, 0 adzuna.co.uk, 0 adzuna.co.za, 0 -adzuna.de, 0 -adzuna.fr, 0 -adzuna.nl, 0 -adzuna.pl, 0 -adzuna.ru, 0 -adzz.me, 0 aegean.gr, 0 -aegee.org, 0 -aelius.com, 0 -aerosoft.de, 0 -aertecsolutions.com, 0 aesop.com, 0 aewb.cn, 0 -afghan123.com, 0 -afphabitat.cl, 0 -africaintelligence.fr, 0 -africanleadershipacademy.org, 0 -agava.net, 0 -agava.ru, 0 -agefi.fr, 0 -agfw.me, 0 agh.edu.pl, 0 -aginomoto.com, 0 -agnesb.com, 0 -agonistes.gr, 0 agora.co.il, 0 -agrant.cn, 0 -agrantsem.com, 0 -agriconomie.com, 0 -agroklub.com, 0 -agrosemfond.ru, 0 -agroxxi.ru, 0 -agts.tv, 0 -agulife.ru, 0 -ahjzu.edu.cn, 0 -ahmia.fi, 0 -ahml.ru, 0 -ahtv.cn, 0 ahu.edu.cn, 0 -aia.com.sg, 0 -aidaojia.com, 0 -aiisen.com, 0 -aikaiyuan.com, 0 -aimatech.com, 0 -air-austral.com, 0 airbase.ru, 0 airbusgroup.com, 0 -aircn.org, 0 -airdog.com, 0 -airedesantafe.com.ar, 0 -airelf.com.tw, 0 -airgun.org.ua, 0 -airmp3.me, 0 -airstoc.com, 0 -airtime.pro, 0 -airweave.jp, 0 ait.ac.th, 0 -aitech.ac.jp, 0 -ai-thinker.com, 0 -aiwanba.com, 0 aixifan.com, 0 -aizhuizhui.com, 0 -ajaums.ac.ir, 0 -ajinga.com, 0 ajou.ac.kr, 0 -akademie-bv.de, 0 -akado-ural.ru, 0 akairan.com, 0 akisho.ru, 0 -akket.com, 0 akson.ru, 0 akusherstvo.ru, 0 -alamesacuba.com, 0 -alarmtrade.ru, 0 -alau.kz, 0 -albank.ru, 0 -albedo.pw, 0 -alberlet.hu, 0 -alberthsieh.com, 0 -alcateia.com.br, 0 -alcatelonetouch.com, 0 -aldjf.com, 0 -alertachiapas.com, 0 -alexa_host, 0 -alexander-freundeskreis.org, 0 -alexandriava.gov, 0 -alexandrinsky.ru, 0 alexfitness.ru, 0 -alexwz.com, 0 -alexyanovsky.com, 0 -alfabank.kz, 0 -alfacapital.ru, 0 -alfa-forex.ru, 0 -alfatyping.com, 0 alfred.camera, 0 -aliall.ru, 0 -aliatic.com, 0 -alicall.com, 0 -aliexsale.ru, 0 -alinino.az, 0 aliyuncs.com, 0 allaboutjazz.com, 0 all.biz, 0 allboxing.ru, 0 -allcoin.com, 0 -alles-vegetarisch.de, 0 -allfon.org, 0 allinpay.com, 0 -allmedia.ru, 0 allmovies.uz, 0 allnokia.ru, 0 -allobnk.com, 0 allo.ua, 0 allplay.uz, 0 -allseenalliance.org, 0 allthefallen.ninja, 0 alltobid.com, 0 -allure.ru, 0 allyes.com, 0 almasdarnews.com, 0 -almatv.kz, 0 -almedina.net, 0 -almodi.org, 0 -almohtarifdz.com, 0 -alo.ir, 0 -alphabrock.cn, 0 -alphacrc.com, 0 -alpha-network.io, 0 -alpha-wallet.com, 0 alser.kz, 0 -altarix.ru, 0 -altechna.com, 0 altel.kz, 0 alternatehistory.com, 0 -altervista.org, 0 -altissia.com, 0 -altlinux.org, 0 -altrk.net, 0 -altspu.ru, 0 -alwaysdata.net, 0 amainhobbies.com, 0 -amanbo.co.ke, 0 amanbo.com, 0 amap.com, 0 -amaroma.it, 0 -amazee.io, 0 amazonaws.com, 0 amdn.news, 0 amfostacolo.ro, 0 -amigaosecreto.com.br, 0 -amigo.lv, 0 -amigosdecosat.com, 0 -amiro.ru, 0 -amocrm.com, 0 -amorousgame.com, 0 -ampfutures.com, 0 -amplexor.com, 0 -ampr.org, 0 -amss.ac.cn, 0 ancii.com, 0 -andalucia.org, 0 -anderlecht-online.be, 0 -andipartners.com, 0 -andraste.io, 0 -andrewcbancroft.com, 0 -androbit.net, 0 androidcentral.com, 0 -android-help.ru, 0 -android-iphone-recovery.com, 0 androidlost.com, 0 -anegrinews.ru, 0 anekdot.ru, 0 -angara.net, 0 angrymetalguy.com, 0 anhuinews.com, 0 -anidex.moe, 0 -animan.uz, 0 -animationclub.ru, 0 animecharactersdatabase.com, 0 -animelayer.ru, 0 -anime-rus.ru, 0 animetosho.org, 0 -anitama.cn, 0 -anitoys.com, 0 -anizone.net, 0 -ankerkraut.de, 0 -ankermann.com, 0 -ankiety-tv.pl, 0 -anmb.ro, 0 -annibuku.com, 0 anonimag.es, 0 anonymox.net, 0 -anotherhome.net, 0 -anritsu.com, 0 anruan.com, 0 -ansan.ac.kr, 0 -anseo.cn, 0 answercenter.ir, 0 -anta.cn, 0 anta.com, 0 -antizapret.info, 0 -antoshkaspb.ru, 0 -antsoul.com, 0 -anturis.com, 0 -anunciosparatodos.com, 0 -anviz.com, 0 -anwalt24.de, 0 -anysdk.com, 0 -anzhen.org, 0 anzhi.com, 0 -aomygod.com, 0 -aonb.ru, 0 -aori.ru, 0 -aos.com, 0 -apabi.com, 0 -apachehaus.com, 0 apachelounge.com, 0 -apartamenty.kz, 0 -aperza.jp, 0 -apexdc.net, 0 apexpoint.com, 0 -apkdy.com, 0 apk.tw, 0 -aplikasipc.com, 0 -apmetrix.com, 0 -apn.ru, 0 -apolisglobal.com, 0 -appadhoc.com, 0 -appcan.cn, 0 appcelerator.com, 0 -appdated.de, 0 -appdb.cc, 0 -appfollow.io, 0 -appier.com, 0 -applico.ru, 0 applinzi.com, 0 -applysquare.com, 0 -applythis.net, 0 apppark.cn, 0 -apps555.com, 0 appsmod.com, 0 -appson.ir, 0 -apricityos.com, 0 -apropos-store.com, 0 -apur.org, 0 -apusapps.com, 0 -apuscn.com, 0 -apx.fr, 0 -aqha.com, 0 aqua-calc.com, 0 -aqualogo.ru, 0 -aquariumbg.com, 0 -aqua-shop.ru, 0 -aradhost.com, 0 -arado.org, 0 -aras.com, 0 -arb4host.net, 0 -arba.uz, 0 -arbital.ru, 0 -arb-silva.de, 0 -arcadja.com, 0 -archirodon.net, 0 -ardahan.edu.tr, 0 -ardisson.ir, 0 -arencenter.ir, 0 argentina.gob.ar, 0 -ariacomputer.ir, 0 ariansystem.net, 0 -ariejan.net, 0 -arielis.com, 0 -arindo.net, 0 -aris.ge, 0 -arize.ir, 0 -arkadium.com, 0 -arkena.com, 0 -arkh-edu.ru, 0 -arkrdigital.com, 0 -arma3.ru, 0 -armor.kiev.ua, 0 -armtorrent.com, 0 -army.gr, 0 -arnotts.ie, 0 aroundprague.cz, 0 -ars-grin.gov, 0 -ars.sicilia.it, 0 -artfoxlive.com, 0 -artinfo.pl, 0 -artinvestment.ru, 0 -artist.ru, 0 -art-oboi.com.ua, 0 -artonline.ru, 0 -artrade.com, 0 artron.net, 0 arturia.com, 0 asanak.ir, 0 -asanapps.com, 0 -asanfile.com, 0 -asanwebhost.com, 0 -asaptickets.com, 0 -aseugame.com, 0 -ashampoo.net, 0 -ashland.edu, 0 asiafull.com, 0 -asiainfo.com, 0 asiaplus.tj, 0 asiatech.ir, 0 -asilmedia.uz, 0 -asjyy.com, 0 -askermekani.com, 0 askform.cn, 0 asknlearn.com, 0 askona.ru, 0 -aslenkov.ru, 0 -aslibra.com, 0 -asomin.net, 0 asphaltgold.de, 0 -aspiremi.com, 0 -aspone.me, 0 -aspswelten.de, 0 asrock.com, 0 -assai.com.br, 0 -asse.fr, 0 -astana.kz, 0 astegiudiziarie.it, 0 -asteroidos.org, 0 -astralnalog.ru, 0 -astrobites.org, 0 astrocenter.com, 0 -astrogeo.va.it, 0 -astrohled.cz, 0 astro-online.ru, 0 -astropro.ru, 0 astrosage.com, 0 -astroweb.tv, 0 -astrowi.com, 0 asuscomm.com, 0 -aswifter.com, 0 -atabank.com, 0 ataland.com, 0 -at-consulting.ru, 0 -atempurl.com, 0 -atfbooru.ninja, 0 ath.cx, 0 athome.lu, 0 atiyehsazan.ir, 0 -atmyplace.ru, 0 -atnf.csiro.au, 0 atol.ru, 0 atrapalo.com, 0 -atraveo.de, 0 -atservers.net, 0 attijariwafa.com, 0 at.ua, 0 -atua.com.br, 0 -atyourservice.com.cy, 0 -auca.kg, 0 auchandirect.fr, 0 -auchan.net, 0 -auchan.ro, 0 auchan.ru, 0 -auctionata.com, 0 -audials.com, 0 -audiklub.cz, 0 -audinate.com, 0 audioveda.ru, 0 audit-it.ru, 0 -au.edu.tw, 0 -aufe.edu.cn, 0 -auna.de, 0 -auna.fr, 0 -auna.it, 0 -auooo.com, 0 -austral.edu.ar, 0 australia.com, 0 -australianturfclub.com.au, 0 author24.ru, 0 autoalkatresz.hu, 0 -autoazart.ru, 0 -autocash.com, 0 -autocharge.ir, 0 -autocont.cz, 0 -autofoco.com, 0 -autoforum.com.br, 0 autohausaz.com, 0 -autojarov.cz, 0 -autoklad.ua, 0 -automic.com, 0 -autonavi.com, 0 autonavigator.hu, 0 -autoonline.com, 0 -auto-online.ru, 0 autopapa.ge, 0 -autopartslist.ru, 0 -autopilot.li, 0 -autoradiopc.it, 0 -autoria.biz, 0 -autospares.lv, 0 -autosup.by, 0 autoteile-teufel.de, 0 -autotoolza.ru, 0 -autotown55.ru, 0 -autotravel.ru, 0 -auto-wiki.ru, 0 -autozi.com, 0 -auxiliadorapredial.com.br, 0 -avaclinic.ru, 0 -avanset.com, 0 -avantbrowser.com, 0 -ava-saz.ir, 0 -avcast.org, 0 -aversi.ge, 0 -avg.club, 0 -avia.lt, 0 avianca.com.br, 0 -aviapark.com, 0 -avic.com, 0 -avic.ir, 0 avito.ru, 0 -avlab.pl, 0 -avonstore.com.br, 0 -avosapps.com, 0 -av.ru, 0 -avselectro.ru, 0 avsim.net, 0 -avspare.com, 0 -avtobor.uz, 0 -avtograd.ru, 0 -avtonalogi.ru, 0 avto.pro, 0 -avtovod.org.ua, 0 avtovokzaly.ru, 0 awwapp.com, 0 -axa.cz, 0 -axiangblog.com, 0 axiomtelecom.com, 0 -axiomus.ru, 0 -axp.dk, 0 -axzchou.com, 0 -ayla.com.cn, 0 -ayudatpymes.com, 0 -ayurina.net, 0 -ayz.pl, 0 -azasrs.gov, 0 -azcuba.cu, 0 -azersu.az, 0 -azfiles.ru, 0 azfonts.net, 0 -azfonts.ru, 0 az.gov, 0 -azimuthotels.com, 0 -azinsurance.az, 0 az.pl, 0 -azsigorta.az, 0 -aztu.edu.az, 0 azure.cn, 0 azure.com, 0 -b1.com.cn, 0 -b2wdigital.com, 0 -b3log.org, 0 b5m.com, 0 -b8b8.tv, 0 -b8yy.com, 0 baba-mail.co.il, 0 -babilon-m.tj, 0 -babilon-t.tj, 0 -babosik.ru, 0 -babotorrent.com, 0 -babruisk.com, 0 babyblog.ru, 0 -babylongirls.co.uk, 0 -bacc1688.com, 0 -back2basics-wow.eu, 0 -bad.watch, 0 bagevent.com, 0 ba.gov.br, 0 -bahamsafar.com, 0 -baicheng.com, 0 baidu.com, 0 -baiduyun.me, 0 -baijiahulian.com, 0 -baijindai.com, 0 baikal-daily.ru, 0 baiten.cn, 0 -baitv.com, 0 -baixou.com.br, 0 -baksman.com, 0 -baktelecom.az, 0 baku2017.com, 0 -balancer.ru, 0 baldtruthtalk.com, 0 -baldwins.co.uk, 0 ballbar.cc, 0 -baltikums.eu, 0 -bamada.net, 0 -bamia.ir, 0 bamilo.com, 0 -bamper.by, 0 -bananacare.ch, 0 -bancomoc.mz, 0 bandaancha.eu, 0 -bang5mai.com, 0 -bangcle.com, 0 banggood.cn, 0 -banglatext.com, 0 -bangqu.com, 0 -banhai.com, 0 -banjiajia.com, 0 -bank24.uz, 0 -bankbps.pl, 0 -bankcomat.com, 0 -bankersonline.com, 0 bank.gov.ua, 0 bankmandiri.co.id, 0 bankofbeijing.com.cn, 0 -bankofdl.com, 0 bankreferatov.ru, 0 -banks.is, 0 -banob.ir, 0 -banyantree.com, 0 -bao.cn, 0 -baomitu.com, 0 -baozun.cn, 0 barbioyunu.com.tr, 0 -barcodeberlin.com, 0 -barneos22.ru, 0 -barracuda.digital, 0 -bartin.edu.tr, 0 -bas.co.jp, 0 -basezap.com, 0 -bashagroplast.com, 0 bashkortostan.ru, 0 -baskcompany.ru, 0 -bast.ru, 0 basu.ac.ir, 0 -batiaoyu.com, 0 battlecomics.co.kr, 0 battleship-game.org, 0 -baysideonline.com, 0 -bazhongol.com, 0 bazhuayu.com, 0 -bbmundo.com, 0 -bbspro.net, 0 bbvafrances.com.ar, 0 -bbztx.com, 0 -bcassessment.ca, 0 bcb5.com, 0 -bccto.me, 0 -bcebos.com, 0 bch.com.cn, 0 bcr.ro, 0 bcsh.com, 0 bcy.net, 0 -bda.bg, 0 bdear.xyz, 0 bd-film.com, 0 bdimg.com, 0 -bdpan.com, 0 bdqn.cn, 0 -bdsm-russia.com, 0 bdstatic.com, 0 -bea.aero, 0 -bearworld.co.kr, 0 -beate-uhse.com, 0 -beatstage.com, 0 bebekoyunu.com.tr, 0 bebinak.com, 0 -bebio.pl, 0 beeline.ru, 0 -beeteco.com, 0 behe.com, 0 -beibei.com, 0 -beitone.com, 0 -bejbynet.cz, 0 -belgazprombank.by, 0 belgium.be, 0 -belgraviacentre.com, 0 -belightsoft.com, 0 -belink.com, 0 -belive.ru, 0 -belle8.com, 0 -bellicon.com, 0 -belorusskiy-trikotazh.ru, 0 -belregion.ru, 0 -be.ma, 0 -bemanicn.com, 0 -benefitresource.com, 0 -benefitsystems.pl, 0 beneylu.com, 0 -beneyluschool.net, 0 bengbeng.com, 0 -benmi.com, 0 -berbidvps.ir, 0 -berito.ru, 0 -berlitz.com, 0 -berlitz.de, 0 -bernat.im, 0 -bertinaco.com, 0 bertina.ir, 0 bertina.us, 0 -berufe-universum.de, 0 -berui.com, 0 -beselettronica.com, 0 -besmart.az, 0 -besmart.kg, 0 -besmart.kz, 0 -besplatnyeprogrammy.net, 0 -bestcake.com, 0 -best-price.com, 0 bestprice.gr, 0 -bestsdk.com, 0 -bestsecret.at, 0 bestsecret.com, 0 -bestsecret.co.uk, 0 -bestsecret.se, 0 -bestsolution.at, 0 -bestsub.com, 0 bestwatch.ru, 0 -bestwinsoft.com, 0 -betaarchive.com, 0 -betaformazione.com, 0 -beta.gouv.fr, 0 -betawoo.com, 0 betcity.ru.com, 0 -bethplanet.ru, 0 -betina.ir, 0 betonline.ag, 0 betscsgo.net, 0 -betsdota2.net, 0 bexio.com, 0 -beyond3d.com, 0 -beyondsoft.com, 0 beyotime.com, 0 bezrealitky.cz, 0 -bfarm.de, 0 -bfi.org, 0 -bftcom.com, 0 -bfun.cn, 0 -bfxdata.com, 0 -bgctv.com.cn, 0 bget.ru, 0 -bgflash.com, 0 -bgforum.ru, 0 -bgtop.net, 0 -bgu.co.il, 0 -bgy.com.cn, 0 bh3.com, 0 bialystok.pl, 0 -bible-center.ru, 0 bibleonline.ru, 0 -biblio.by, 0 biblioclub.ru, 0 -biblionix.com, 0 -bibs.jp, 0 -bidnews.cn, 0 bidoo.com, 0 -bieszczady.pl, 0 bigbangnews.com, 0 -bighost.ir, 0 bigmir.net, 0 bignox.com, 0 -bigotti.ro, 0 bigpicture.ru, 0 -bi-group.kz, 0 -biji.io, 0 -bikeroar.com, 0 -bikexpert.ro, 0 -bildungscentrum.de, 0 biletix.ru, 0 bilibili.com, 0 -bilietai.lt, 0 biligame.com, 0 bilimal.kz, 0 -billin.net, 0 -bilp.fr, 0 -bimacarecard.com, 0 -bimm.uz, 0 -bimt.com, 0 -bingostars.com, 0 -bingyan.net, 0 binomo.com, 0 binus.ac.id, 0 binzhi.com, 0 bioware.ru, 0 -bipdrive.com, 0 -biryerde.biz, 0 -bisaboard.de, 0 bisafans.de, 0 bistudio.com, 0 bistu.edu.cn, 0 -bit2.biz, 0 bitauto.com, 0 bitballoon.com, 0 bitcoin.com, 0 bitcomet.com, 0 -bit-hdtv.com, 0 -bitkan.com, 0 -bitminter.com, 0 -bitnamiapp.com, 0 -bitref.com, 0 bitrix24.com, 0 -bits-handwerkersoftware.de, 0 -bitsighttech.com, 0 bitskins.com, 0 -bittylicious.com, 0 biyao.com, 0 bizagi.com, 0 -biz.ht, 0 -bizovo.ru, 0 -biz.tm, 0 -bizws.cn, 0 bjd.com.cn, 0 -bjdx.gov.cn, 0 -bjedu.gov.cn, 0 -bjhd.gov.cn, 0 bjjtgl.gov.cn, 0 -bjkw.gov.cn, 0 -bjnsf.org, 0 bjtu.edu.cn, 0 bk55.ru, 0 -bk-media.de, 0 -bkool.com, 0 blablacar.com, 0 -blackberries.ru, 0 -blackberrys.ru, 0 blackbiz.ws, 0 -blagovest-moskva.ru, 0 -blanco.com, 0 -bl.ee, 0 blender.org, 0 -blibao.com, 0 -blitz-cinestar-bh.ba, 0 blitz-cinestar.hr, 0 block.io, 0 -blogfeng.com, 0 -blogfuntw.com, 0 -blogin.co, 0 -blogpage.eu, 0 -blogrebellen.de, 0 -blogsyte.com, 0 -blogun.ru, 0 -bloombex-options.com, 0 -bluefocusgroup.com, 0 bluegolf.com, 0 -blueprism.com, 0 -bluereader.org, 0 -blueshop.ca, 0 blueshop.com.tw, 0 bluesoft.com.br, 0 -bluevine.com, 0 bme.hu, 0 -bm.lv, 0 bmobile.ne.jp, 0 -bm-services.com, 0 bmw.com.cn, 0 -bndes.gov.br, 0 bnext.com.tw, 0 -bnisecurities.co.id, 0 -bnq.com.cn, 0 bn.ru, 0 bnu.edu.cn, 0 -board24.lg.ua, 0 -boatingmag.com, 0 -bobs.com.br, 0 -bobsfa.com.br, 0 boce.cn, 0 -boeffla.de, 0 -boeingisback.com, 0 -boerse-stuttgart.de, 0 -bog.gov.gh, 0 bokee.net, 0 bombardir.ru, 0 -bombardo.ru, 0 -bomberarena.com, 0 -bome.com, 0 -bonbg.com, 0 -bondora.com, 0 -bonitasoft.com, 0 -bonjwa.de, 0 -bonniercorp.com, 0 -bonnier.news, 0 -bonree.com, 0 -bookcdn.com, 0 -bookcity.club, 0 -booked.net, 0 -bookingpoint.net, 0 -bookmanager.com, 0 bookmate.com, 0 -book.ru, 0 -booksfree4u.tk, 0 -bookshop.ru, 0 -book-ye.com.ua, 0 boombate.com, 0 -boomer.sk, 0 boosj.com, 0 bootstrapstudio.io, 0 -borimed.com, 0 -borjdental.ir, 0 -bork.ru, 0 borsonline.hu, 0 -botevgrad.com, 0 -bot.nu, 0 -botzone.org, 0 -bounceme.net, 0 -bourky.cz, 0 -boutique-parfums.fr, 0 -bov.com, 0 boxed.com, 0 -boxueio.com, 0 -boyans.net, 0 -boytrap2.net, 0 bozhong.com, 0 -bozza.ru, 0 bplaced.net, 0 -bq.sg, 0 -brainient.com, 0 -brainpad.co.jp, 0 -branchable.com, 0 -bravosupermarket.az, 0 br.de, 0 breakingmuscle.com, 0 -bremerhaven.de, 0 -bresser.de, 0 bricker.ru, 0 -bricofer.it, 0 -bricomarche.pt, 0 -brightwallpapers.com.ua, 0 briian.com, 0 -brilliancce.com, 0 -brocent.com, 0 brodude.ru, 0 -brot-fuer-die-welt.de, 0 -brown-eyes.ru, 0 brownpapertickets.com, 0 -brownsugar.tw, 0 -browserdoktor.de, 0 -browserleaks.com, 0 brra.bg, 0 -brrc.ru, 0 -bsau.ru, 0 -bsn.ru, 0 bspb.ru, 0 -bstu.ru, 0 bsuir.by, 0 btago.com, 0 btbtdy.com, 0 btcfans.com, 0 -btempurl.com, 0 -btfx.net, 0 btime.com, 0 -btn-muenzen.de, 0 -btpeer.com, 0 -btrans.by, 0 -btydt.com, 0 buaa.edu.cn, 0 -bubi.cn, 0 -bucketlist.org, 0 buct.edu.cn, 0 buffer.com, 0 -bufs.ac.kr, 0 -bugclose.com, 0 bugetul.ro, 0 -bugtags.com, 0 -buhgalter911.com, 0 -buildabazaar.com, 0 builder.hu, 0 -bukaba.com, 0 -bukainfo.com, 0 bukmacherskie.com, 0 bultannews.com, 0 bumimi.com, 0 -bundesliga.at, 0 -bunz.com, 0 bupa.com.sa, 0 bupt.edu.cn, 0 -burjauto.com, 0 -burningshed.com, 0 -busfor.com, 0 busfor.ru, 0 business-gazeta.ru, 0 -businessportal.gr, 0 -businessstudio.ru, 0 -busqueda-local.es, 0 -bussoladoinvestidor.com.br, 0 -buyalenovo.com, 0 -buyex.ir, 0 buzzerbeater.com, 0 -bvbcode.com, 0 -bybbs.org, 0 bydauto.com.cn, 0 -byethost10.com, 0 -byethost13.com, 0 -byethost14.com, 0 -byethost15.com, 0 -byethost16.com, 0 -byethost17.com, 0 -byethost22.com, 0 -byethost24.com, 0 -byethost32.com, 0 -byethost3.com, 0 byethost7.com, 0 -byethost8.com, 0 -byethost9.com, 0 -byfen.com, 0 -bygmax.dk, 0 -byte.fm, 0 c4dcn.com, 0 c9users.io, 0 -caac.net, 0 -caa.edu.cn, 0 -cadstudio.ru, 0 cafe24.com, 0 -cafekado.ir, 0 -cafetadris.com, 0 -cafeyun.com, 0 -cafiu.org.cn, 0 -cai310.cn, 0 -cai88.com, 0 -caict.ac.cn, 0 caijing.com.cn, 0 cailianpress.com, 0 -cailiaoren.com, 0 caixin.com, 0 -caknun.com, 0 -caktusgroup.com, 0 -calcudoku.org, 0 -calculatorpi.com, 0 -californiasciencecenter.org, 0 -callbackhunter.com, 0 -calligra.org, 0 -calmradio.com, 0 caltech.edu, 0 -cambiaresearch.com, 0 -cambiaste.com, 0 -camelia.lt, 0 -camellia-sinensis.com, 0 -cameron.edu, 0 -camisetanerd.com, 0 camonster.com, 0 camping.info, 0 -camptocamp.com, 0 -campyokwe.org, 0 -canfreee.com, 0 cang.com, 0 -canliligtvseyret.org, 0 -canpars.ca, 0 -can.ua, 0 -caogen8.co, 0 -caoliuporn.com, 0 -captaincontrat.com, 0 -captivoice.com, 0 -carambis.com, 0 -carambis.ru, 0 cardcastgame.com, 0 -cardpay.com, 0 careerindex.jp, 0 -carfix.ru, 0 cargeek.ir, 0 -caricatura.ru, 0 -caritas.at, 0 -carlab.co.kr, 0 carnoc.com, 0 carpediem.cd, 0 -carrefourinternet.com, 0 -cars.kg, 0 -carteblanchepartenaires.fr, 0 cartridgesave.co.uk, 0 -carus-verlag.com, 0 -casadocodigo.com.br, 0 -casaley.com.mx, 0 cas.cz, 0 -case24.it, 0 casicloud.com, 0 -casinuevo.net, 0 -caspian.aero, 0 -cass.cn, 0 -castavote.it, 0 -casting360.com, 0 -catalinahub.net, 0 -catalysts.cc, 0 -catfan.me, 0 -catlin.edu, 0 -cattry.com, 0 cau.edu.cn, 0 -causeway.com, 0 -cawi.fr, 0 -cazin.net, 0 -cbbank.com, 0 -cbda.cn, 0 c-brains.jp, 0 -cbri.res.in, 0 ccav1.com, 0 -ccav1.me, 0 -ccav.info, 0 ccb.com, 0 -cccampass.com, 0 ccc.de, 0 -cccm.com, 0 cccpmo.com, 0 -cccyun.cc, 0 ccdi.gov.cn, 0 -ccf.com.cn, 0 cclonline.com, 0 -ccpph.com.cn, 0 -cdc.im, 0 -cdcoslm.com, 0 -cdeway.com, 0 -cdfgj.gov.cn, 0 -cdmarf.ru, 0 -cds.spb.ru, 0 -cdu.edu.ua, 0 cdut.edu.cn, 0 -cdvcloud.com, 0 -cdvpodarok.ru, 0 -cea.gov.cn, 0 ceair.com, 0 cecb2b.com, 0 ce.cn, 0 -cedarhd.com, 0 ce.gov.br, 0 cehome.com, 0 -cei.com.cn, 0 -cekid.com, 0 celemony.com, 0 celesc.com.br, 0 -celulardireto.com.br, 0 -censys.io, 0 -centaline.com.cn, 0 -center-inform.ru, 0 -centiumsoftware.com, 0 -centminmod.com, 0 centralclubs.com, 0 -centralpark.com, 0 -centralstationcrm.net, 0 -centreon.com, 0 -centriohost.com, 0 -cephaiti.ht, 0 -ceph.org.cn, 0 -cesan.com.br, 0 -ces.edu.uy, 0 -cesurformaciononline.com, 0 -ceva.com, 0 ceve-market.org, 0 cez.cz, 0 -cez.ro, 0 -cfdsupport.com, 0 -cgil.it, 0 -cgpersia.ru, 0 -cgs.gov.cn, 0 cgu.edu.tw, 0 chacuo.net, 0 -chaicp.com, 0 chainfire.eu, 0 -chains.cc, 0 chain.so, 0 chalmers.se, 0 -chal-tec.com, 0 -chamonet.com, 0 championat.asia, 0 -championscubestore.com, 0 -chamwings.com, 0 -chancheng.gov.cn, 0 -chandashi.com, 0 -chanet.com.cn, 0 -changan.com.cn, 0 changba.com, 0 -changeip.net, 0 -changingedu.com, 0 changyou.com, 0 -chanjet.com, 0 channeli.in, 0 chanpin100.com, 0 -chaosforge.org, 0 -chaoshanw.cn, 0 -chapaiming.com, 0 -charogh.com, 0 -chat2desk.com, 0 -chataoke.com, 0 -chat-brasil.com, 0 -chatcity.de, 0 -chat-pt.com, 0 -chatti.de, 0 -chaturbate.com.br, 0 chb.com.tw, 0 -chcivyhodnejsienergie.cz, 0 -chdbits.vip, 0 chd.edu.cn, 0 -che300.com, 0 -cheatorhackgames.com, 0 -chebaba.com, 0 cheers.com.tw, 0 -cheladmin.ru, 0 -chelcenter.ru, 0 -chelm.pl, 0 -chel.ru, 0 -chem99.com, 0 -chengdu.cn, 0 -chengzivr.com, 0 -chenxingweb.com, 0 -chenyudong.com, 0 -cherinfo.ru, 0 -cherubicsoft.com, 0 -chesspuzzle.net, 0 chess-samara.ru, 0 -chevy-clan.ru, 0 chiapas.gob.mx, 0 -chia.ua, 0 -chickenkiller.com, 0 -chicrank.ir, 0 -childdevelop.com.ua, 0 chinaar.com, 0 -chinabluemix.net, 0 chinacache.com, 0 -china-cba.net, 0 chinachugui.com, 0 -chinacloudapi.cn, 0 chinacloudapp.cn, 0 chinacloudsites.cn, 0 china.com.cn, 0 chinadaily.com.cn, 0 chinadance.cn, 0 -chinaemail.cn, 0 chinahrt.com, 0 chinamobile.com, 0 -chinancce.com, 0 chinanetcenter.com, 0 -chinaopple.com, 0 -chinapiwei.com, 0 -chinaports.com, 0 chinasalestore.com, 0 -china-shftz.gov.cn, 0 -chineseall.cn, 0 -chinesecio.com, 0 -chinesegamer.net, 0 chinesetest.cn, 0 -chint.com, 0 -chipfind.ru, 0 -choices360.com, 0 -chorus.ai, 0 -chrdk.ru, 0 -chrishogan360.com, 0 chronicle.co.zw, 0 -chroniclejournal.com, 0 -chsu.ru, 0 chuangkit.com, 0 chuanke.com, 0 -chudobilet.ru, 0 -chuhai.edu.hk, 0 -chujianapp.com, 0 -chuvsu.ru, 0 ci123.com, 0 cib.com.cn, 0 -cicams.ac.cn, 0 -cicon.ru, 0 -ciencia-ficcion.com, 0 -ciftlikbank.com, 0 -cimex.com.cu, 0 cinemacity.hu, 0 cinemapark.ru, 0 -cinematik.net, 0 -cinestarcinemas.rs, 0 -ciob.org, 0 -ciper.cl, 0 -circulaire-en-ligne.ca, 0 -cirici.com, 0 -ciscoexam.online, 0 -citadele.lt, 0 -citationprocessingcenter.com, 0 -cit.edu.tw, 0 -citicsf.com, 0 citrio.com, 0 -citsgbt.com, 0 -cittadellasalute.to.it, 0 cityads.com, 0 citygf.com, 0 -city.kharkov.ua, 0 -cityshop.com.cn, 0 -citytaxi.az, 0 -civey.com, 0 -cjlu.edu.cn, 0 -ck12info.org, 0 ck180.com, 0 -ck-modelcars.de, 0 -clammr.com, 0 -clans.de, 0 -clansweb.com, 0 clarin.com, 0 -classicalarchives.com, 0 -classic-gaming.net, 0 -cleanlinesurf.com, 0 clearch.org, 0 clearscore.com, 0 clearwebstats.com, 0 -cles.jp, 0 -cleveroad.com, 0 -cleversubtitles.ru, 0 -clewm.net, 0 -clickad.info, 0 -clickers.info, 0 -click.uz, 0 clickview.com.au, 0 -cliclavoroveneto.it, 0 -client-shop-logistics.ru, 0 client.xzn.ir, 0 cli.im, 0 -climate-kic.org, 0 -clippersync.com, 0 -clockshop.ru, 0 -cloud86.cn, 0 cloudapp.net, 0 cloudcc.com, 0 clouddn.com, 0 -cloudfire.ir, 0 cloudfront.net, 0 -cloudin.cn, 0 cloudlinux.com, 0 -cloudme.com, 0 cloud-mine.online, 0 -cloudonaut.io, 0 -cloudrexx.com, 0 -cloudrino.net, 0 cloudsite.ir, 0 -clouds.tf, 0 -cloudtv.bz, 0 -cloudvhost.cn, 0 -cloudware.jp, 0 clutchpoints.com, 0 -clzg.cn, 0 -cmeiwei.com, 0 -cml.pt, 0 cmlt.ru, 0 -cmonitor.pl, 0 -cms.gov.af, 0 -cms-guide.com, 0 -cm-sintra.pt, 0 cmsky.com, 0 cmu.ac.th, 0 cmu.edu, 0 -cmu-edu.eu, 0 -cnaidai.com, 0 cnblogs.com, 0 -cncf.io, 0 cndhl.com, 0 -cnexps.com, 0 -cnfeol.com, 0 cngold.org, 0 cn-healthcare.com, 0 -cnhnb.com, 0 cnhubei.com, 0 cnki.net, 0 -cnkrl.cn, 0 -cnl.su, 0 -cnooc.com.cn, 0 cnool.net, 0 -cnpatent.com, 0 cnpq.br, 0 cnr.cn, 0 -cnseay.com, 0 -cnsecer.com, 0 -cnshb.ru, 0 cnsuning.com, 0 -cnt.my, 0 -cntraveller.ru, 0 cntv.cn, 0 cnx-software.com, 0 -coaching-foot.com, 0 -cocha.com, 0 -cocoking.info, 0 cocoleech.com, 0 -codacy.com, 0 -co.de, 0 -codeaurora.org, 0 -codebox.ir, 0 -codecasts.com.br, 0 -codeclic.com, 0 codeforge.cn, 0 codeforge.com, 0 -codefresh.io, 0 -code-industry.net, 0 -codemao.cn, 0 -coder-note.com, 0 -cofm.es, 0 -coinjar.com, 0 -coinkeeper.me, 0 -coinpalace.io, 0 coinsbank.com, 0 -coins.su, 0 coinsup.com, 0 -colasoft.com, 0 -colasoft.com.cn, 0 -colettehq.com, 0 -collabora.com, 0 -collaboraoffice.com, 0 -collaborative.org, 0 -collectivefab.com, 0 -collegemarching.com, 0 -collsk12.org, 0 -coloproperty.com, 0 -color.com, 0 -combowombo.ru, 0 -combr.ru, 0 com.kz, 0 -comli.com, 0 -comlu.com, 0 commonhealth.com.tw, 0 -commotionwireless.net, 0 -compagniedumontblanc.fr, 0 -companeo.com, 0 compass.education, 0 -compumatrix.co, 0 computrabajo.com, 0 -computrabajo.com.hn, 0 comss.ru, 0 -comstats.de, 0 -comtradeshop.com, 0 -comune.siena.it, 0 -comxa.com, 0 -conanwiki.org, 0 -conde.com, 0 -condenast.co.uk, 0 -condenast.ru, 0 -confessionsofahomeschooler.com, 0 -conglinnet.com, 0 -congm.in, 0 -connectedly.com, 0 connectify.me, 0 co.no, 0 -conseil-config.com, 0 -conseq.cz, 0 consultant.ru, 0 -consumerscompare.org, 0 -contabo.host, 0 -contactlab.com, 0 -conta.mobi, 0 -contao.org, 0 -content-cooperation.com, 0 -contractiq.com, 0 -contragents.ru, 0 -converter.cz, 0 -convex.ru, 0 -coobar.com, 0 -coodoor.com, 0 coolapk.com, 0 -coolapkmarket.com, 0 -coolnull.com, 0 -coolyun.com, 0 -coop-game.com, 0 -coop.py, 0 -copasa.com.br, 0 copel.net, 0 -copiny.com, 0 -coppenrath-wiese.de, 0 -copr.cn, 0 -co.pt, 0 -copybet.com, 0 -copy.sh, 0 coral-club.com, 0 corepacks.com, 0 cornell.edu, 0 -counsellingresource.com, 0 -countryclubworld.com, 0 -countrygarden.com.cn, 0 -coursinformatiquepdf.com, 0 cowlevel.net, 0 -co.za, 0 -cp247.net, 0 -cpc.vn, 0 cpic.com.cn, 0 -cpmchina.co, 0 cpygames.com, 0 -cqjtu.edu.cn, 0 cqnews.net, 0 cqsq.com, 0 -cqtimes.cn, 0 cqu.edu.cn, 0 -cqupt.edu.cn, 0 crackberry.com, 0 crackingking.com, 0 -craftmann.ru, 0 -crate.io, 0 -craym.eu, 0 -crb-dnr.ru, 0 -crcc.cn, 0 -crc.com.cn, 0 creagames.com, 0 -creartest.com, 0 -createjs.cc, 0 -credit2go.cn, 0 -credit-card.ru, 0 -creditchina.gov.cn, 0 -creditolo.de, 0 -crediton.ge, 0 -crevalue.cn, 0 -cribs.me, 0 cri.cn, 0 crictracker.com, 0 crimea.com, 0 -crimea.ru, 0 crisp.im, 0 -crn.ru, 0 -croc.ru, 0 croix-rouge.fr, 0 cronista.com, 0 -cronodeal.ch, 0 -croppola.com, 0 -cross-area.com, 0 -crous-toulouse.fr, 0 crowdtangle.com, 0 -crtslt.com, 0 -cruisingworld.com, 0 -cruzados.cl, 0 -cs12333.com, 0 -csa.fr, 0 csair.com, 0 -cscec.com, 0 -csc.fi, 0 -cs.co.nz, 0 -cse.ru, 0 csg.cn, 0 -csgoblaze.com, 0 csgo.com, 0 csgofast.com, 0 -csgo-fate.ru, 0 csgohouse.org, 0 csgola.com, 0 -csgoshop.com, 0 csgo.tm, 0 -csh.org.tw, 0 -csicr.cz, 0 -csie.org, 0 -csi-net.it, 0 -cskin.net, 0 -csmania.ru, 0 csob.sk, 0 -csrc.ac.cn, 0 csrc.gov.cn, 0 cssbuy.com, 0 -csscompressor.com, 0 -csserv.ru, 0 -csswg.org, 0 cstnet.cn, 0 csumentor.edu, 0 -csvw.com, 0 ct10000.com, 0 -ct8.pl, 0 -ctfeshop.com.cn, 0 -ctfmall.com, 0 ctolib.com, 0 ctrip.com, 0 -c-t-s.ru, 0 -cubingchina.com, 0 -cuca.co.ao, 0 -cuccfree.com, 0 cuc.edu.cn, 0 cuentosparadormir.com, 0 -cuevana-movil.com, 0 cuhk.edu.hk, 0 cuiqingcai.com, 0 -cuizituan.com, 0 -cuk.pl, 0 cumt.edu.cn, 0 -cupet.cu, 0 cup.ir, 0 currencyrate.today, 0 -cursomeca.com, 0 -customs4u.com, 0 customs.ru, 0 cutestat.com, 0 -cutv.com, 0 cvp.com, 0 cvte.com, 0 cvut.cz, 0 -cwbook.com.tw, 0 cw.com.tw, 0 -cwt-online.com.cn, 0 -cx580.com, 0 -cxhxrz.com, 0 cyberduck.io, 0 cyberoam.com, 0 cybo.com, 0 -cyclestore.co.uk, 0 cycu.edu.tw, 0 -cyklobazar.cz, 0 -cyolito.com, 0 -cyotek.com, 0 cyut.edu.tw, 0 -czech.cz, 0 -czechia.com, 0 -czxiu.com, 0 -dactylocours.com, 0 -dadaabc.com, 0 -dadasoft.net, 0 daddyleagues.com, 0 -daewooenc.com, 0 -daewoong.co.kr, 0 -dafabet.com, 0 -dafangya.com, 0 -dafangya.com.cn, 0 daft.ie, 0 -dahuangbbs.com, 0 dahuatech.com, 0 -daichuqu.com, 0 dailynews.co.th, 0 -dailystandard.com, 0 -dajia365.com, 0 dajie.com, 0 -daling.com, 0 dangbei.com, 0 dangdang.com, 0 dankstop.com, 0 -daoiqi.com, 0 daojia.com, 0 -daojia.com.cn, 0 -daojia-inc.com, 0 daoyoudao.com, 0 daparto.de, 0 -dapiniu.com, 0 -daren.pro, 0 -dark-night.me, 0 -darksidecc.com, 0 -darktech.org, 0 -dark-time.com, 0 -daroo.by, 0 -daroo.ru, 0 daryo.uz, 0 -dasannetworks.com, 0 -dataart.com, 0 -datacaciques.com, 0 -datagate.ee, 0 data.gouv.fr, 0 -dataobject.hu, 0 -datastory.com.cn, 0 -datayes.com, 0 -datayuan.cn, 0 -datys.cu, 0 daveramsey.com, 0 -davidshuttle.com, 0 -davin.work, 0 -dawang.tv, 0 dawsoncollege.qc.ca, 0 -daybet24.com, 0 daybuy.tw, 0 -daycare.com, 0 daydao.com, 0 -dayezhifu.com, 0 dayhr.com, 0 -dbappsecurity.com.cn, 0 -dbface.com, 0 -dbpayment.com, 0 dc.gov, 0 -dcservices.in, 0 -dctp.tv, 0 -dd-dns.de, 0 -ddit.ac.in, 0 -ddnsfree.com, 0 -ddns.info, 0 ddns.me, 0 -ddoddotv.com, 0 ddo.jp, 0 -ddpai.com, 0 -de1.cc, 0 -dealber.gr, 0 deanza.edu, 0 -deathgrind.club, 0 debate.com.mx, 0 debeste.de, 0 -debian-facile.org, 0 -debianforum.ru, 0 -debian-handbook.info, 0 debian.net, 0 -debugme.eu, 0 -de-clic.ro, 0 -dedibox.fr, 0 -dedyn.io, 0 -deepoon.com, 0 -deepss.co, 0 -defo.ru, 0 -deg.net, 0 -del.ac.id, 0 -delaempokupki.ru, 0 delfi.ee, 0 delfi.lt, 0 delfi.lv, 0 -deliveryhero.com, 0 -deliverymuch.com.br, 0 dell-brand.com, 0 delmagyar.hu, 0 -delovoymir.biz, 0 -delsa.net, 0 -delta.com.tw, 0 -deltacredit.ru, 0 demiart.ru, 0 -demirbank.az, 0 -demis.ru, 0 -demoup.com, 0 -dentalspeedgraph.com.br, 0 -de-oosterpoort.nl, 0 -depit.ru, 0 depositphotos.com, 0 deppon.com, 0 -derev-grad.ru, 0 -desamais.fr, 0 -desc-wondo.org, 0 -devbean.net, 0 -deviq.com, 0 -deviserweb.com, 0 -devochki-i-igry.ru, 0 dezinfo.net, 0 -dfacture.com, 0 -dfb365.com, 0 df.gov.br, 0 -dfss.com.cn, 0 -dftb.cn, 0 dg.gov.cn, 0 -dgprocast.com, 0 -dgso.cn, 0 dgut.edu.cn, 0 -dhb168.com, 0 -dh.hu, 0 -dhis2.org, 0 dhu.edu.cn, 0 -diakoweb.com, 0 -dianhun.cn, 0 -dianjia.com, 0 -dianjoy.com, 0 dianxiaomi.com, 0 diaox2.com, 0 -diaoyuweng.com, 0 diarioregistrado.com, 0 -diasporafoundation.org, 0 -dicoding.com, 0 -didatrip.com, 0 didispace.com, 0 -didww.com, 0 -diedart1.com, 0 -dieteren.be, 0 -die-tier-welt.com, 0 digiboy.ir, 0 -digiexam.com, 0 -digiexam.se, 0 -digift.ru, 0 -digikam.org, 0 digik.ir, 0 -digitalcourage.de, 0 -digitalmarketing.jp, 0 -digitalpad.co.jp, 0 -digitellmobile.com, 0 -digito.com.tw, 0 dimonvideo.ru, 0 -dinamicbet.com, 0 dinaserver.com, 0 dingtalk.com, 0 -dinnerqueen.net, 0 -diocesismalaga.es, 0 dip.jp, 0 -diploma.de, 0 -directemar.cl, 0 -directgames.co.kr, 0 directg.net, 0 -directpay.ir, 0 -dirindirin.com, 0 -dirtrider.com, 0 -discharge.be, 0 -diskingressos.com.br, 0 -diskstation.me, 0 -distance.ru, 0 -dituwuyou.com, 0 -diulas.com, 0 -divteam.com, 0 -diychina.org, 0 diyidan.com, 0 -djcity.com.au, 0 -djdelivery.com, 0 -djduoduo.com, 0 -djfansub.com, 0 -djicorp.com, 0 -dj.ru, 0 -djv.de, 0 -djvu-pdf.com, 0 -djzmz.org, 0 -dk.kz, 0 dlinkddns.com, 0 -dm930.com, 0 -dmall.com, 0 -dmc.de, 0 -dm.center, 0 -dmeng.net, 0 -dmnico.cn, 0 dnevnik.ru, 0 -dnpr.com.ua, 0 -dnr24.su, 0 -dnsalias.com, 0 -dnsbil.com, 0 dns.com.cn, 0 -dnscrypt.org, 0 -dnsisp.net, 0 -dnspai.com, 0 -dnsrv.ru, 0 -do1.com.cn, 0 -dobot.cc, 0 -docdoc.ru, 0 docer.com, 0 -dockerapp.io, 0 docscrewbanks.com, 0 -doctorspring.com, 0 -doctrine.fr, 0 documentfoundation.org, 0 -doefiratv.org, 0 dogechain.info, 0 -dogovor24.kz, 0 -doity.com.br, 0 -dojobsonline.com, 0 -dokipedia.ru, 0 -doktordanhaberler.com, 0 -dollaruz.com, 0 -dolopo.net, 0 domashke.net, 0 -domeny.tv, 0 -domex.do, 0 -dominicos.org, 0 -dominos.com.do, 0 -dominos.ua, 0 -domirobot.com, 0 -domtele.com, 0 donationalerts.ru, 0 dongao.com, 0 -dongeejiao.com, 0 -dongshun3d.com, 0 -donjons-tresors.com, 0 donland.ru, 0 donnons.org, 0 -donya-digital.com, 0 -dooland.com, 0 -dorama.asia, 0 -dornanet.net, 0 -dornbracht.com, 0 -dor.org, 0 -dorsafamily.ir, 0 -doska.chita.ru, 0 -doswap.com, 0 dota2house.com, 0 dota2.net, 0 dothome.co.kr, 0 dotlan.net, 0 -dotroll.com, 0 -dottnet.it, 0 -dotunnel001.com, 0 -dotunnel.com, 0 -dou-bi.co, 0 -doublemap.com, 0 -doubletwist.com, 0 doujin.com.tw, 0 doulike.com, 0 -douran.com, 0 -dowater.com, 0 -dowerandhall.com, 0 downloadatoz.com, 0 -downloadcenter.me, 0 -downloadgamesnow.org, 0 downloadmanager.ir, 0 -download-redtube.eu, 0 -doxue.com, 0 -dpap.ro, 0 -dpb.sk, 0 -dp.gov.ua, 0 dpm.org.cn, 0 -dpo.cz, 0 dp.ru, 0 -dracoblue.net, 0 draeger.com, 0 dragonbound.net, 0 -dragongoserver.net, 0 dragonknight.ru, 0 -drdump.com, 0 dream.ren, 0 -dreifisch.com, 0 -drfakhar.ir, 0 -drgrab.com, 0 -drgrab.com.au, 0 -drgrab.co.uk, 0 -driversnout.com, 0 drofa-ventana.ru, 0 -droidbox.co.uk, 0 -droidboxforums.com, 0 -droidmod.ru, 0 -droidwiki.de, 0 drom.ru, 0 -dropscan.de, 0 -drugscouts.de, 0 -dscloud.me, 0 -dsmynas.com, 0 dsnews.ua, 0 -dss.go.th, 0 -dsty.ac.jp, 0 -dtdns.net, 0 dtest.cz, 0 dualshockers.com, 0 -duanzhihu.com, 0 duapp.com, 0 -dubna.net, 0 dubtrack.fm, 0 duckdns.org, 0 duden.de, 0 -duia.com, 0 -duiba.com.cn, 0 duitang.com, 0 -dujin.org, 0 duke.edu, 0 -dumaosheng.com, 0 -dundi.in, 0 -dunkhome.com, 0 -duocaitou.com, 0 duoc.cl, 0 -duoduotv.com, 0 -duplicationcentre.co.uk, 0 -durdom.in.ua, 0 -dushu.io, 0 -dusoyun.com, 0 -dut.edu.ua, 0 dutpt.com, 0 dvdfab.cn, 0 dvfu.ru, 0 -dvinaland.ru, 0 -dvrdns.org, 0 -dwhd.org, 0 -dx.am, 0 -dy.fi, 0 dynalias.com, 0 -dynalias.org, 0 -dynamic-dns.net, 0 dyndns.biz, 0 dyndns.dk, 0 dyndns.info, 0 -dyndns-ip.com, 0 -dyndns-server.com, 0 dyndns.tv, 0 -dyndns.ws, 0 dynns.com, 0 dynu.com, 0 -dzo.com.ua, 0 dzsofts.net, 0 dzwww.com, 0 e2e4online.ru, 0 eadaily.com, 0 -eagleplatform.com, 0 eapteka.ru, 0 -eareview.net, 0 easemob.com, 0 -easeye.com.cn, 0 eastday.com, 0 -eastmachinery.com, 0 -eastview.com, 0 -easyapi.com, 0 easyaq.com, 0 easydrop.ru, 0 -easyfly.club, 0 easynvest.com.br, 0 -easyon.cn, 0 -easypano.com, 0 -easypass.cn, 0 -easypm.cn, 0 -easytoys.cz, 0 -easyuni.com, 0 -ebacheca.it, 0 -ebarrito.com, 0 -ebase.com, 0 ebesucher.com, 0 ebesucher.de, 0 ebesucher.es, 0 -ebesucher.fr, 0 ebesucher.ru, 0 -ebg.net, 0 -ebible.org, 0 -ebmpapst.com, 0 ebookcn.com, 0 -ebptt.com, 0 -ebrarbilgisayar.com, 0 -ebs.org.cn, 0 -eccom.com.cn, 0 -ecf.asso.fr, 0 -e-chinalife.com, 0 echo24.cz, 0 -echosante.com, 0 -echoteen.com, 0 -eclub.se, 0 ecmsglobal.com, 0 ecnu.edu.cn, 0 -ecoin.cc, 0 -economy.gov.az, 0 -eco.pt, 0 ecpic.com.cn, 0 -ecrm.com.tw, 0 -eczhuyin.com, 0 -ed2k.in, 0 -edaixi.cn, 0 -edaixi.com, 0 edelweiss5.com, 0 -edge-core.com, 0 edigital.hu, 0 edinarcoin.com, 0 -editions-ue.com, 0 -edj.club, 0 -edm.uz, 0 -edmw.xyz, 0 ednet.ns.ca, 0 -edns.com, 0 -edoc2.com, 0 -edooon.com, 0 -edt02.net, 0 edu35.ru, 0 -edu4schools.gr, 0 educacion.gob.ar, 0 -educatorshandbook.com, 0 -educom.ru, 0 -eduherald.ru, 0 edu.kz, 0 edusite.ru, 0 edu.sk, 0 -eduspb.com, 0 -edu.te.ua, 0 -edu.tomsk.ru, 0 -eee.com, 0 -eelly.com, 0 eeworld.com.cn, 0 eeyy.com, 0 -efeihu.com, 0 eff.org, 0 -efko.ru, 0 eforms.org, 0 -efrei.fr, 0 -efrontlearning.com, 0 efsyn.gr, 0 -efubo.com, 0 -efun.com, 0 -efunfun.com, 0 -efuntw.com, 0 -efusion.co.jp, 0 -efzg.hr, 0 -egent.ru, 0 egou.com, 0 egov66.ru, 0 egret.com, 0 egrp365.ru, 0 -egrul-egrip.ru, 0 ehaoyao.com, 0 -ehighsun.com, 0 -ehm.cz, 0 -ehousechina.com, 0 -ehrana.si, 0 -ehrmedijugrupa.lv, 0 -eia.edu.co, 0 -eicp.net, 0 -eimagine.com, 0 -eink.com, 0 -e-inv.cn, 0 -eircom.net, 0 -ejabberd.im, 0 -ejarehkhodro.com, 0 -ejieban.com, 0 -ejsino.com, 0 -eken.com, 0 -e-koncept.ru, 0 -eksenbilgisayar.com, 0 -eks.sk, 0 -elaion.ch, 0 -elar.ru, 0 elasticbeanstalk.com, 0 -elblag.pl, 0 -elbrus-zapchasti.ru, 0 -eldiadehoy.net, 0 eldorado.com.ua, 0 eldorar.com, 0 -eleadglobal.com, 0 elec.ru, 0 -electro-mpo.ru, 0 -electronic-star.ch, 0 -electronic-star.cz, 0 -electronic-star.es, 0 -electronic-star.fr, 0 -electronic-star.hr, 0 -electronic-star.hu, 0 -electronic-star.it, 0 -electronic-star.pl, 0 -electronic-star.ro, 0 -electronic-star.si, 0 -electronic-star.sk, 0 -elektra.ru, 0 -elektronik-star.de, 0 -elem.mobi, 0 -elenafurs.ru, 0 -ele.to, 0 -eletrosom.com, 0 -elevenpaths.com, 0 -elf.com.tw, 0 -elga.gr, 0 elgato.com, 0 eliademy.com, 0 -elitesochi.com, 0 -eliteunitedcrew.org, 0 elitmus.com, 0 elit.ro, 0 -eliv-group.ru, 0 -elkor.lv, 0 -ellco.ru, 0 elleshop.com.cn, 0 -ellwoodepps.com, 0 -elm327rus.ru, 0 -elma-bpm.ru, 0 -elmosanat.com, 0 -elnet.by, 0 -eloancn.com, 0 -elotech.com.br, 0 -eltallerdelbit.com, 0 elte.hu, 0 -elway.ru, 0 ely.by, 0 -emaintec.com, 0 emao.com, 0 -emarbox.com, 0 -emarsys.com, 0 -embdev.net, 0 embedy.cc, 0 embl.de, 0 -emcmos.ru, 0 -emedi.gr, 0 -emeil.ir, 0 -emis.co.ao, 0 -emlid.com, 0 -emmaus-france.org, 0 -emnuvens.com.br, 0 -emo.org.tr, 0 emory.edu, 0 -emos.cz, 0 -empireofcode.com, 0 empleonuevo.com, 0 -emprana.ru, 0 -emsb.qc.ca, 0 -emtec.com, 0 enaa.com, 0 -enablecloud.co.uk, 0 -enact.co.uk, 0 ename.net, 0 -e-nci.com, 0 -encipher.it, 0 -encoding.com, 0 -endian.com, 0 -endmyopia.org, 0 endomondo.com, 0 -endpoint.com, 0 -energiezivota.com, 0 -enflares.com, 0 -engineowning.com, 0 eng.it, 0 england.nhs.uk, 0 -englishtopics.net, 0 en-marche.fr, 0 -e-norvik.eu, 0 -enriccorberainstitute.com, 0 -ensage-forum.ru, 0 -ensartaos.com.ve, 0 -ensg.eu, 0 -entega.de, 0 -entreleadership.com, 0 enu.kz, 0 eot.su, 0 -epac.to, 0 epam.com, 0 epanchang.com, 0 -e-pard.com, 0 epaslaugos.lt, 0 -epay.com, 0 -epetbar.com, 0 -epicwow.com, 0 -epi.sk, 0 epitech.eu, 0 epizy.com, 0 epom.com, 0 -epommarket.com, 0 -eprints.org, 0 -eprocurement.gov.gr, 0 -epsic.ch, 0 -eptonic.com, 0 epwk.com, 0 eq28.cn, 0 -eqbal.ac.ir, 0 erasmusu.com, 0 -ericom.com, 0 erinn.biz, 0 eropolis.hu, 0 -eroticen.com, 0 -erp-mz.ru, 0 errrotica.com, 0 -ershouhui.com, 0 escapefromtarkov.com, 0 -escapes.ca, 0 escience.cn, 0 -escolasecreches.com.br, 0 escorts2000.com, 0 esdict.cn, 0 -eseemodel.com, 0 -eset.kz, 0 es.gov.br, 0 -eshangke.com, 0 -eshko.kz, 0 -eshraghtranslators.com, 0 eshuyuan.net, 0 -esiea.fr, 0 esi.uz, 0 -eso.lt, 0 esri.com, 0 -essayedge.com, 0 -essencegold.com.br, 0 -essentialpim.com, 0 -estcard.ee, 0 estismail.com, 0 -estreams.tv, 0 -est.ua, 0 estudarfora.org.br, 0 -esu10.org, 0 -esu3.org, 0 -esu7.org, 0 -esxi.gr, 0 -esy.es, 0 -et8.org, 0 -eta.cz, 0 -etaex.com, 0 etagi.com, 0 -etaplius.lt, 0 -etb.net.co, 0 -etcnetwork.tv, 0 etf.com, 0 -et-forum.org, 0 -ethereal-gaming.com, 0 -ethfans.org, 0 -etland.co.kr, 0 -etong.com, 0 -etongdai.com, 0 -etracker.com, 0 -etsb.qc.ca, 0 -euchost.com, 0 eudic.net, 0 -eunetworks.com, 0 euobserver.com, 0 eurabota.com, 0 -eurasia.edu, 0 -eurekamag.com, 0 -eurekers.com, 0 -eurodir.ru, 0 -eurofirms.es, 0 -eurogest.company, 0 euronics.cz, 0 euronics.hu, 0 -euronova-italia.it, 0 europa2.sk, 0 -europages.com, 0 -europeya.ru, 0 -eurostudy.info, 0 -eu.spb.ru, 0 -euvic.pl, 0 eval.hu, 0 -evasionssecretes.fr, 0 -evenflo.com, 0 -eventact.com, 0 -eventfarm.com, 0 -eventim.si, 0 -eventpal.com.tw, 0 eventsair.com, 0 -eve-online-com.ru, 0 -everest.com.tw, 0 -evergrande.com, 0 -evermarker.com, 0 everycaller.com, 0 -everymatrix.com, 0 -everything.kz, 0 evget.com, 0 eviivo.com, 0 -evil0x.com, 0 -eviron.ru, 0 -evn.bg, 0 -evoi.ru, 0 -evolix.net, 0 -evotor.ru, 0 -evo-web.co.uk, 0 -evraz.com, 0 evroopt.by, 0 -evvnt.com, 0 eways.co, 0 eways.ir, 0 ewe.de, 0 -ewei.com, 0 -eweiqi.com, 0 -examslocal.com, 0 exaprint.fr, 0 -excelcalcs.com, 0 exdreams.net, 0 -exehack.net, 0 -exertisireland.ie, 0 -exetools.com, 0 ex-fs.net, 0 -eximb.com, 0 -experitest.com, 0 -experty.com, 0 -explorr.net, 0 -exportimes.com, 0 -exportpages.de, 0 -express.com.ar, 0 -extmail.org, 0 -extrahop.com, 0 -extremecraft.net, 0 -extremo.club, 0 -eyaos.com, 0 -eyehere.net, 0 -ezacg.net, 0 -ezdravkrg.org, 0 -ezfun.xyz, 0 -ezloo.com, 0 -ez.no, 0 -ezoterikus.hu, 0 ezwow.org, 0 ezyro.com, 0 f1news.ru, 0 f3322.net, 0 -f3322.org, 0 -f4yy.com, 0 -f5.si, 0 -fabfab.net, 0 -fabrikaokon.ru, 0 -fabula.club, 0 -facebac.com, 0 -faceit.ir, 0 facenews.ua, 0 -facta.com.br, 0 factcool.com, 0 -factorkon.ir, 0 -factor.ua, 0 -factureaza.ro, 0 fael.edu.br, 0 -fafait.ir, 0 -fainor.com.br, 0 -fairr.de, 0 faisco.cn, 0 faisco.com, 0 -fakturyonline.eu, 0 famebit.com, 0 -famerom.ir, 0 familydoctor.com.cn, 0 -famo.ir, 0 fancourier.ro, 0 -fanfic-fr.net, 0 fangamer.com, 0 -fangjinsuo.com, 0 fangte.com, 0 -fanhaojia.com, 0 -fanqier.cn, 0 -fantawild.com, 0 fantlab.ru, 0 -far800.com, 0 -farakav.com, 0 farapayamak.ir, 0 -farapic.com, 0 faraso.org, 0 -fareastone.com.tw, 0 -fariasbrito.com.br, 0 -farmalisto.com.co, 0 -farmec.ro, 0 -farmnest.com, 0 farmskins.com, 0 -faro.es, 0 -farsiworld.ir, 0 fashaoyou.net, 0 -fashion71.net, 0 -fashioncompany.rs, 0 -fashionfriends.ch, 0 -fast-anime.ru, 0 -fastcr.cz, 0 -fasteasy.at, 0 -fastjet.com, 0 -fast-mirror.de, 0 -fastprom.net, 0 -fast-report.com, 0 -fasttony.es, 0 -fast-unfollow.com, 0 -fastvideotoscana.it, 0 -fastwebserver.de, 0 -fat.com.tw, 0 favbet.com, 0 -favera.ru, 0 favorit.com.ua, 0 -faw-vw.com, 0 -fayea.com, 0 -fayzfm.uz, 0 -fazekas.hu, 0 -fbresponder.com.br, 0 -fcasd.edu, 0 -fcbarcelona.cz, 0 fccs.com, 0 -fckrasnodar.ru, 0 -fcn.de, 0 -fcstpauli.com, 0 fct-altai.ru, 0 -fd114.com, 0 fdc.com.cn, 0 -fdlx.com, 0 fedpress.ru, 0 -fedsp.com, 0 feedbooks.com, 0 -feedbooks.net, 0 -feedvisor.com, 0 fee.org, 0 -feifandy.net, 0 feijiu.net, 0 -feiliu.com, 0 -fei.sg, 0 feisovet.ru, 0 -feiyulian.cn, 0 -felgenshop.de, 0 -felink.com, 0 -fengbuy.com, 0 feng.com, 0 -feng-shui.ru, 0 -fengsung.com, 0 -fenjinshe.com, 0 -fensifuwu.com, 0 -fenxiangba.org, 0 -fernsehkritik.tv, 0 -ferrino.it, 0 -ferro-video.com, 0 -fert.cn, 0 fextralife.com, 0 -ffa-assurance.fr, 0 -ffforever.info, 0 ffh.de, 0 -ffhs.ch, 0 ffmpeg.org, 0 -ffplum.info, 0 -ffsg.org, 0 -ffxiv.cn, 0 fh21.com.cn, 0 -fh-koeln.de, 0 fhnw.ch, 0 -fia-net.com, 0 -fiberhome.com, 0 -fictiongrill.com, 0 fictionmania.tv, 0 -fidion.de, 0 -fieb.org.br, 0 fieldandstream.com, 0 fieldnation.com, 0 -fiff.de, 0 filelist.ro, 0 -filerooz.com, 0 -fileseek.ca, 0 filesell.ir, 0 filesend.to, 0 filetender.com, 0 -filmcrave.com, 0 -filmesonlinex1.com, 0 -filmistreet.com, 0 -film--izle.com, 0 -film.tv, 0 -film-ussr.ru, 0 -finansovyesovety.ru, 0 -findercom.ru, 0 -findface.ru, 0 -findmima.com, 0 -findsomeone.co.nz, 0 -findtenders.ru, 0 -findu.com, 0 -firejune.com, 0 -firestock.ru, 0 -firmstep.com, 0 -firo.ru, 0 -firstcarrental.co.za, 0 -firstleap.cn, 0 firstonetv.eu, 0 -fisc.md, 0 -fishbattle.net, 0 fishki.net, 0 -fitnezz.net, 0 -fj.cn, 0 fjcyl.com, 0 fju.edu.tw, 0 -flag.org, 0 -flamboyant.com.br, 0 flamp.ru, 0 -flatfy.az, 0 -flatfy.by, 0 -flatfy.kz, 0 -flatfy.ro, 0 -fleex.tv, 0 -flexcils.com, 0 flexibits.com, 0 -flickrocket.com, 0 -flipwalls.com.cn, 0 -flixbus.at, 0 -flixbus.be, 0 flixbus.com, 0 -flixbus.co.uk, 0 -flixbus.cz, 0 flixbus.de, 0 -flixbus.es, 0 flixbus.fr, 0 -flixbus.hr, 0 flixbus.it, 0 -flixbus.nl, 0 -flixbus.pl, 0 flixbus.ru, 0 -flnet.org, 0 -flnka.ru, 0 -floobits.com, 0 floralinvestment.com, 0 -floraverse.com, 0 -flowerpassword.com, 0 -flowerplus.cn, 0 -flptrading.net, 0 -fluxfm.de, 0 -flyerdevil.de, 0 flyingmag.com, 0 -flynsarmy.com, 0 -flytcloud.com, 0 flyuia.com, 0 -flyvpn.com, 0 -fmdisk.net, 0 -fnmotol.cz, 0 foboko.com, 0 focus.ua, 0 -fonar.tv, 0 -fondazionearching.it, 0 -foodclub.ru, 0 -food.co.il, 0 -foody.com.cy, 0 footballua.tv, 0 -footway.dk, 0 footway.se, 0 -forces-war-records.co.uk, 0 -fordaq.com, 0 -foreveross.com, 0 -forgerock.com, 0 -forgerock.org, 0 forgottenbooks.com, 0 -forma2plus.com, 0 -formsdotstar.com, 0 -formstone.it, 0 formulalubvi.com, 0 -formz.com, 0 -foroffice.ru, 0 -forotrolls.com, 0 -fortiddns.com, 0 fortinet.com, 0 forum-3dcenter.org, 0 -forumbee.com, 0 -forum.vn.ua, 0 -for-vk.com, 0 -forward-bank.com, 0 -foscam.com, 0 -foscammall.com, 0 fossies.org, 0 fosu.edu.cn, 0 -fotile.com, 0 -fotoev.com, 0 -fotograf.de, 0 -fotokasten.de, 0 -fotolab.ru, 0 -foton.com.cn, 0 fotor.com, 0 -fotor.com.cn, 0 fotosklad.ru, 0 fotostars.me, 0 -foundationsu.com, 0 -fountainpen.it, 0 fox008.com, 0 foxconn.com, 0 -foxconnmall.com, 0 foxitreader.cn, 0 -fox-mall.ru, 0 foxtrot.com.ua, 0 fozzy.com, 0 -fpucentral.com, 0 -fqapps.com, 0 -fragfinn.de, 0 -france-troc.com, 0 -francochinois.com, 0 -frankkingclub.com, 0 frdic.com, 0 freebieac.com, 0 freeboxos.fr, 0 -freebusy.io, 0 freeconferencecall.com, 0 -freedomrussia.org, 0 -freedom-vrn.ru, 0 free-ebooks.net, 0 free-electrons.com, 0 free.fr, 0 -freelance.boutique, 0 -freelance.com, 0 freelance.ru, 0 -freelance.today, 0 -freemail.gr, 0 -freemaineads.com, 0 freepaper.me, 0 -free-pdftoword.com, 0 -freepost.es, 0 freeprojectz.com, 0 -free-ro.com, 0 -freesafeip.com, 0 -freeskiers.net, 0 -freesoft-board.to, 0 -freestoriesforkids.com, 0 -freetemplatesonline.com, 0 -free-torrent.org, 0 free-torrents.org, 0 -freevar.com, 0 -freevps.us, 0 -freexf.com, 0 freezingblue.com, 0 -freie-volksmission.de, 0 -freifunk.net, 0 -frekvence1.cz, 0 -freshports.org, 0 -freshwatersystems.com, 0 -fr.ht, 0 -friends-forum.com, 0 fri-gate.org, 0 -friskyradio.com, 0 fromae.com, 0 fronter.com, 0 -frontpad.ru, 0 -frostland.pro, 0 -froxlor.org, 0 -frozencpu.com, 0 -frsky-rc.com, 0 fruitday.com, 0 -fs.com, 0 -fsfund.com, 0 -fshrss.gov.cn, 0 -fsinf.at, 0 -fsk-ees.ru, 0 -fspro.net, 0 -fuckav.ru, 0 fudan.edu.cn, 0 fudan.sh.cn, 0 -fujifilm-x.ru, 0 -fulba.com, 0 -fulidang.com, 0 -fuli.moe, 0 fuling.com, 0 -fuliv8.com, 0 -fullsecurity.org, 0 -fumasoft.com, 0 -funcook.com, 0 -fundamenta.hu, 0 -fundamental-research.ru, 0 -funfactory.com, 0 funiber.org, 0 funi.com, 0 funpot.net, 0 funradio.sk, 0 funshion.com, 0 -fun-taiwan.com, 0 -funweek.it, 0 -fuqizy.com, 0 fusker.xxx, 0 -fussballfantipp.de, 0 futbalnet.sk, 0 -futboholic.com, 0 -futboholic.com.ua, 0 -futboholic.ru, 0 -futpack.ru, 0 -fut.ru, 0 -futu5.com, 0 -futunn.com, 0 fuwo.com, 0 -fuyaogroup.com, 0 fxclub.org, 0 fxpan.com, 0 fxsound.com, 0 -fxteam.ru, 0 fyber.com, 0 -fyygame.pw, 0 -fyysports.com, 0 -fyzhuji.com, 0 fzdm.com, 0 -gagahi.com, 0 -gainapp.com, 0 galactikka.com, 0 -galaksion.com, 0 -galax.com, 0 -galgame.co, 0 galinos.gr, 0 -gallery-dump.com, 0 -galpenergia.com, 0 -gals.uz, 0 -game13.com, 0 game2.cn, 0 game2.com.cn, 0 -gamedreamer.com.tw, 0 -gameforgirl.ru, 0 gamehitzone.com, 0 -gameindy.com, 0 -gameliebe.com, 0 gamelumi.com, 0 -gameofbombs.com, 0 -gamereactor.de, 0 -gamereactor.dk, 0 -gamereactor.es, 0 gamereactor.eu, 0 -gamereactor.fi, 0 -gamereactor.it, 0 -gamereactor.no, 0 -gamereactor.pt, 0 gamereactor.se, 0 -gamesites.cz, 0 -gamesow.com, 0 gamesplanet.com, 0 -gameswelt.at, 0 -gameswelt.ch, 0 gameswelt.de, 0 -gameswelt.tv, 0 -gameurs.net, 0 -gameware.at, 0 gamexp.ru, 0 gamyun.net, 0 -gannun.cn, 0 ganso.com.cn, 0 -gansuche.cn, 0 gaokaopai.com, 0 -gaopeng.com, 0 gaosouyi.com, 0 -gaotizi.com, 0 -garada.net, 0 -garagemca.org, 0 garant.ru, 0 garden.org, 0 -garminshop.ir, 0 -gartenhaus-gmbh.de, 0 -gaskrank.tv, 0 -gastrogate.com, 0 -gasu.ru, 0 -gavag.ru, 0 gazeta.ru, 0 gazprom.ru, 0 -gazu.ru, 0 gba.gov.ar, 0 -gcbi.com.cn, 0 gcup.ru, 0 -gdalpha.com, 0 -gdga.gov.cn, 0 -gdgbpx.com, 0 -gd-line.com, 0 gdufs.edu.cn, 0 -gear.host, 0 -ge.com.cn, 0 geekbang.org, 0 geekbrains.ru, 0 geekie.com.br, 0 -geekielab.com.br, 0 -geekpeek.net, 0 -geekteam.pro, 0 -geekup.pl, 0 -gefaellt-mir.me, 0 -gegejia.com, 0 -gem4me.com, 0 -gemz.ir, 0 -gench.edu.cn, 0 -genealogieonline.nl, 0 geneanet.org, 0 -geneawiki.com, 0 -genecopoeia.com, 0 -generationlove.com, 0 -genofond.org, 0 genomics.cn, 0 -genscript.com, 0 -genscript.com.cn, 0 -genser.ru, 0 -geoprostor.net, 0 -gerald.top, 0 gerdoo.net, 0 -gerdoosoft.com, 0 gerencianet.com.br, 0 -germanystudy.net, 0 -geru.com.br, 0 -ges-bo.de, 0 -gesext.de, 0 -get4click.ru, 0 getabstract.com, 0 -getadmiral.com, 0 -getcs16.ru, 0 -getdc.ru, 0 -get-in-it.de, 0 -getinmybelly.com, 0 getitfree.cn, 0 getmyscript.com, 0 -getriver.com, 0 -getrix.it, 0 getsitecontrol.com, 0 get-styles.ru, 0 -gettertools.com, 0 get-tune.cc, 0 -getujobs.com, 0 -gewobag.de, 0 -gfw.pics, 0 gfycat.com, 0 -gg4m.com, 0 -ggcj.com, 0 -ggmgastro.com, 0 ghac.cn, 0 gibdd.ru, 0 gicp.net, 0 -gidnetwork.com, 0 -giftster.com, 0 gigabaza.ru, 0 gigabyte.cn, 0 -gigaleecher.com, 0 -gigaserver.cz, 0 gigatronshop.com, 0 gigfa.com, 0 -giiwa.org, 0 -gimhoy.com, 0 gimp.org, 0 -ginger-cat.ru, 0 -gioc.kiev.ua, 0 -gionee.com, 0 giordano.com, 0 -gioseppo.com, 0 -gioxx.org, 0 -gira.com, 0 -gira.de, 0 -girimulya.com, 0 -girl010.com, 0 girlsdocam.com, 0 -girlsinparis.com, 0 -girsa.ru, 0 -gisclub.tv, 0 -gis-lab.info, 0 github.io, 0 -gitlab.cc, 0 -giuseppe.cn, 0 -giustizia-amministrativa.it, 0 -giveyousomecolortoseesee.com, 0 gizmiz.com, 0 -gizzmoheaven.com, 0 -gjzq.com.cn, 0 -glamius.ru, 0 glamour.ru, 0 -glashkoff.com, 0 -glassrpske.com, 0 glavred.info, 0 -glitchthegame.com, 0 -globaldynamicmarketing.com, 0 -globalitanalytics.com, 0 -globalnomadic.com, 0 -globalpolicy.org, 0 globusmax.co.il, 0 -glocalme.com, 0 -glogow.pl, 0 -gmcc.net, 0 gnome.org, 0 gnway.cc, 0 -gnway.com, 0 -go2olymp.com, 0 -goapr.com, 0 -gobaidugle.com, 0 gob.bo, 0 gob.cl, 0 gob.do, 0 -gochengdu.cn, 0 -godeyes.cn, 0 godic.net, 0 -god.jp, 0 -godnota.org, 0 -goeasy.io, 0 -gogosu.xyz, 0 gogvo.com, 0 -goip.de, 0 -goldapple.ru, 0 -goldbroker.com, 0 -goldbroker.fr, 0 -golden-monkey.ru, 0 -goldenpages.ie, 0 -goldwind.com.cn, 0 -golo365.com, 0 -golospravdy.com, 0 -golpas.com, 0 -gomehigo.hk, 0 gomel.today, 0 -gomobil.cz, 0 -g-one-inc.com, 0 -gongfubb.com, 0 -good.cc, 0 goodgame.ru, 0 goodly.pro, 0 -goodsflow.com, 0 -goodtyping.com, 0 goody25.com, 0 -googto.org, 0 -goo.kz, 0 -gootara.org, 0 -gopas.cz, 0 -gorlice.pl, 0 -go.ro, 0 -gorodche.ru, 0 -goskills.com, 0 -gospmr.org, 0 -gossh.net, 0 -gotdns.com, 0 -gothicwiki.pw, 0 -gotocdn.com, 0 gotokeep.com, 0 -gouv.bj, 0 gouv.ci, 0 -gov35.ru, 0 gov.cl, 0 government.bg, 0 gov.kz, 0 gov.md, 0 gov.mg, 0 -gov.mw, 0 govoritmoskva.ru, 0 gov.ro, 0 -gov.sc, 0 gov.taipei, 0 -govvrn.ru, 0 -gow.help, 0 -gp.by, 0 -gpgtools.org, 0 -gpntb.ru, 0 gq.ru, 0 grabien.com, 0 -grabitjeeves.com, 0 -grandcapital.net, 0 -grandtheftarma.com, 0 -graphsketch.com, 0 gravitytales.com, 0 -gr.ch, 0 -grcrt.net, 0 -greatagroup.com, 0 green-japan.com, 0 -greenmama.ru, 0 -greenpeace.fr, 0 -greenpeace.org.br, 0 -greetz.be, 0 greetz.nl, 0 -gridrepublic.org, 0 -gridsum.com, 0 grnet.gr, 0 grodno.net, 0 -groene.nl, 0 -groov.pl, 0 groundspeak.com, 0 -groupe-efrei.fr, 0 -growfood.pro, 0 -grpl.org, 0 grsu.by, 0 -grupocobra.com, 0 -grupoiris.net, 0 -gruponzn.com, 0 -gruposanilab.es, 0 -gruposayer.com, 0 -gruppoiren.it, 0 -grupposandonato.it, 0 -gruso.cz, 0 -gruzovichkof.ru, 0 gsmhosting.com, 0 -gsn7.jp, 0 -gstu.by, 0 -gtags.net, 0 -gtk.org, 0 guahao.com, 0 -guanba.com, 0 guangming.com.my, 0 -guap.ru, 0 guardian.ng, 0 guazi.com, 0 gucheng.com, 0 -gudauri.ru, 0 guerrillamail.com, 0 -guestcentric.net, 0 -guguke.net, 0 guidechem.com, 0 guiguiw.com, 0 -guilinbank.com.cn, 0 -gulbenkian.pt, 0 -gumrf.ru, 0 -gum.ru, 0 -guosen.com.cn, 0 -gusline.ru, 0 -gusti-leder.de, 0 -gustullays.ro, 0 -guu.ru, 0 gv.com.sg, 0 -gvodbox.com, 0 -gw500.com, 0 gwdang.com, 0 -gwifi.com.cn, 0 gxnews.com.cn, 0 -gymnasium-ganderkesee.eu, 0 -gymondo.de, 0 -gyroscope.com, 0 -gz163.cn, 0 -gzedu.com, 0 -gzjjzd.gov.cn, 0 -gzjkw.net, 0 -gzkkonline.com, 0 -gzmpc.com, 0 gzmtr.com, 0 -h1n.ru, 0 h3c.com, 0 -h3yun.com, 0 -haahi.com, 0 -habbopoop.org, 0 -habito.com, 0 -habitos.mx, 0 -habtium.es, 0 -hacam.me, 0 -hack80.com, 0 -hackademics.fr, 0 -hack.chat, 0 -hack-cn.com, 0 -hac-ker.net, 0 -hackerthemes.com, 0 -hackspark.fr, 0 -hacpai.com, 0 -hadawebshop.hu, 0 -hadiah.me, 0 -hadiko.de, 0 -haendlerschutz.com, 0 -hageltech.com, 0 -hahaxue.com, 0 -haibei.in, 0 haier.com, 0 -haier.net, 0 -haimanchajian.com, 0 -haisoft.net, 0 -haiziwang.com, 0 -hal.ac.jp, 0 -half-moon.org, 0 -halihali.tv, 0 -hallard.me, 0 -hallenstadion.ch, 0 halykbank.kz, 0 -ham3d.co, 0 -hamlog.ru, 0 -hamresan.net, 0 handbrake.fr, 0 -hand-china.com, 0 -handhand.net, 0 -handicap-job.com, 0 hanfan.cc, 0 -hanfverband.de, 0 -hangge.com, 0 hangzhou.com.cn, 0 hangzhou.gov.cn, 0 hanhuazu.cc, 0 -hanjutv.com, 0 -hanwha.co.kr, 0 hao123.com, 0 -hao24.cn, 0 -hao24.com, 0 -hao76.com, 0 -haochedai.com, 0 -haodai.com, 0 -haodianpu.com, 0 haodou.com, 0 -haohaizi.com, 0 -haoid.cn, 0 -haomaiche.com, 0 -haosou.com, 0 -haosuzhou.com, 0 -haoxiana.com, 0 -haozhebao.com, 0 -happist.com, 0 happy88.com, 0 -happyelements.com, 0 happyjuzi.com, 0 -hardgrand.com, 0 -hardtunedstore.com, 0 -haribo.com, 0 -haroldltd.ru, 0 -harpoongaming.com, 0 -harpost.com, 0 -harvest.org, 0 -hashemian.com, 0 hashflare.io, 0 hashkiller.co.uk, 0 -hasjob.co, 0 -hassyon.com, 0 hasznaltauto.hu, 0 -haust.edu.cn, 0 -havaforum.com, 0 -hawaiipacifichealth.org, 0 -haypost.am, 0 -hazeover.com, 0 -hb-n-tax.gov.cn, 0 hbooker.com, 0 hbut.edu.cn, 0 hc360.com, 0 hcc.edu.tw, 0 hc.ru, 0 -hcsibir.ru, 0 -hcs.land, 0 -hdarea.co, 0 hdb.com, 0 hdbox.ws, 0 hdclub.org, 0 hdcmct.org, 0 -hd.free.fr, 0 -hdhello.com, 0 hdhome.org, 0 -hdmoney.cn, 0 -hdschools.org, 0 -hdshwh.com, 0 hdslb.com, 0 hd-spain.com, 0 -hdtmedia.com, 0 -hdw.la, 0 -headstats.com, 0 -healthday.com.au, 0 -health.nz, 0 -heartbowsmakeup.com, 0 -heavytools.hu, 0 hebei.com.cn, 0 hebis.de, 0 hebut.edu.cn, 0 hec.gov.pk, 0 -heidelbergerwohnen.de, 0 heiguang.com, 0 hej.sk, 0 -hekko24.pl, 0 -heliguy.com, 0 -heliohost.org, 0 -hellenicnavy.gr, 0 -hellmann.net, 0 -hellocq.net, 0 hellotalk.com, 0 -hellotars.com, 0 hellweg.de, 0 -helmo.be, 0 -helpmij.nl, 0 -helprace.com, 0 helpshift.com, 0 -hemden.de, 0 hentairules.net, 0 -hercrentals.com, 0 -hermitageshop.ru, 0 -herni.cz, 0 herokuapp.com, 0 heureka.cz, 0 heureka.sk, 0 -heveya.ru, 0 -heweather.com, 0 hexieshe.com, 0 -hexindai.com, 0 -hgmail.com, 0 hh010.com, 0 -hhos.ru, 0 hiapk.com, 0 -hiapphere.com, 0 -hicraft.cn, 0 -hidalgo.gob.mx, 0 hide-my-ip.com, 0 -hi-docs.com, 0 -hifi-tower.co.uk, 0 high-minded.net, 0 highpin.cn, 0 -highscreen.ru, 0 hightech.fm, 0 hihocoder.com, 0 -hinabian.com, 0 -hinaloe.net, 0 -hinata-online-community.fr, 0 -hipac.cn, 0 hi-pda.com, 0 hipertextual.com, 0 -hippocratesinst.org, 0 hirede.com, 0 -hiredops.com, 0 hirist.com, 0 hisense.com, 0 -histmag.org, 0 histock.tw, 0 hitbox.tv, 0 -hitechboard.ru, 0 hit.edu.cn, 0 -hitonline.ua, 0 -hitour.cc, 0 hitutor.com.tw, 0 -hj-qz.com, 0 -hkbf.org, 0 -hkedu.sh.cn, 0 -hkst.com, 0 hlamer.ru, 0 hm.edu, 0 hnagroup.com, 0 -hnagroup.net, 0 hnair.com, 0 -hnair.net, 0 hndnews.com, 0 -hneao.cn, 0 hnr.cn, 0 -hnrsks.com, 0 -hnteacher.net, 0 hnu.edu.cn, 0 -hochbahn.de, 0 -hochbahn-direkt.de, 0 hockey30.com, 0 hoffmann-group.com, 0 -hoge.cn, 0 hokudai.ac.jp, 0 hola.com, 0 -holarse-linuxgaming.de, 0 -hol.es, 0 -holike.com, 0 -hollard.co.za, 0 -holmesreport.com, 0 -hologfx.com, 0 -holyo.org, 0 -home-cloud.me, 0 homeip.net, 0 -homelinux.com, 0 -homelinux.org, 0 -homemediaserver.ru, 0 -homenet.org, 0 -homepc.it, 0 home.pl, 0 -homerez.com, 0 -homeserver.com, 0 -homeunix.com, 0 homeworkmarket.com, 0 -honor.es, 0 -hoperun.com, 0 hopto.org, 0 horabrasil.com.br, 0 horoscope.com, 0 horoscopo.com, 0 -hostazor.com.tr, 0 -host-ed.me, 0 -hostelmanagement.com, 0 hosteurope.de, 0 -hostforweb.com, 0 -hostiman.ru, 0 -hostingkunde.de, 0 -hostingtime.de, 0 -hostitsmart.com, 0 -hostminio.es, 0 -hostpair.com, 0 -hostpark.cn, 0 -hostplus.gr, 0 -hostseo.com, 0 host-tracker.com, 0 -hotbikeweb.com, 0 -hotdealsclub.com, 0 -hot-deals.org, 0 -hotels.ru, 0 hotjob.cn, 0 -ho.ua, 0 house365.com, 0 -housingcare.org, 0 houxue.com, 0 hoverwatch.com, 0 -how-living.com, 0 howtoinstall.co, 0 -hozehkh.com, 0 -hp-lexicon.org, 0 -hq-patronen.de, 0 -hqvpn.cn, 0 hrbeu.edu.cn, 0 hrloo.com, 0 -hrp.hu, 0 -hrsd.com, 0 -hrstop.com, 0 -hrstoppro.com, 0 -hrtl.com.cn, 0 -hrtpayment.com, 0 -hrwhisper.me, 0 -hschinese.com, 0 -h-schmidt.net, 0 -hscloud.cn, 0 hse.ru, 0 hs-furtwangen.de, 0 -hslda.org, 0 -hsw.com.au, 0 -hsweb.me, 0 -htfc.com, 0 -ht-line.ru, 0 -htmlweb.ru, 0 -hts.ru, 0 -htyd50.com, 0 huajiao.com, 0 huawei.com, 0 -huaxi100.com, 0 -huaxincem.com, 0 -huaxing.com, 0 -hubcity.ir, 0 hublaa.me, 0 -hubpress.ir, 0 -hubsan.com, 0 -huijia.edu.cn, 0 -huilianyi.com, 0 -huimaiche.com, 0 huim.com, 0 -huimin.cn, 0 -humlnet.cz, 0 hunan.gov.cn, 0 hundsun.com, 0 hunliji.com, 0 -hunters.com, 0 -huntnews.in, 0 -huntworld.ru, 0 -huodonghezi.com, 0 -huoduan.com, 0 huorong.cn, 0 -hushangcaifu.com, 0 hust.edu.cn, 0 hustonline.net, 0 huway.com, 0 huxiu.com, 0 huzhan.com, 0 -hwu.edu.tw, 0 -hx9999.com, 0 -hxacc.com, 0 hxsd.com, 0 -hxtao.site, 0 -hyipchina.com, 0 -hyip.tc, 0 -hymer.com, 0 hymnal.net, 0 -hyperay.cc, 0 -hyperhosting.gr, 0 -hyperledger.org, 0 hyperreal.info, 0 -hypetap.com, 0 hypnoseries.tv, 0 -hytc.edu.cn, 0 -hytera.com, 0 hzfc.gov.cn, 0 -hzjcb.com, 0 -i234.me, 0 -i3wm.org, 0 -i4th.in.th, 0 -i8xiaoshi.com, 0 -iae.edu.ar, 0 -iaixue.com, 0 -iamwhitneywisconsin.com, 0 -iapppay.com, 0 -iasassessment.com, 0 -iasbs.ac.ir, 0 -iask.in, 0 iautos.cn, 0 -ib3tv.com, 0 -ibantang.com, 0 -ibanyu.com, 0 -ibaoyin.com, 0 ibero.mx, 0 -ibis.net.ua, 0 iboxpay.com, 0 -iboys.at, 0 -iboys.cz, 0 -ibroadlink.com, 0 -ibs.re.kr, 0 -i-cad.fr, 0 -icaile.com, 0 -icculus.org, 0 iccup.com, 0 -iceberg.ru, 0 -icegram.com, 0 -icetrade.by, 0 -ichess.es, 0 -ichess.net, 0 iciba.com, 0 icicilombard.com, 0 ickd.cn, 0 -iclei.org, 0 icourse163.org, 0 icrt.cu, 0 ict.ac.cn, 0 -icult.ru, 0 -icybee.cn, 0 icy-veins.com, 0 -idaybreak.com, 0 -ideabank.by, 0 -ideadunes.com, 0 -ideal.az, 0 -idealkaynak.net, 0 idf.il, 0 idhost.kz, 0 -idl.pl, 0 -idokep.eu, 0 idokep.hu, 0 idoklad.cz, 0 -idomix.de, 0 idope.se, 0 -idport.kz, 0 -idreamsky.com, 0 -idshost.fr, 0 -idsurvey.it, 0 idtdna.com, 0 -id.uz, 0 -idwpublishing.com, 0 -idx.com.cn, 0 -iesp.edu.br, 0 -ifanqiang.cn, 0 ifanr.com, 0 -ifcmarkets.com, 0 -ifcmir.asia, 0 ifeng.com, 0 -ifinterface.com, 0 -ifj.edu.pl, 0 -iflysse.com, 0 ifmo.ru, 0 -ifood360.com, 0 -ifto.edu.br, 0 -ignatianum.edu.pl, 0 -ignitenet.com, 0 -ignorelist.com, 0 -igoos.net, 0 -igps.ru, 0 -i-gram.ir, 0 -igrow.cn, 0 -igrushki7.com.ua, 0 ih5.cn, 0 -iho.in, 0 -ihonex.com, 0 -ihrscloud.com, 0 -ihuaben.com, 0 -ihuan.me, 0 -ihx99.vip, 0 -iicavers.ru, 0 ii-i.org, 0 iiit.ac.in, 0 iimjobs.com, 0 -iiss.org, 0 iitb.ac.in, 0 iitg.ac.in, 0 -ikalogs.ru, 0 -ikc.edu.tr, 0 -iki.fi, 0 -iklangratiz.com, 0 -iklub.sk, 0 iknow.jp, 0 -iknow.travel, 0 -ikros.sk, 0 ikuai8.com, 0 -ilab.cn, 0 -ilam.ac.ir, 0 -ilanni.com, 0 -ilaoyawo.com, 0 ilcorsaronero.info, 0 -iligang.cn, 0 -ilizium.com, 0 -ilounge.ua, 0 -ilovemum.ru, 0 ilucca.net, 0 -im9.cz, 0 imageban.ru, 0 imag.fr, 0 -imaginarium.com.br, 0 -imaginarium.es, 0 -imarket.by, 0 -imarotulos.com, 0 -imcn.me, 0 -imedi.ge, 0 imeidata.net, 0 -imei-server.com, 0 -imei-server.ru, 0 -img.com.ua, 0 -immigrationvoice.org, 0 immobilienscout24.at, 0 immobilienscout24.de, 0 -immotransit.be, 0 -imoffice.com, 0 imore.com, 0 impactradius.com, 0 -imperia-sadovoda.ru, 0 imperiyanews.ru, 0 -implyingrigged.info, 0 -impresa.pt, 0 -impressorajato.com.br, 0 -improbable.io, 0 -impulse.de, 0 -imsxm.com, 0 -imwork.net, 0 -inaani.com, 0 -in-berlin.de, 0 -inbucovina.ro, 0 inc.com, 0 -incircle.jp, 0 -inconcertcc.com, 0 -incontrion.com, 0 -inc.ru, 0 -inc-vrdl.iq, 0 indamail.hu, 0 -indiada.ru, 0 -indiatradefair.com, 0 indirads.work, 0 -indra.com, 0 -inet.edu.ar, 0 -i-news.kz, 0 -infiniti.com.cn, 0 -infinitus.com.cn, 0 -infinitycloud.com, 0 infinixmobility.com, 0 inflibnet.ac.in, 0 -inflyteapp.com, 0 -info241.com, 0 -infobox.ru, 0 -infobusiness2.ru, 0 -infoimoveis.com.br, 0 -infokam.su, 0 infomaniak.ch, 0 infomaniak.com, 0 -infomercados.com, 0 -infomir.eu, 0 infonavit.org.mx, 0 -infon.ru, 0 infopraca.pl, 0 inforesist.org, 0 -informamolise.com, 0 inform.kz, 0 -inforoutefpt.org, 0 -infoskidka.ru, 0 -infosliv.club, 0 infotec.be, 0 -info.tm, 0 -infovend.ru, 0 -infradead.org, 0 -infrymo.com, 0 -inf.ua, 0 -ingeteam.com, 0 -inistrack.net, 0 -inje.ac.kr, 0 inke.cn, 0 inmyroom.ru, 0 -innab.org, 0 -innopolis.ru, 0 -innotech.co.jp, 0 inonu.edu.tr, 0 -inovance.cn, 0 -inovarmais.com, 0 -inpa.gov.br, 0 -inpost.ru, 0 -inpsycho.ru, 0 -inres.sk, 0 -insertcoin.mx, 0 -insert.com.pl, 0 -insideparadeplatz.ch, 0 insistpost.com, 0 -inspire-energy.com.cn, 0 inspur.com, 0 -instabot.ir, 0 -instagramtakiphilesi.com, 0 -instamc.com.br, 0 -instawork.com, 0 instela.com, 0 -instrumentschedule.com, 0 -insurancenewsnet.com, 0 -insynq.com, 0 -intant.ru, 0 -intechnic.com, 0 -integle.com, 0 -intelvision.sc, 0 interaction-design.org, 0 -interaffairs.ru, 0 -interakt.co, 0 -intermaps.com, 0 internations.org, 0 -internetwerk.de, 0 -interpreters.travel, 0 -interra.ru, 0 -intersport.es, 0 -intersport.ru, 0 intex.in, 0 -inthepicture.com, 0 intimcity.nl, 0 -intinfra.com, 0 intocareers.org, 0 -intovps.com, 0 intuit.com, 0 intuit.ru, 0 -intvua.com, 0 -inventec.com, 0 -investservices.ir, 0 -invoiceplane.com, 0 -inwx.de, 0 iobb.net, 0 -ioe.edu.np, 0 -ioinformatics.org, 0 -iok.la, 0 -iol8.com, 0 -ioliu.cn, 0 iomedia.ru, 0 -i-on.net, 0 -ios.ac.cn, 0 -iotivity.org, 0 ip138.com, 0 -ip-188-165-217.eu, 0 ipb.ac.id, 0 -ipdisk.co.kr, 0 -iperf.fr, 0 -ipfs.io, 0 -ipinyou.com, 0 -ipipe.ru, 0 -ipmobilea.com, 0 -ipmu.jp, 0 -ipnxnigeria.net, 0 ipresta.ir, 0 -ipricegroup.com, 0 iptime.org, 0 -iqads.ro, 0 -iqit-commerce.com, 0 iqoption.com, 0 -iqor.com, 0 -iqugroup.com, 0 -iranadsco.com, 0 -iranapp.org, 0 -iran-doc.com, 0 -irangpsmap.com, 0 -iranh.ir, 0 iranicard.com, 0 -irankiai.lt, 0 -iranmap.biz, 0 -iranmohajerat.ir, 0 -iranonymous.org, 0 iransamaneh.com, 0 iranserver.com, 0 iranshao.com, 0 -irantunez.com, 0 -iranweb.co, 0 iraqinews.com, 0 -irbib.com, 0 -ircity.ru, 0 -ireadercity.com, 0 -iredmail.org, 0 -iresis.com, 0 -irfanview.de, 0 -irgups.ru, 0 -iriney.ru, 0 irk.ru, 0 -irockbunny.com, 0 ironplanet.com, 0 -iroot.kr, 0 irpowerweb.com, 0 irr.ru, 0 -irsahosting.ir, 0 -irsecteam.org, 0 is74.ru, 0 -is-a-geek.org, 0 -is-best.net, 0 -ischool.com.tw, 0 -iscool.co.il, 0 -isea.ru, 0 -iseehd.tv, 0 -isel.pt, 0 -iserv-gis.de, 0 -ishangzu.com, 0 -ishanitech.biz, 0 ishansong.com, 0 ishinfo.com, 0 -ishoutbox.com, 0 ishuhui.com, 0 isi.edu, 0 -isif-life.com, 0 iskn.co, 0 islands.com, 0 -ismdy.com, 0 -isming.me, 0 isolux.ru, 0 -isotools.org, 0 ispeak.cn, 0 -israfish.com, 0 -issaplus.com, 0 -issdigitalthe.com.br, 0 istanbulbilisim.com.tr, 0 -istarshine.com, 0 -istarvip.cn, 0 -istek.edu.az, 0 -istic.ac.cn, 0 -istio.com, 0 -istt.ir, 0 -istu.edu, 0 isu.ru, 0 -italy-vms.ru, 0 -itangyi.com, 0 itb.ac.id, 0 itcast.cn, 0 -itcinfotech.com, 0 -itcolima.edu.mx, 0 -it.cx, 0 -iteam.ru, 0 itecgoi.in, 0 -itechgyan.com, 0 -itelligence.de, 0 -ithmz.com, 0 -itiffany.cc, 0 -itivi.pl, 0 -it-kb.ru, 0 -itlab.com.br, 0 -itlalaguna.edu.mx, 0 itmages.ru, 0 -itm.edu, 0 itmo.com, 0 -itmonline.co.in, 0 -itour.cn, 0 itouzi.com, 0 -it.pt, 0 -itransition.com, 0 -itresearches.ir, 0 -itrip.com, 0 -itshaman.ru, 0 itsk.com, 0 -ittour.com.ua, 0 itzmx.com, 0 i.ua, 0 -iubh.de, 0 -iustice.net, 0 -iuventa.sk, 0 -iuvui.net, 0 -ivc34.ru, 0 ivest.kz, 0 -iviewui.com, 0 ivi.ru, 0 -i-vtb.by, 0 -ivteleradio.ru, 0 -iwant.cz, 0 ixdzs.com, 0 -ixingpan.com, 0 -ixinyou.com, 0 ixiumei.com, 0 iyingdi.com, 0 iyiou.com, 0 -iyuntoo.com, 0 iyunv.com, 0 -iyunxiao.com, 0 -izim.az, 0 -izmailovo.ru, 0 -iztwp.com, 0 izvestia.ru, 0 -jaadee.com, 0 -jaas.ac.cn, 0 -jabber.ru, 0 jac.com.cn, 0 jaeapp.com, 0 -jaguar.ru, 0 -jahanserver.com, 0 jalf.com, 0 jamasp.ir, 0 jamesallen.com, 0 -janosh.com, 0 -japex.ru, 0 -jaranguda.com, 0 -jardinazuayo.fin.ec, 0 -jarjad.ru, 0 javanonline.ir, 0 javarush.ru, 0 javascript.ru, 0 -jawset.com, 0 jazz-shop.ru, 0 -jci.cc, 0 -jcndev.com, 0 -jcy.gov.cn, 0 -jdair.net, 0 jd.com, 0 -jdlf.com.au, 0 -jecvay.com, 0 -jejunu.ac.kr, 0 -jelastic.com, 0 -jellyfish.net, 0 -jenkers.com, 0 -jerez.es, 0 -jergym.cz, 0 -jerryspizza.ro, 0 -jesus-comes.com, 0 -jetinsta.com, 0 -jetzt.at, 0 -jeyserver.com, 0 -jfservice.ru, 0 -jgospel.net, 0 -jhddg.com, 0 jhu.edu, 0 jia.com, 0 jiae.com, 0 -jiahao.me, 0 -jian40.com, 0 jiandaoyun.com, 0 -jiangmen.gov.cn, 0 jiangnan.edu.cn, 0 -jianjiaobuluo.com, 0 jiankang.com, 0 -jiashuangkuaizi.com, 0 -jiayougo.com, 0 -jiedaibao.com, 0 -jiedai.cn, 0 jiemodui.com, 0 -jieyitong.cn, 0 -jijiys.com, 0 -jikewenku.cn, 0 jin10.com, 0 jindl.com.cn, 0 -jinkan.org, 0 -jinnong.cn, 0 -jinri.cn, 0 -jinritemai.com, 0 -jinr.ru, 0 jinshangdai.com, 0 -jinshuju.com, 0 jinshuju.net, 0 jinxin99.cn, 0 -jinzhoubank.com, 0 -jios.org, 0 jisutiyu.com, 0 -jitterclick.it, 0 -jiuguge.com, 0 jiuxian.com, 0 -jiuzhilan.com, 0 -jivaro.com, 0 jj.cn, 0 -jjmmw.com, 0 jkpan.cc, 0 -jl.gov.cn, 0 -jlnu.edu.cn, 0 -jlpay.com, 0 jlu.edu.cn, 0 -jluzh.com, 0 -jme.com, 0 -jmramirez.pro, 0 -jobbik.hu, 0 -jobindo.com, 0 job.ru, 0 -job-sbu.org, 0 jobthai.com, 0 -jodoplay.com, 0 -joiiup.com, 0 joinquant.com, 0 -joker.com, 0 -jolco.com, 0 joomlagate.com, 0 -jostle.me, 0 -jourdegalop.com, 0 -joybomb.com.tw, 0 -joyfulhonda.com, 0 joyme.com, 0 -joyomm.com, 0 -joyowo.com, 0 jpgazeta.ru, 0 jpg.wtf, 0 jpmarumaru.com, 0 jp.net, 0 jpn.ph, 0 -jqpublicblog.com, 0 -jquery.re, 0 jrj.com.cn, 0 -js99cf.com, 0 -jsbc.com, 0 jsinfo.net, 0 -jslib.org.cn, 0 -jsrun.net, 0 -jst-hosp.com.cn, 0 jstv.com, 0 -ju53.com, 0 juanpi.com, 0 -juanpi.org, 0 -jubaopay.com, 0 -juben108.com, 0 -jubna.com, 0 -jucaicat.com, 0 juesheng.com, 0 juhe.cn, 0 -juicysexstories.com, 0 juju.com, 0 -julianhuang.cc, 0 julyedu.com, 0 jumei.com, 0 juming.com, 0 -jumpserver.org, 0 -juneinter.com, 0 -juneyaoair.com, 0 -jung.de, 0 -jungle-world.com, 0 -juniperresearch.com, 0 -juniqe.com, 0 -jupem.gov.my, 0 -jurion.de, 0 -jusha.com, 0 -justhost.ru, 0 -justwinit.cn, 0 -juzhao.net, 0 -juzilab.com, 0 jv.ru, 0 -jvtuiba.com, 0 -jvweb.fr, 0 -jvweb.org, 0 jxcad.com.cn, 0 -jx.cn, 0 -jxt189.com, 0 -jxzmz.org, 0 jy391.com, 0 -jyall.com, 0 -jylc168.com, 0 k12.al.us, 0 k12.ca.us, 0 k12china.com, 0 @@ -4257,807 +1258,225 @@ k12.ma.us, 0 k12.me.us, 0 k12.ms.us, 0 -k12.ne.us, 0 k12.ny.us, 0 k12.or.us, 0 k12.pa.us, 0 k12.va.us, 0 -k3.cn, 0 k7computing.com, 0 -kaartje2go.nl, 0 -kabbalahgroup.info, 0 kabbalah.info, 0 -kachon.com, 0 -kadinca.club, 0 -kadrovik.ru, 0 kadu.ru, 0 -kaedea.com, 0 -kaede.jp, 0 kaercher.com, 0 -kafascript.com, 0 -kafazan.com, 0 -kaganonline.com, 0 -kagawa.jp, 0 -kagirl.cn, 0 kags.com, 0 kaikeba.com, 0 kaike.la, 0 -kaimi.io, 0 kaist.ac.kr, 0 -kaixian.tv, 0 -kajot.cz, 0 -kakpravilnosdelat.ru, 0 -kalcaddle.com, 0 kaleostra.com, 0 -kalibr603.ru, 0 -kaluga-gov.ru, 0 -kalvin.cn, 0 -kalyanamitra.org, 0 -kamaz.ru, 0 -kameleoon.com, 0 -kamensktel.ru, 0 kanagawa.jp, 0 -kancelarskezidle.com, 0 kancloud.cn, 0 -kandasoft.com, 0 -kaneland.org, 0 -kangou.cn, 0 -kannadigaworld.com, 0 -kanyanbao.com, 0 -kanyewestsneakers.com, 0 -kaolalicai.cn, 0 -kaoputou.com, 0 kaoyan.com, 0 kapaza.be, 0 kapitalbank.az, 0 -kapitalbank.uz, 0 -kapitosha.net, 0 -kapten-son.com, 0 -karandash.by, 0 -karaoteca.com, 0 -karatov.com, 0 -karcher.ru, 0 karelia.pro, 0 -kargo.com, 0 -karibiya.ru, 0 -karl.com, 0 -karmania-auto.ir, 0 karofilm.ru, 0 -kartagrada.ru, 0 kartina.tv, 0 -kartinfo.me, 0 -kartkolandia.pl, 0 -kartoteka.by, 0 karwan.cn, 0 -kasaba.uz, 0 kaspersky.ru, 0 -katacoda.com, 0 -kau-boys.de, 0 -kaufen.com, 0 -kaufmann.dk, 0 -kauf.sk, 0 -kavehome.com, 0 -kawasaki-net.ne.jp, 0 -kazminerals.com, 0 -kaznau.kz, 0 kazntu.kz, 0 kaztrk.kz, 0 kb20.cc, 0 -kbcnet.rs, 0 -kbdyw.com, 0 -kbrnet.ru, 0 kbstar.com, 0 -kbtu.kz, 0 kcg.gov.tw, 0 -kc-shoes.ru, 0 kddi.com, 0 kde.org, 0 -kdevelop.org, 0 -kdliker.com, 0 -kdl.org, 0 kdslife.com, 0 -keaz.ru, 0 -kebudayaanindonesia.net, 0 -kedou.com, 0 -keejob.com, 0 keelbeel.com, 0 keepo.me, 0 -kejianet.cn, 0 -kelasexcel.web.id, 0 -kenh76.vn, 0 -kerch.net, 0 -kernelnewbies.org, 0 kernel.org, 0 ketabrah.ir, 0 -ketabshop.ir, 0 -ketangpai.com, 0 -ketianyun.com, 0 -kevinguanchedarias.com, 0 -kexindai.com, 0 -key4math.com, 0 -keyboardmaestro.com, 0 keybr.com, 0 -keylol.com, 0 -keymachine.de, 0 -keyweb.de, 0 kfc.ru, 0 -kg7.ru, 0 -kgeu.ru, 0 -kgs-drochtersen.de, 0 -kgsu.ru, 0 -khabshop.com, 0 -khai.edu, 0 -kharidaram.com, 0 kh.edu.tw, 0 -khhq.net, 0 -khnu.km.ua, 0 -khosousi.com, 0 -khstu.ru, 0 -khv.gov.ru, 0 -khv.ru, 0 kia.ru, 0 -kichler.com, 0 -kicks-ass.net, 0 -kicksdaily.net, 0 -kickservapp.com, 0 kickz.com, 0 -kidlogger.net, 0 -kidscasting.com, 0 -kidsmusic.info, 0 -kids-price.ru, 0 -kievcity.gov.ua, 0 kimsufi.com, 0 kingdee.com, 0 -kingnet.com.tw, 0 kingoapp.com, 0 -kingpokers.com, 0 kingss.win, 0 kinoluvr.net, 0 -kinomarvel.info, 0 -kinopark.kz, 0 -kinopik.info, 0 -kinosearch.me, 0 -kinosmena.ru, 0 -kinovinki.net, 0 kinozal.website, 0 -kiprinform.com, 0 -kissandfly.at, 0 -kissandfly.com, 0 kissandfly.de, 0 kitchenmag.ru, 0 -kitenet.ru, 0 -kitwee.com, 0 -kiwitaxi.com, 0 -kiwitaxi.ru, 0 -kiyu.tw, 0 -kjds.com, 0 -kjm6.de, 0 kjson.com, 0 -kjvvv.kr, 0 -kkmcom.ru, 0 -kktv8.com, 0 -kku.ac.kr, 0 kku.ac.th, 0 -klagemauer.tv, 0 -klarstein.com, 0 -klarstein.fr, 0 -klarstein.it, 0 -kla.tv, 0 -kl.com.ua, 0 kldp.org, 0 -kl.edu.tw, 0 -kleeneze.co.uk, 0 -klickmail.com.br, 0 klick-tipp.com, 0 -kloud51.com, 0 -klubcytrynki.pl, 0 -klv-oboi.ru, 0 kmf.com, 0 -kmu.ac.ir, 0 kmu.gov.ua, 0 kmuh.org.tw, 0 kmutt.ac.th, 0 -kmway.com, 0 -knastu.ru, 0 knet.cn, 0 -kneu.edu.ua, 0 -knightfrank.com, 0 -knighthunter.com, 0 -knigogid.ru, 0 -knowbox.cn, 0 -knutd.com.ua, 0 -knutd.edu.ua, 0 kobayashi.co.jp, 0 -koenig-solutions.com, 0 -kolgot.net, 0 -kolhoz.mobi, 0 -kolosej.si, 0 -komcity.ru, 0 komoot.de, 0 komparify.com, 0 -komtv.org, 0 -konduit.io, 0 -konicaminolta.com.cn, 0 -konstanz.de, 0 -konwerter.net, 0 -konzolokszervize.hu, 0 -koo.cn, 0 -kookit.com, 0 -kookje.ac.kr, 0 koolearn.com, 0 -kopilkaclub.ru, 0 korea.ac.kr, 0 koreastardaily.com, 0 koreus.com, 0 -korex.co.kr, 0 -kosmos-x.net.ru, 0 -koule.cz, 0 kpfu.ru, 0 -kpi.kharkov.ua, 0 -kq88.com, 0 krakow.pl, 0 -kramtp.info, 0 krasgmu.ru, 0 krasmama.ru, 0 krautchan.net, 0 -kreditech.com, 0 -kre.hu, 0 -kresla-market.ru, 0 krita.org, 0 kro.kr, 0 -krones.com, 0 -kros.sk, 0 -krsu.edu.kg, 0 -ksamata.ru, 0 -ksivi.co, 0 -ksoa.net, 0 -kspu.ru, 0 -ksrf.ru, 0 -kstu.kg, 0 -kstu.ru, 0 ksu.edu.tw, 0 -ksu.kz, 0 -ksyic.com, 0 -kt.am, 0 ktb.co.th, 0 -k-telecom.org, 0 kth.se, 0 -ktng.com, 0 -ktokogda.com, 0 ktovkurse.com, 0 -kuaidi.com, 0 kuaidihelp.com, 0 -kuaidi.hk, 0 kuaikanmanhua.com, 0 kuaxue.com, 0 -kubankredit.ru, 0 -kubannet.ru, 0 -kubsau.ru, 0 -kubstu.ru, 0 -kucharkaprodceru.cz, 0 -kudo.co.id, 0 -kufatec.de, 0 -kuguya.com, 0 -kuitao8.com, 0 -kukmin.tv, 0 -kukubt.com, 0 kuku.lu, 0 -kullsms.com, 0 -kupi-prodai.kz, 0 kurier.at, 0 -kursoteka.ru, 0 -kusuriexpress.com, 0 kuwo.cn, 0 -kuz.ua, 0 -kvaclub.ru, 0 -kvartiranasutki.by, 0 kvartplata.info, 0 -kvcc.edu, 0 -kvernelandgroup.com, 0 -kwant-project.org, 0 -kwps.info, 0 -kws7.com, 0 kyiv.ua, 0 -kylos.pl, 0 -kyoto-wu.ac.jp, 0 -kysto.com, 0 -kzn.ru, 0 -l2jbrasil.com, 0 -l3600.com, 0 -l4m.fr, 0 -lab4u.ru, 0 -labazur.com, 0 -labelup.ru, 0 -labix.org, 0 -labmedica-patient.fr, 0 -labruixador.es, 0 -lacompagnie.com, 0 ladyband.com, 0 -ladyclick.ru, 0 -ladyplace.ru, 0 -lael.be, 0 -lagunacity.ru, 0 -lakana.com, 0 -lalilali.com, 0 -lan1.de, 0 -lance.moe, 0 -landi.com, 0 -landray.com.cn, 0 -landrover.ru, 0 -lanet.lv, 0 -lanet.me, 0 -lanet.ua, 0 lanfw.com, 0 -langhamhotels.com, 0 -langland.cc, 0 langren8.com, 0 -lanieri.com, 0 -lanik.us, 0 -lanit.ru, 0 -lanseyujie.com, 0 -lanterncn.cn, 0 lanzou.com, 0 -laparfumerie.ru, 0 -lap-publishing.com, 0 -laptopszaki.hu, 0 -laptopvip.vn, 0 laravist.com, 0 -lardbucket.org, 0 -larsjung.de, 0 -lasindias.com, 0 -last2ticket.com, 0 lativ.com, 0 lativ.com.tw, 0 -latvenergo.lv, 0 -laukar.com, 0 -launchaco.com, 0 -lausanne.ch, 0 -lavaradio.com, 0 -lavector.com, 0 -layabox.com, 0 -laziodisu.it, 0 -lazurit.com, 0 -lazyland.net, 0 lbxcn.com, 0 -lcbk.net, 0 -lcd1.ru, 0 -lcxzs.cn, 0 -ldcx.net, 0 -ldichina.com, 0 -ldiglobal.org, 0 -leadbit.com, 0 -leadiq.io, 0 -leadvertex.ru, 0 -leandev.cn, 0 leangoo.com, 0 -learnattack.de, 0 -learninghabitat.org, 0 -leavesongs.com, 0 leawo.com, 0 leboncoin.fr, 0 lecake.com, 0 lecloud.com, 0 lede-project.org, 0 -leeet.net, 0 -leforumcatholique.org, 0 -legadelfilodoro.it, 0 legalacts.ru, 0 -legal-alien.ru, 0 leg.br, 0 -legnica.pl, 0 -legrandchangement.com, 0 -legrandchangement.tv, 0 -lehner-versand.ch, 0 lehrerfortbildung-bw.de, 0 -leibnitz.net, 0 -leiner.at, 0 leju.com, 0 lemeids.com, 0 -lemonsay.com, 0 lemurov.net, 0 -lendio.com, 0 -lendock.com, 0 -lendon.pl, 0 -lenizdat.ru, 0 -lenobl.ru, 0 lenovo.com, 0 lenovo.com.cn, 0 -leomadeiras.com.br, 0 -leoneteam.com, 0 -leonrestaurants.co.uk, 0 -leopays.com, 0 -lepu.cn, 0 -lerevecraze.com, 0 -lesiteimmo.com, 0 -lesk.ru, 0 letgo.com, 0 -letitfly.me, 0 -letsfilm.org, 0 -lets-fish.com, 0 -letsinvite.xyz, 0 letstalkpayments.com, 0 letu.ru, 0 -letu.ua, 0 -leupay.eu, 0 -levneknihy.cz, 0 -lewaimai.com, 0 -lewaos.com, 0 -lexdir.com, 0 lextel.it, 0 -leya.com, 0 -leyue100.com, 0 lh.or.kr, 0 -lhoroscope.com, 0 liangxinyao.com, 0 lianshang.com, 0 -lianyexiuchang.in, 0 -liaohuqiu.net, 0 -libertex.com, 0 -libertex.org, 0 -liberty.me, 0 -libnvkz.ru, 0 -libraryofbabel.info, 0 library.sh.cn, 0 libreoffice.org, 0 -libri.it, 0 -libro.at, 0 libsdl.org, 0 -libvirt.org, 0 -licenseha.com, 0 -lidgroup.ru, 0 lieyunwang.com, 0 -life2film.com, 0 lifehacker.ru, 0 -lifeline.org.au, 0 -life-realty.ru, 0 -lifestyle4living.de, 0 -lifestyle.ng, 0 liga.net, 0 -lightss.co, 0 -like4u.ru, 0 -likewear.ru, 0 -likinming.com, 0 -lilanz.com, 0 lima-city.de, 0 -lime-shop.ru, 0 -limh.me, 0 -limin.com, 0 -limuzhengxin.com, 0 -linban.com, 0 -lindner-group.com, 0 linekong.com, 0 -linghit.com, 0 lingla.com, 0 -linguanet.ru, 0 -linguitronics.com, 0 -linhadefensiva.org, 0 -linkello.com, 0 -linkpc.net, 0 linkup.com, 0 -lintut.com, 0 -linuxeye.com, 0 linuxfoundation.org, 0 -linuxihaa.ir, 0 -linuxito.com, 0 -linux-onlineshop.de, 0 -linuxpl.eu, 0 -linuxsoid.com, 0 -lions.de, 0 lipi.go.id, 0 liqu.com, 0 -liquid-life.de, 0 -liquidm.com, 0 -lirn.net, 0 lis99.com, 0 listafirme.ro, 0 -listenod.ru, 0 listupp.it, 0 -listupp.pl, 0 -liteforex.com, 0 -liteforex.ru, 0 -littlecaprice-dreams.com, 0 -littleswan.com, 0 -liu.ba, 0 -liubingyang.com, 0 -liujason.com, 0 -liujunchen.xyz, 0 -liuzhichao.com, 0 -livacha.com, 0 -livecoding.tv, 0 -livefast.it, 0 -livelivelive.com, 0 livescore.com, 0 -livescore.co.uk, 0 -livrenet.ru, 0 lixin.edu.cn, 0 -liyang.io, 0 -liyathabara.com, 0 -liyunde.com, 0 -lizhenwang.cn, 0 -lizhenwang.com, 0 lizhi.fm, 0 -lizhiweike.com, 0 -lizi.com, 0 -ljsilvers.com, 0 -lks-tv.ru, 0 -llamayamovil.com, 0 -lmcservers.com, 0 lmt.lv, 0 -lnka.cn, 0 -lnu.edu.cn, 0 -lnu.edu.ua, 0 -loadedmovies.com, 0 -loadxtreme.ph, 0 localau.com, 0 -locojoy.com, 0 -loe.lviv.ua, 0 -logcg.com, 0 logic-games.spb.ru, 0 -loginto.me, 0 -logobaker.ru, 0 -logodashi.com, 0 lojaskd.com.br, 0 -loji.com, 0 -lol5s.com, 0 -loldan.com, 0 -loli-h.com, 0 londontheatredirect.com, 0 -longsys.com, 0 -lookfor.kz, 0 -looknij.in, 0 -loongair.cn, 0 -loreal.net, 0 lostiempos.com, 0 loto.ro, 0 lottery.gov.cn, 0 lottorich.co.kr, 0 loudsound.ru, 0 -louisacoffee.com.tw, 0 louisiana.edu, 0 louisiana.gov, 0 -loveliv.es, 0 -lovelivewiki.com, 0 -loveota.com, 0 -lovepresent.ru, 0 loveq.cn, 0 lowcygier.pl, 0 -lowyinstitute.org, 0 -loyalsoldier.me, 0 -lpcware.com, 0 lpgenerator.ru, 0 -lsjsoso.com, 0 -ltd.ua, 0 -ltsu.org, 0 lua.org, 0 -lublin.eu, 0 -lucca.fr, 0 -luciad.com, 0 -ludwig.guru, 0 -luebeck.de, 0 -lufficc.com, 0 -lugasat.org.ua, 0 -lugons.org, 0 lun.ua, 0 luohuedu.net, 0 -luoxiao123.cn, 0 -lurkmo.re, 0 lurkmore.co, 0 -lurkmore.ru, 0 -lurkmore.so, 0 lurkmore.to, 0 -lusen.com, 0 -lusilusi.com, 0 -luxedition.ru, 0 luxoft.com, 0 luxottica.com, 0 -luzhou.com, 0 -lv9.org, 0 -lvbeivpn.cn, 0 -lvcgroup.com, 0 -lvwenhan.com, 0 -lvyouquan.cn, 0 -lwl.org, 0 -lxx1.com, 0 -lyad.fr, 0 -lyceum62.ru, 0 lzu.edu.cn, 0 -m19aixin.com, 0 -m1net.com.sg, 0 -m247.com, 0 m24.ru, 0 -m2indonesia.com, 0 mabangerp.com, 0 -ma.by, 0 -maccentre.ru, 0 -mach3.jp, 0 macpeers.com, 0 macphun.com, 0 -macprime.ch, 0 -mac-status.de, 0 -macx86.cn, 0 macx.cn, 0 -macx.ws, 0 -madailicai.com, 0 madefire.com, 0 -mad-gamble.net, 0 madisoft.it, 0 maeda-atsuko.cn, 0 -maedchenflohmarkt.de, 0 -maemo.org, 0 -magcity74.ru, 0 -maggioli.it, 0 magiccardmarket.eu, 0 magickartenmarkt.de, 0 -magiclen.org, 0 -magtu.ru, 0 mahua.com, 0 mail-archive.com, 0 -mailbox.hu, 0 -mailermailer.com, 0 -mail.gov.af, 0 -mail.kz, 0 -maimemo.com, 0 -maimiaotech.com, 0 -mainbox.com, 0 -mainkeys.net, 0 mai.ru, 0 -maiseed.com, 0 -makedonias.gr, 0 -makedreamprofits.ru, 0 -maki-chan.de, 0 makkhichoose.com, 0 makler.md, 0 -makler.ua, 0 -maksatbilgi.com, 0 -maktab.tj, 0 -malaga.es, 0 -maliactu.info, 0 -malina.ru, 0 -mamanam.com, 0 -mamazin.com.ua, 0 -mambaby.com, 0 mamsy.ru, 0 -mandarinaduck.com, 0 -mangapanda.info, 0 mango.com, 0 mangoerp.com, 0 mangooutlet.com, 0 -maniac-forum.de, 0 mann.tv, 0 mans.edu.eg, 0 -manticgames.com, 0 -manzana.ua, 0 -maoming.gov.cn, 0 -mapado.com, 0 -mapamista.org.ua, 0 mapbar.com, 0 -mapbase.ru, 0 maplewood.com, 0 -mappingmegan.com, 0 -mapshop.ir, 0 maralhost.com, 0 -maralhost.marketing, 0 -marburg.de, 0 -marcaentradas.com, 0 -marelepescar.ro, 0 -marfeel.com, 0 -marietta.edu, 0 mariinsky.ru, 0 -marinelink.com, 0 -marketmind.at, 0 markiza.sk, 0 marklogic.com, 0 -mark.ru, 0 -marktplatz-mittelstand.de, 0 -markum.net, 0 marthadebayle.com, 0 -marya.ru, 0 -masalnews.ir, 0 -mashhad724.ir, 0 -mashhad.me, 0 -masivapp.com, 0 -maspormas.com, 0 massaget.kz, 0 -massengeschmack.tv, 0 -mastera-rukodeliya.ru, 0 -mastercity.ru, 0 -masterphone.ru, 0 matrony.ru, 0 -mavn.is, 0 -mawenjian.net, 0 -mawqe3.net, 0 -maxjia.com, 0 maxmilhas.com.br, 0 -maxxipoint.com, 0 -mayflower.de, 0 -mazda.ch, 0 mazda.de, 0 -mazdaeur.com, 0 -mazda.fr, 0 -mazda.hr, 0 m-bet.co.tz, 0 -mbfilm.ir, 0 -mbhs.edu, 0 -mblox.com, 0 mcafeestore.com, 0 -mcbot.gq, 0 mccme.ru, 0 -mcdir.ru, 0 -mcdonalds.cz, 0 -mcent.com, 0 -mcguirksgolf.com, 0 -mclc.ir, 0 mcmaster.ca, 0 -mcncc.com, 0 mconvert.net, 0 -m-cosmetica.ru, 0 -mcplay.cn, 0 -mct.gov.az, 0 mcu.edu.tw, 0 -mcx.ru, 0 -mdic.gov.br, 0 -mdict.cn, 0 -mdlivre.com.br, 0 -mdman.cc, 0 -mdolls.mobi, 0 -mdrv.ru, 0 -mdt-dodin.ru, 0 -meabilis.fr, 0 -measurementlab.net, 0 -meatbox.co.kr, 0 -mebelion.ru, 0 mecare.cn, 0 mecbsegov.in, 0 mecbsekvs.in, 0 -medansatu.com, 0 -medbox.ru, 0 -medgadgets.ru, 0 -mediabak.com, 0 mediabinn.com, 0 mediabks.com, 0 mediadec.com, 0 mediafaze.com, 0 -mediagazer.com, 0 mediagemm.com, 0 mediahitt.com, 0 mediakee.com, 0 medialid.com, 0 -medialog.fr, 0 -mediate.com, 0 -mediatoday.ru, 0 mediavex.com, 0 mediazenn.com, 0 -medicalvideos.us, 0 -medieval-europe.eu, 0 medion.com, 0 -medjouel.com, 0 -medmedicine.it, 0 -medmeeting.org, 0 -mednet.ru, 0 -medscape.ru, 0 -medspros.ru, 0 meduza.io, 0 -meest.us, 0 meetfighters.com, 0 meetme.com, 0 -meetshared.com, 0 megacampus.ru, 0 -megafilmes4k.com.br, 0 -megaleech.us, 0 megaline-films.kz, 0 -megamag.by, 0 megamart.az, 0 -megaterem.ru, 0 megatheme.ir, 0 -megatrack.ru, 0 me.gov.ar, 0 meidebi.com, 0 meideng.net, 0 -meiduimall.com, 0 meilele.com, 0 meinfernbus.de, 0 meipian.cn, 0 -meipian.me, 0 meishi.cc, 0 meishij.net, 0 meitu.com, 0 @@ -5065,1028 +1484,347 @@ meizu.com, 0 mel.fm, 0 meloman.kz, 0 -memedai.cn, 0 -mena.org.eg, 0 -mendikat.net, 0 -mengdouwang.cn, 0 -mengniu.com.cn, 0 -mengzhu.tv, 0 -mensa.es, 0 -menschen-leben.at, 0 mephi.ru, 0 -mercedes-benz.ua, 0 -mercurial-scm.org, 0 -mersen.com, 0 -mesago.de, 0 mesec.cz, 0 -mes.edu.cu, 0 meshok.net, 0 -meshok.ru, 0 -meslekhocam.com, 0 -metapix.net, 0 meteor.ie, 0 -metin2.tc, 0 metricskey.net, 0 -metro.cl, 0 -metropol.co.ke, 0 -metrosantiago.cl, 0 -metrouusor.com, 0 metservice.com, 0 -mexicoo.mx, 0 mfa.gov.by, 0 -mfb.io, 0 -mferma.ru, 0 mfor.hu, 0 -mf.uz, 0 -mgpu.ru, 0 mgts.ru, 0 -mgutm.ru, 0 -mhelp.kz, 0 -mhr-developer.com, 0 -mhunters.com, 0 -miacugra.ru, 0 mia.gov.az, 0 miamed.de, 0 miamidade.gov, 0 -mianfeiwucan.org, 0 -mianvpn.com, 0 -miaoyueyue.com, 0 -miass.ru, 0 -micasaverde.com, 0 microsoft.com, 0 microsoftonline.cn, 0 -micros.uz, 0 midea.com, 0 mie-u.ac.jp, 0 -mightysignal.com, 0 mignews.com.ua, 0 migros.ch, 0 -migu.cn, 0 -mihoyo.com, 0 mijnhva.nl, 0 mikatiming.de, 0 -mikenopa.com, 0 mikrocontroller.net, 0 mik.ua, 0 -mikulas.sk, 0 -mila.by, 0 -milanpassport.com.ua, 0 miloserdie.ru, 0 -mimemoi.com, 0 -mimikko.cn, 0 minbank.ru, 0 -minceraft.cl, 0 -mindai.com, 0 -mindasset.com, 0 mindjet.com, 0 -mindnode.com, 0 -mindresearch.org, 0 mindstore.io, 0 -mineblue.com, 0 -mine.bz, 0 -mineconcapes.net, 0 minecraftiplist.com, 0 -minecraft-moscow.com, 0 -minelist.kr, 0 mine.nu, 0 -mine-online.pw, 0 mines.edu, 0 minfin.com.ua, 0 mingkyaa.com, 0 mingli.ru, 0 -mini189.cn, 0 -mini-koleso.ru, 0 -mininterior.gob.ar, 0 mininterior.gov.ar, 0 minsal.cl, 0 -minsk.by, 0 -mintrans.ru, 0 minuporno.com, 0 minv.sk, 0 -minyo.us, 0 -mioji.com, 0 -mios.com, 0 -mipko.ru, 0 mipt.ru, 0 -mipuf.es, 0 -miracal.ru, 0 mirage.ru, 0 -mirapri.com, 0 -mirchar.ru, 0 -mirgaza.ru, 0 miridei.com, 0 mirkrestikom.ru, 0 mirkvartir.ru, 0 -mis66.ru, 0 missevan.com, 0 missland.com, 0 misterhorse.tv, 0 -misterspex.co.uk, 0 misterspex.de, 0 -misterspex.es, 0 -misterspex.fr, 0 -mist-game.ru, 0 -misuland.com, 0 -mit.com.mm, 0 mit.edu, 0 mitsubishielectric.com, 0 -mittwaldserver.info, 0 -mit.uz, 0 miu.ac.ir, 0 miui.com, 0 -miutour.com, 0 -mivitec.net, 0 -mivlgu.ru, 0 mixupload.com, 0 mixxx.org, 0 miyagi.jp, 0 -mizban24.net, 0 -mj-king.net, 0 mkb.ru, 0 -mkf.com, 0 -mkvcorporation.com, 0 mkvtoolnix.download, 0 -mlbeta.com, 0 -mlpmerch.com, 0 -mma.su, 0 mmbank.ru, 0 -mmdai.com, 0 -mmet.cn, 0 mmgp.ru, 0 -mmk.ru, 0 -mmo4me.net, 0 mmorpgitalia.it, 0 -mmotraffic.com, 0 -mmtrix.com, 0 mmyuer.com, 0 mnb.hu, 0 -mne.ru, 0 -mngz.ru, 0 -mnogokarat.ru, 0 -mnt.ee, 0 -mo9.com, 0 mob.com, 0 mobdisc.com, 0 -mobialia.com, 0 -mobibrw.com, 0 -mobilenations.com, 0 -mobil-helden.de, 0 -mobinnet.net, 0 mobomarket.net, 0 -mobsoftffree.xyz, 0 -mobtakeran.com, 0 -mockuai.com, 0 -modcom.kz, 0 -modelmen.ru, 0 -modmcpe.net, 0 -modxcloud.com, 0 modx.com, 0 -modx.pro, 0 -modx.ru, 0 -moe-acg.cc, 0 moegirl.org, 0 moe.hm, 0 -moemesto.ru, 0 -moesk.ru, 0 -mofac-alfred.com, 0 mofang.com, 0 mofangge.com, 0 -moguta.ru, 0 -moha.gov.my, 0 -mohammad-toluei.ir, 0 mohandeseit.ir, 0 mohmo.net, 0 mohurd.gov.cn, 0 -moikit.com, 0 -moi-uni.ru, 0 -mojichina.com, 0 -mojilala.com, 0 -mokpo.ac.kr, 0 -mokylin.com, 0 molbase.cn, 0 molbase.com, 0 -molnet.ru, 0 -monamie.kz, 0 -monetizus.com, 0 -moneydashboard.com, 0 -moneyman.es, 0 -moneyman.ge, 0 -moneyman.kz, 0 moneyman.ru, 0 -moneyplatform.com, 0 -monitoring-plugins.org, 0 -monitorulcj.ro, 0 -monkeytravel.com, 0 -monolife.ru, 0 monopoly-one.com, 0 -monstandardfacile.com, 0 -monsters-tk.net, 0 montclair.edu, 0 -moocollege.com, 0 -moodviewer.com, 0 -moojing.com, 0 -moonback.ru, 0 moonseo.cn, 0 mooo.com, 0 -moovel.com, 0 -mopaasapp.com, 0 -mopaas.com, 0 -moparscape.org, 0 -morebooks.de, 0 -morefirm.ru, 0 -moretv.com.cn, 0 -morfans.cn, 0 -morgan.edu, 0 mos-gorsud.ru, 0 -mosmoda.com.tr, 0 -mosolymp.ru, 0 -mosreg.ru, 0 mos.ru, 0 -motarjeminiran.com, 0 -motocms.com, 0 motof.cn, 0 -motorbit.com, 0 motorcyclistonline.com, 0 -mountainduck.io, 0 mountfield.cz, 0 -mountfield.sk, 0 movavi.com, 0 moviejie.com, 0 -movielala.com, 0 -movienthusiast.com, 0 movietend.com, 0 -movitech.cn, 0 -movit-tech.com, 0 -moyoyo.com, 0 -moyuniver.ru, 0 -mozaika.dn.ua, 0 mozanaplo.hu, 0 -mozaweb.hu, 0 -moz.gov.ua, 0 mp3bass.ru, 0 mp3.cc, 0 -mp3kw.com, 0 -mp3nta.com, 0 mp3.pm, 0 mp.br, 0 -mpets.mobi, 0 mp.gov.in, 0 -mpgu.org, 0 -mplayerhq.hu, 0 mplife.com, 0 mpsj99.com, 0 -mpt.ru, 0 -mratwork.com, 0 mrcode.ir, 0 -mrcraig.xyz, 0 -mrecorder.com, 0 -mritd.me, 0 mrmondialisation.org, 0 -mrporn.com, 0 -mrtimemaker.com, 0 -mrush.mobi, 0 mr-world.com, 0 -mr-wu.cn, 0 -ms0571.com, 0 -msa.gov.cn, 0 -msd25.com, 0 -msignitechina.com, 0 -msig.sg, 0 -msl.ua, 0 msu.ru, 0 -mta.mn, 0 -mta.ua, 0 mt-bbs.com, 0 mte.gov.br, 0 mt.gov.br, 0 -mti.co.jp, 0 -mtis.by, 0 mtn.co.za, 0 mtroyal.ca, 0 mts.by, 0 mts.ru, 0 mts.tm, 0 -mtv235.com, 0 mucfc.com, 0 muchong.com, 0 -muh.ru, 0 -muis.gov.sg, 0 -muloqot.uz, 0 -multi-net.ru, 0 -multi-online.ru, 0 -multiplay.ru, 0 -multirama.gr, 0 multirom.me, 0 -multitest.ua, 0 multitran.com, 0 multitran.ru, 0 -multiupload.biz, 0 -multiwork.org, 0 mumayi.com, 0 mums.ac.ir, 0 mun.ca, 0 -muniao.com, 0 -munzinger.de, 0 -murabba.com, 0 -murad.com, 0 murdoch.edu.au, 0 musc.edu, 0 -music-all.ir, 0 music-group.com, 0 -musikazblai.com, 0 -musiland.cn, 0 -mutlucell.com, 0 -muyingzhijia.com, 0 -muzhiso.com, 0 -muziker.si, 0 muziker.sk, 0 -muzikum.eu, 0 -muzlan.ru, 0 muzmix.com, 0 -muzoic.com, 0 -muzoic.org, 0 muz.uz, 0 -mvbits.com, 0 -mvs.gov.ua, 0 -mwa.co.th, 0 my3w.com, 0 -m-yabe.com, 0 -myaiji.com, 0 myanmarmp3.net, 0 myanonamouse.net, 0 -myasustor.com, 0 myauto.ge, 0 -mybodygraph.com, 0 -mybox.ru, 0 mydns.jp, 0 myds.me, 0 -my-eclipse.cn, 0 -myfolio.com, 0 -myfoscam.com, 0 -myfoscam.org, 0 -myfreeproject.com, 0 myfritz.net, 0 -myftp.org, 0 mygalgame.com, 0 mygarage.ro, 0 -my-gateway.de, 0 -mygiftcardsplus.com, 0 -my.gov.cn, 0 -myhome.cx, 0 myhomeworkapp.com, 0 -myihor.ru, 0 -myimmitracker.com, 0 -myindiacoupons.com, 0 myjino.ru, 0 -myjob.uz, 0 -mykitchen.am, 0 -myl.com.cn, 0 -mylifeorganized.net, 0 mymru.ca, 0 -mynetname.net, 0 -mynewcompany.com, 0 -myop.cf, 0 myparcels.ru, 0 -my-phone-finder.com, 0 -myphotobook.it, 0 -myphotos.cc, 0 mypoints.com, 0 -mypos.eu, 0 -mypost4u.com, 0 -my-private-network.co.uk, 0 -myprom.ru, 0 myqcloud.com, 0 myqnapcloud.com, 0 myrusakov.ru, 0 myschoolapp.com, 0 -myschoolcdn.com, 0 -myseldon.com, 0 -my-servers.us, 0 -mysocialbook.com, 0 -mysocio.ru, 0 -mysof.net, 0 -myspiegel.de, 0 -my.to, 0 mytokri.com, 0 -myviasat.ru, 0 myvimir.ru, 0 -mywed.ru, 0 mywork.com.vn, 0 -mywpku.com, 0 -myxzy.com, 0 -myyearbook.com, 0 -mz19.ru, 0 -mzmoney.com, 0 mz-web.de, 0 -n0l.hu, 0 -n131adserv.com, 0 -n142adserv.com, 0 n152adserv.com, 0 -n156adserv.com, 0 n158adserv.com, 0 -n159adserv.com, 0 -n19adshostnet.com, 0 -n214adserv.com, 0 n264adserv.com, 0 -n4bb.com, 0 -n56adshostnet.com, 0 -n99adshostnet.com, 0 -naca.com, 0 -nacalynx.com, 0 nacao.org.cn, 0 -nadloc.kz, 0 -naim.ru, 0 -najlepszefoto.pl, 0 nalog.ru, 0 namava.ir, 0 namba.kg, 0 nametests.com, 0 namidensetsu.com, 0 -nanguo.cn, 0 nanhutravel.com, 0 -nani.com.tw, 0 -nanoo.tv, 0 nanopool.org, 0 -nanosemantics.ru, 0 nanrenwa.com, 0 -naomi24.com.ua, 0 -nap6.com, 0 -napai.cn, 0 napratica.org.br, 0 narfu.ru, 0 -nas-broker.com, 0 -nasejidelna.cz, 0 -nashanyanya.ru, 0 -nashaplaneta.net, 0 -nashural.ru, 0 -nasm.us, 0 -nastroi.net, 0 -nat123.net, 0 natalie-tours.ru, 0 -natapp.cn, 0 -nativeads.com, 0 -native-network.net, 0 -nativerootsdispensary.com, 0 -natm.ru, 0 -natron.fr, 0 -natural-sciences.ru, 0 -nau.edu.ua, 0 -nauka.gov.pl, 0 naviextras.com, 0 nayavideo.com, 0 nazk.gov.ua, 0 nazwa.pl, 0 nbd.com.cn, 0 -nbdeli.com, 0 -nbhis.com, 0 -nbn.org.il, 0 -nbrc.ac.in, 0 nca.gov.tw, 0 -ncas.or.kr, 0 -ncca.ie, 0 -ncfgroup.com, 0 -ncihealth.cn, 0 ncku.edu.tw, 0 ncnu.edu.tw, 0 -ncomputing.com, 0 nctu.edu.tw, 0 ncu.edu.tw, 0 ncyu.edu.tw, 0 -ndcnc.gov.cn, 0 -nd.gr, 0 ndhu.edu.tw, 0 -ndi.org, 0 ndrc.gov.cn, 0 ndr.de, 0 ndv.ru, 0 -nea.gov.cn, 0 -neftekamsk.ru, 0 -neigou.com, 0 -nejlepsiceny.cz, 0 nekto.me, 0 nemaloknig.info, 0 -neoferr.com, 0 -neoline.ru, 0 -neotriad.com, 0 -neoway.com.br, 0 nepszava.hu, 0 -nestoilgroup.com, 0 -netangels.ru, 0 netatmo.com, 0 -netau.net, 0 -netbalancer.com, 0 -netbox.cz, 0 netcraft.com, 0 netease.com, 0 netease.im, 0 -net-film.ru, 0 nethouse.ru, 0 -netim.com, 0 -netiyi.com, 0 -netoearth.com, 0 -netpioneer.de, 0 -netplus.ch, 0 netsh.org, 0 -netsparkmobile.com, 0 -netsun.com, 0 netvolante.jp, 0 netzpolitik.org, 0 -netztest.at, 0 neu.edu.cn, 0 -neuronup.com, 0 neusoft.com, 0 neusoft.edu.cn, 0 -neutrik.com, 0 -neutrium.net, 0 -newbd.com, 0 newchic.com, 0 newfrog.com, 0 -newhistorian.com, 0 -newhorizonindia.edu, 0 newifi.com, 0 newinform.com, 0 -newmanvip.com, 0 -newm.co.kr, 0 newmobilelife.com, 0 -new-retail.ru, 0 -new-rus.tv, 0 news.cn, 0 -newscom.com, 0 -news-for.me, 0 -newsghana.com.gh, 0 -newsko.ru, 0 newsone.ua, 0 -newsprom.ru, 0 news.tj, 0 -newstral.com, 0 -newszeit.com, 0 newtab.club, 0 -newtimes.ru, 0 -nex-tech.com, 0 -nextlayer.at, 0 -nextmp.net, 0 -neytron.com, 0 nezavisne.com, 0 -nfmedia.com, 0 -nfs.com.ru, 0 -nfshost.com, 0 -ngaaron.com, 0 -ngagelive.com, 0 -ngame.cn, 0 -ngbit.com, 0 nginx.org, 0 -ngmu.ru, 0 -ngonline.cn, 0 -ngrok.cc, 0 ngrok.io, 0 -niarela.net, 0 niazerooz.com, 0 -nibs.ac.cn, 0 nicaifu.com, 0 nic.cz, 0 -nic.edu, 0 -nicelabel.com, 0 -nicpars.ir, 0 nie.edu.sg, 0 nijiero-ch.com, 0 -niji.fr, 0 -nikan.ir, 0 -nikonians.org, 0 -niks.by, 0 -ninjamock.com, 0 -ninjaromeo.com, 0 -nipne.ro, 0 -niracloud.com, 0 -nitec.kz, 0 -nitecore.com, 0 nitk.ac.in, 0 -nitroserv.com, 0 -niuche.com, 0 -niva-club.net, 0 -nixstore.ru, 0 -njd1.com, 0 njit.edu.cn, 0 njmu.edu.cn, 0 -n-joy.de, 0 nju.edu.cn, 0 njust.edu.cn, 0 -nkforex.com, 0 -nkon.nl, 0 -nku.cn, 0 -nlb.mk, 0 nl.ua, 0 -nmdn.net, 0 -nmedik.org, 0 -nmn.tw, 0 -nmzh.net, 0 -nng.com, 0 -nnovosti.info, 0 -no1muse.com, 0 -noao.edu, 0 -no-bs.de, 0 -nochi.com, 0 -nodelog.cn, 0 nodevice.com, 0 -nodevice.com.pt, 0 -nodevice.es, 0 -nodevice.fr, 0 -nodevice.it, 0 -nodevice.jp, 0 no-ip.biz, 0 -no-ip.ca, 0 -no-ip.com, 0 noip.me, 0 -no-ip.net, 0 -nolog.com, 0 -nomadit.co.uk, 0 -nomnomka.ru, 0 -nomorelyrics.net, 0 -non.li, 0 -noonbora.xyz, 0 -noor.net, 0 -noor-publishing.com, 0 -nordstar.ru, 0 -nordwindairlines.ru, 0 -noringa.ru, 0 norma.uz, 0 -northghost.com, 0 -norvik.eu, 0 -no-shave.org, 0 -notaire.be, 0 -notariat.ru, 0 -notaris.be, 0 notebooksbilliger.de, 0 -note-pad.net, 0 -notifyfox.com, 0 -notifyninja.com, 0 -notik.ru, 0 novabizz.com, 0 -nova.net.cn, 0 -novatour.ru, 0 -novayaopera.ru, 0 -noveinzeraty.cz, 0 -novgorod.ru, 0 -novobyt.ru, 0 -novonordisk.com, 0 novotelecom.ru, 0 -novreg.ru, 0 nowcoder.com, 0 now.im, 0 -noxue.com, 0 npc.gov.cn, 0 nps.edu, 0 nptu.edu.tw, 0 -npu.gov.ua, 0 -nqu.edu.tw, 0 -nrcc.org, 0 nsc.ru, 0 nsfocus.com, 0 -nsimg.net, 0 nsk.ru, 0 -nsk.su, 0 -nso.edu, 0 nso.ru, 0 -nssm.cc, 0 nstarikov.ru, 0 nstu.ru, 0 -nsu.edu.cn, 0 -nsuem.ru, 0 nsw.edu.au, 0 nsw.gov.au, 0 -ntbg.org, 0 -ntbprov.go.id, 0 ntk-intourist.ru, 0 ntnu.edu.tw, 0 ntnu.no, 0 ntpc.edu.tw, 0 ntrqq.net, 0 -ntt-it.co.jp, 0 ntu.edu.tw, 0 ntv.ru, 0 -nu3.ch, 0 -nu3.de, 0 -nu3.fr, 0 nuaa.edu.cn, 0 -nuageapp.com, 0 nuance-nts.com, 0 nudt.edu.cn, 0 -nuevaeps.com.co, 0 nuipogoda.ru, 0 nuk.edu.tw, 0 -number2.com, 0 -nung.edu.ua, 0 -nurotan.kz, 0 -nut.cc, 0 -nutz.cn, 0 -nvrnet.ru, 0 -nw.ru, 0 -nxrom.us, 0 -nyaso.com, 0 -nyitvatartas24.hu, 0 nyugat.hu, 0 -nzb.cat, 0 -n-z.jp, 0 o2.cz, 0 -o2switch.net, 0 -oakandfort.ca, 0 -oakandfort.com, 0 -oasiscatalog.com, 0 -obambu.com, 0 -obyava.ua, 0 occ.com.mx, 0 -oceanoptics.com, 0 -ochenprosto.ru, 0 -ochkov.net, 0 -oclaro.com, 0 -ocrosoft.com, 0 -ocrsdk.com, 0 -ocs.ru, 0 -oddpi.com, 0 -odessa.gov.ua, 0 -odessa-life.od.ua, 0 odisha.gov.in, 0 oe24.at, 0 -oeh-wu.at, 0 oei.es, 0 -oe.if.ua, 0 -oevg-versteigerungen.at, 0 -ofamni.com, 0 ofcard.com, 0 -ofertaschevrolet.com.br, 0 -ofertasdeemprego.pt, 0 -ofertasdetrabajosyempleos.com, 0 offcn.com, 0 -office-4-sale.de, 0 -officen.kr, 0 officeplus.cn, 0 -officeweb365.com, 0 ofigenno.com, 0 -o-film.com, 0 oformi.net, 0 ofo.so, 0 -ofoto.org, 0 -ogilvy.com.cn, 0 -ogmem.com, 0 -ohgaki.net, 0 ohtuleht.ee, 0 -oicp.net, 0 okbuy.com, 0 -ok-crimea.ru, 0 -okhosting.com, 0 okidoki.ee, 0 -oktawave.com, 0 -okwave.co.jp, 0 okwave.jp, 0 olark.com, 0 olay.com.tr, 0 -oldboyedu.com, 0 -olimex.com, 0 olimpiada.ru, 0 -olimp.us, 0 -oll.tv, 0 -olz.by, 0 om1.ru, 0 -omadaalithias.gr, 0 ome.tv, 0 -omgpu.ru, 0 omgtu.ru, 0 omnia.online, 0 -omnicomm.ru, 0 -omnikportal.com, 0 -omniscriptum.com, 0 -omsk.com, 0 -omskportal.ru, 0 -omskzan.ru, 0 omsys.com.cn, 0 -on5.ir, 0 onego.ru, 0 -oneinstack.com, 0 -one-news.net, 0 -one.pl, 0 oneplus.cn, 0 onion.to, 0 -onligamez.ru, 0 online2pdf.com, 0 -online.cq.cn, 0 -onlinefilerepair.com, 0 online-go.com, 0 -onlinehome-server.com, 0 -onlinehome-server.info, 0 -onlinelabs.ir, 0 -onlinepbx.ru, 0 -onlineproxy.eu, 0 -onlineservers.ir, 0 online.tm, 0 -onlinetopgame.com, 0 -onlinewebfonts.com, 0 -onloon.net, 0 onlyfans.com, 0 -onlyhot.net, 0 onlylady.com, 0 -onlymult.com, 0 -onlysasta.com, 0 -onmovie.ge, 0 on.net, 0 onnibus.com, 0 onpage.org, 0 ontariocolleges.ca, 0 -ont.by, 0 -oodii.com, 0 -oo.gd, 0 -ooi.moe, 0 -oostende.be, 0 open.ac.uk, 0 -openal.org, 0 -openapis.org, 0 opencart.ir, 0 -opencsw.org, 0 -opendaylight.org, 0 -openlanguage.com, 0 -openledger.info, 0 -openlp.org, 0 -open-mind.ir, 0 -openmodelica.org, 0 -openneo.net, 0 opennet.ru, 0 -opennicproject.org, 0 -open-o.org, 0 -openproject.org, 0 opensignal.com, 0 openssource.info, 0 -openstat.com, 0 -opentown.org, 0 -opentraintimes.com, 0 -openttdcoop.org, 0 opentutorials.org, 0 -openvz.org, 0 -openweb.co.za, 0 openwrt.org, 0 opnfv.org, 0 opogame.com, 0 opole.pl, 0 -opolskie.pl, 0 -oportuna.com, 0 oppo.com, 0 opsteel.cn, 0 -optimism.ru, 0 orange.ci, 0 -orange.jo, 0 -orange-prem.com, 0 -orbita.dn.ua, 0 -orderkleeneze.co.uk, 0 -orderonline.cn, 0 -oregonstudentaid.gov, 0 -orel.ru, 0 -orenu.co.il, 0 orfogrammka.ru, 0 -orionnet.ru, 0 -oriwiki.net, 0 -ormansu.gov.tr, 0 orsk.ru, 0 or.tl, 0 -orzdream.com, 0 orz.hm, 0 osaifu.com, 0 oschadbank.ua, 0 oschina.io, 0 oschina.net, 0 -osd.at, 0 -osmocom.org, 0 -osnova.tv, 0 -os-scape.com, 0 osvita.ua, 0 -osx86.cn, 0 oszk.hu, 0 -otarikkoc.com, 0 -otpbank.com.ua, 0 -otpbank.ro, 0 otr-files.de, 0 -otr.ru, 0 -otyrar.kz, 0 -oucnet.cn, 0 oum.ru, 0 -oupeng.com, 0 -ourgold.ru, 0 -ourjnu.com, 0 ourocg.cn, 0 -ourstage.com, 0 -oursweb.net, 0 outdoorlife.com, 0 outdoorvoices.com, 0 -outfittery.com, 0 -outfittery.de, 0 outlook.cn, 0 -outside.cf, 0 ovdinfo.org, 0 -overhear.club, 0 overnightprints.com, 0 -overthewire.org, 0 -overture.org, 0 -overwiki.ru, 0 ovh.ca, 0 ovh.net, 0 -ovi.su, 0 -ovomedia.tv, 0 -ovotv.com, 0 -ow2.org, 0 -owen.ru, 0 ox.ac.uk, 0 -oxge.net, 0 oxy.edu, 0 ozon.ru, 0 -p2psearchers.com, 0 p30rank.ir, 0 paci.gov.kw, 0 pactera.com, 0 -paddlepalace.com, 0 -paetep.com, 0 -pages24.mx, 0 -pagewizz.com, 0 -paginesi.it, 0 -pagostad.gob.ar, 0 pa.gov.br, 0 -pagro.at, 0 -pah.org.pl, 0 -paiq.nl, 0 -palemoon.org, 0 -paleoforum.ru, 0 -palettegear.com, 0 panc.cc, 0 -panchemodan.ru, 0 panda.tv, 0 pandatv.com, 0 pandemic-legion.pl, 0 -panono.com, 0 -panqis.cn, 0 panypay.ir, 0 -panzar.ru, 0 -paoding.cc, 0 paopaoche.net, 0 -papapiqueetmamancoud.fr, 0 -papayamobile.com, 0 -paperdl.com, 0 paperpass.com, 0 -papersearch.net, 0 -papersogay.com, 0 -papierovetasky-vrecka.sk, 0 -paradisep30.ir, 0 paragon-software.com, 0 -paran.com, 0 -paraninfo.es, 0 -paratype.com, 0 -parcelapp.net, 0 -parcelchina.co.uk, 0 -pardazmizban.com, 0 parenting.com.tw, 0 parents.org.gr, 0 -parfum-lider.ru, 0 -parks.org.il, 0 -parmisit.com, 0 -parscanada.com, 0 -parseapp.com, 0 parsine.com, 0 part-kom.ru, 0 -partnerchoice.co.uk, 0 -partoserver.com, 0 -parts66.ru, 0 -partsrunner.de, 0 pasionfutbol.com, 0 -pasona.com.tw, 0 -pasp.ru, 0 -pass4sures.com, 0 -passkit.com, 0 passportindex.org, 0 -passwordrecoverytools.com, 0 -passwordrevelator.net, 0 -pastaoyunu.com.tr, 0 -pastebox.in, 0 -patagames.com, 0 pathfinder.gr, 0 -patiotuerca.com, 0 patpat.com, 0 patriarchia.ru, 0 -patronbase.com, 0 -patschool.com, 0 -pavilion.com.bd, 0 -paxsz.com, 0 payad.me, 0 paybao.com.tw, 0 -paybone.cn, 0 paycheckcity.com, 0 -paycom.uz, 0 -paykeeper.ru, 0 -payline.ir, 0 paymentwall.com, 0 -paypersale.ru, 0 payscale.com, 0 paywithpoli.com, 0 -pb86.net, 0 pb.gov.br, 0 pbplus.me, 0 -pbvusd.net, 0 -pbwiki.com, 0 -pc1ads.com, 0 -pc3ads.com, 0 pc6.com, 0 pcauto.com.cn, 0 pcbaby.com.cn, 0 @@ -6094,7 +1832,6 @@ pcgarage.ro, 0 pchome.net, 0 pchouse.com.cn, 0 -pcjoy.cn, 0 pclady.com.cn, 0 pcmarket.com.hk, 0 pcmax.jp, 0 @@ -6102,2237 +1839,649 @@ pc-radio.ru, 0 pcradio.ru, 0 pcstore.com.tw, 0 -pcvideo.com.cn, 0 -pcweek.ru, 0 pcworld.com.vn, 0 pdalife.ru, 0 -pdfm.net, 0 -pdn.ac.lk, 0 -peergrade.io, 0 -pegast.com.ua, 0 -pegasus.de, 0 -pegatroncorp.com, 0 -pegitboard.com, 0 -pe.hu, 0 -peliculas.cc, 0 -pelotok.net, 0 -penjualan.web.id, 0 -pentesterschool.ir, 0 -peopleandconnection.com, 0 -peopleandlaw.ru, 0 -perevody-deneg.ru, 0 -perfekto.ru, 0 performancehorizon.com, 0 -performia.com, 0 -permedu.ru, 0 persiangig.com, 0 persiantools.com, 0 -person.com, 0 -personeelssysteem.nl, 0 -pervouralsk.ru, 0 -pesapal.com, 0 -pesc.ru, 0 -peshkupauje.com, 0 pes.spb.ru, 0 petrimazepa.com, 0 -petrokimia-gresik.com, 0 petrsu.ru, 0 -petsoftware.net, 0 -petwellbeing.com, 0 -peugeot.com.cn, 0 peugeot.it, 0 -peykasa.ir, 0 -pfconcept.com, 0 -pfthost.com, 0 -pgsha.ru, 0 -pgzs.com, 0 phalconphp.com, 0 -phase-6.de, 0 phcorner.net, 0 phicomm.com, 0 -philipp-plein.com, 0 -philo.at, 0 photo-ac.com, 0 -photocase.com, 0 -photocase.de, 0 -photolemur.com, 0 photophoto.cn, 0 -photoprocenter.ru, 0 -photorank.me, 0 photosex.biz, 0 photoshop-master.ru, 0 -photoworld.com.cn, 0 -phpcaptcha.org, 0 phpclub.ru, 0 -phpinfo.me, 0 phpmywind.com, 0 -phpnet.us, 0 -phps.kr, 0 -phystech.edu, 0 -picantecooking.com, 0 picclick.de, 0 -picovico.com, 0 -picovr.com, 0 -picp.net, 0 -pictureview.com, 0 -pidak.cz, 0 -pidgin.im, 0 -pieas.edu.pk, 0 -pierotofy.it, 0 -pigcms.com, 0 -piktab.com, 0 -pilaipiwang.com, 0 -pila.pl, 0 piluli.ru, 0 -pinakothek.de, 0 -pine4.net, 0 -ping-admin.ru, 0 pingan.com.cn, 0 -pingan.com.hk, 0 pingpongx.com, 0 -pingstart.com, 0 pingxx.com, 0 -pinpool.ir, 0 -pioneer-life.ir, 0 -pios.gov.pl, 0 -piratebuhta.cc, 0 -piratenpad.de, 0 -piratenpartei.de, 0 -piratepay.ir, 0 -piratepublic.com, 0 pixabay.com, 0 -pixelplus.ru, 0 -pixi.eu, 0 -pizzahut.be, 0 -pizzahut.com.ph, 0 -pizzamanager.eu, 0 -pji.co.kr, 0 pjn.gov.ar, 0 pjud.cl, 0 pkget.com, 0 -pkm.gov.gr, 0 -pkpai.kr, 0 -pkr.com, 0 -pks.id, 0 pku.edu.cn, 0 -pkuh6.cn, 0 -placla.cz, 0 -plac-official.com, 0 -plagiarism-detector.com, 0 -plainjs.com, 0 -plan1.ru, 0 -planet3dnow.de, 0 planetakino.ua, 0 -planeta-online.tv, 0 -planeta.tv, 0 -planetawrestling.com, 0 planetemu.net, 0 -planete-zemlya.ru, 0 -planet-mcpe.net, 0 -planet.nl, 0 -planetofhotels.com, 0 plan.io, 0 -planujemywesele.pl, 0 plarium.com, 0 -plates4less.co.uk, 0 -platon.sk, 0 -playinitium.com, 0 -playlist24.ru, 0 playsport.cc, 0 -plccenter.com, 0 -plobalapps.com, 0 -pluie-solide.com, 0 -plus.com, 0 -ply.st, 0 -pmail.idv.tw, 0 -pmit.cn, 0 -pmlp.gov.lv, 0 -pndk.in, 0 pnu.edu.ru, 0 -pnzreg.ru, 0 -pocketbook-int.com, 0 pocketdice.io, 0 -pocketlive.tv, 0 -podarit-prazdniki.ru, 0 -poda.tv, 0 podnikatel.cz, 0 -pofu.ru, 0 -pogazam.ru, 0 -pogliad.ua, 0 -pogovorim.net, 0 -poisk.ru, 0 -poke8.com, 0 pokebip.com, 0 -pokemoncardmarket.eu, 0 -pokemongomap.live, 0 pokermatch.com, 0 -pokevision.hk, 0 -pokupo.ru, 0 -poland.travel, 0 -polarion.com, 0 -polessu.by, 0 politeka.net, 0 -politics.co.uk, 0 polito.it, 0 polocai.com, 0 -polus.com.ru, 0 -polus.su, 0 -polycomp.bg, 0 polyv.net, 0 -pomodoneapp.com, 0 -pomogi.org, 0 -pomorsu.ru, 0 pomotodo.com, 0 -pomurec.com, 0 -ponroy.com, 0 -p-on.ru, 0 -pontosido.com, 0 -pop136.com, 0 pop800.com, 0 popart.hk, 0 popmog.com, 0 popsci.com, 0 -popunder24.com, 0 popunder.net, 0 porn0sex.net, 0 pornfay.com, 0 pornhublive.com, 0 -porno-gif.ru, 0 -porno-sex-online.com, 0 -pornvideos247.com, 0 portaltvto.com, 0 -portalwifi.com, 0 portaportal.com, 0 portfolio.hu, 0 positivoinformatica.com.br, 0 -postcalc.ru, 0 postech.ac.kr, 0 posteo.de, 0 -postgrespro.ru, 0 postgresql.jp, 0 postimees.ee, 0 post.kz, 0 -postleitzahl.org, 0 -posuta.com, 0 -potemki.com, 0 -potsdam.de, 0 potsdam.edu, 0 -pouyanit.com, 0 povarenok.ru, 0 -pow88.com, 0 -powereasy.net, 0 -powernet.com.ru, 0 poznan.pl, 0 -pp100.com, 0 -ppgame.com, 0 pptfans.cn, 0 ppt.ru, 0 pptv.com, 0 -ppvke.com, 0 ppypp.com, 0 -ppzuche.com, 0 -praegnanz.de, 0 praktiker.hu, 0 pravda.sk, 0 -pravosudje.ba, 0 -prcjx.cn, 0 -prehraj.to, 0 preis24.de, 0 premier-kladionica.com, 0 -premiumy.pl, 0 -prepfactory.com, 0 -preporucamo.com, 0 -presidence.bj, 0 presidencia.gov.co, 0 -prestigeflowers.co.uk, 0 -prestigehampers.co.uk, 0 -prestigio.com, 0 -prettyporno.net, 0 -prettysecrets.com, 0 prezentacii.org, 0 pr.gov.br, 0 -pricefx.eu, 0 -pricett.com, 0 -primacom.de, 0 primat.cz, 0 -primeapps.in, 0 -primeminister.kz, 0 -primeton.com, 0 -print100.com, 0 -printer-spb.ru, 0 print-post.com, 0 -prisonlegalnews.org, 0 privatedns.biz, 0 -private-immobilienangebote.de, 0 privatelink.de, 0 -privesc.eu, 0 privet.com, 0 -proball.ru, 0 -proberry.ru, 0 -procd.net, 0 -process-one.net, 0 prodaman.ru, 0 -prodj.com.ua, 0 -produccion.gob.ar, 0 -profbuh8.ru, 0 -profibeer.ru, 0 -profile.ir, 0 -profitero.com, 0 -profi.travel, 0 -profitserver.ru, 0 -proftpd.org, 0 prog-8.com, 0 -progamer.ru, 0 -proglas.cz, 0 -prognoznazavtra.ru, 0 -programcini.com, 0 -proimei.info, 0 -projectfacts.de, 0 -promo.it, 0 -promostore.de, 0 -promptcloud.com, 0 -pronosticoextendido.net, 0 -prontotour.com, 0 proofpoint.com, 0 propertywala.com, 0 prophpbb.com, 0 -pro-porno.net, 0 -pro-psixology.ru, 0 -proshivka.pro, 0 -prosmart.by, 0 prospective.ch, 0 -prospero.ru, 0 -prostitutkifor.me, 0 -prostovpn.org, 0 protolabs.com, 0 -provadaordem.com.br, 0 -proviasnac.gob.pe, 0 proxmox.com, 0 -proxy-base.com, 0 -proxy-listen.de, 0 prusa3d.com, 0 -prusa3d.cz, 0 -prusaprinters.org, 0 psarips.com, 0 -psati.ru, 0 -ps-box.ru, 0 -psd1.org, 0 -psefan.com, 0 pskovedu.ru, 0 -pskovline.ru, 0 psnine.com, 0 pspro.ir, 0 -psru.ac.th, 0 -pss.sk, 0 -p-stats.com, 0 -pstorage.space, 0 pstu.ru, 0 psu.ac.th, 0 -psu.by, 0 -psu.kz, 0 psu.ru, 0 -psuti.ru, 0 -psy525.cn, 0 -ptsecurity.com, 0 -ptyxjy.com, 0 -puahome.com, 0 -publiccloud.com.br, 0 -public-cyprus.com.cy, 0 public.gr, 0 -publicitas.com, 0 -publicvm.com, 0 pub.ro, 0 pubyun.com, 0 puc-rio.br, 0 -pudong.gov.cn, 0 pu.edu.tw, 0 -puet.edu.ua, 0 -punchbaby.com, 0 punjab.gov.pk, 0 -punto.ar, 0 -punycoder.com, 0 purdue.edu, 0 -pureftpd.org, 0 -puregamemedia.fr, 0 -puritys.me, 0 -purnov.com, 0 -put.ac.ir, 0 -putao.com, 0 -pvision.ru, 0 -pwnz.org, 0 -pycon.org, 0 pypa.io, 0 -pythian.com, 0 pythonanywhere.com, 0 python.org, 0 pythontutor.com, 0 -pyw.cn, 0 -pz.gov.ua, 0 -pzoom.com, 0 q1.com, 0 -q4yy.com, 0 qapa.fr, 0 -qbear.ru, 0 qdaily.com, 0 -qdcdc.com, 0 qdu.edu.cn, 0 -qdxin.cn, 0 qfang.com, 0 -qfiz.win, 0 -qhfz.edu.cn, 0 -qhimg.com, 0 -qhmsg.com, 0 qianmi.com, 0 qianqian.com, 0 qichacha.com, 0 -qichetong.com, 0 -qida.com, 0 -qifu.me, 0 qihoo.net, 0 -qihu.com, 0 -qikoo.com, 0 qiku.com, 0 -qilong.com, 0 qima-inc.com, 0 -qing5.com, 0 -qinggukeji.com, 0 -qingningzi.com, 0 -qingtaoke.com, 0 qingting.fm, 0 -qingzhuyi.com, 0 qinqinbaby.com, 0 -qinsmoon.com, 0 -qinzhou.gov.cn, 0 qip.ru, 0 qiushibaike.com, 0 -qlcl.edu.vn, 0 -qlean.ru, 0 -qlmoney.com, 0 -qnapclub.it, 0 -qnbar.com, 0 -qnoddns.org.cn, 0 -qoop.me, 0 -qov.tw, 0 qpolitical.com, 0 -qqyou.com, 0 -qrd.by, 0 -qrserver.com, 0 -qsng.cn, 0 -qsrmagazine.com, 0 -quadcept.com, 0 -qualaroo.com, 0 -qualiteconstruction.com, 0 quankan.tv, 0 quanmin.tv, 0 -queeky.com, 0 -queer.de, 0 queezie.com, 0 quepasada.cc, 0 -querylist.cc, 0 -questoria.ru, 0 -qugirl.com, 0 -quickim.co.il, 0 -quicktickets.ru, 0 -quilt.idv.tw, 0 -quintagroup.com, 0 -quint.dk, 0 -quirinale.it, 0 -quitoque.fr, 0 -quizgroup.com, 0 quizzclub.com, 0 -quji.com, 0 quna.com, 0 qunar.com, 0 -qunhequnhe.com, 0 -qupeiyin.cn, 0 -qutke.com, 0 -quyiyuan.com, 0 -quyundong.com, 0 -qxiazai.com, 0 -qycloud.com.cn, 0 -qycn.com, 0 -qydev.com, 0 qzzn.com, 0 -r4ruby.com, 0 -r52.ru, 0 -rabita.az, 0 -racco.com.br, 0 racedepartment.com, 0 -racefornuts.com, 0 -radec.com.mx, 0 -rad.eu, 0 radia.sk, 0 -radicenter.eu, 0 radikal.ru, 0 radimrehurek.com, 0 -radinpars.com, 0 -radinsan.com, 0 -radio1.si, 0 -radio5.com.pl, 0 -radio.cn, 0 -radiojackie.com, 0 -radiola.audio, 0 radiopotok.ru, 0 -radioweb.jp, 0 -rad-net.de, 0 -radom.pl, 0 -radpardazesh.com, 0 -ragan.com, 0 -ragazzeinvendita.com, 0 -rageline.com, 0 -rahvaraamat.ee, 0 rai.it, 0 -rainbow-ic.biz, 0 -rainfly.cn, 0 -rajagiritech.ac.in, 0 -rajax.me, 0 -rajveteranu.cz, 0 -rallets.com, 0 -rand.com, 0 -randymc.de, 0 -ranez.ru, 0 -rapida.ru, 0 -rapidomaine.fr, 0 rara.jp, 0 -raremaps.com, 0 -rare-technologies.com, 0 -rarupload.com, 0 -rasana.ir, 0 -raschet.by, 0 -rashtak.ir, 0 -raskesider.no, 0 -ratbv.ro, 0 -ratowealth.com, 0 -ratpdev.com, 0 -rayaneh.com, 0 -raybt.ru, 0 -rayshobby.net, 0 rbc.ua, 0 -rbru.ac.th, 0 -rbt.asia, 0 -rcf.it, 0 rcforum.ru, 0 -rcfp.org, 0 -rcokoit.ru, 0 -rcscomponents.kiev.ua, 0 -rctw.net, 0 -rd-forum.ru, 0 -rdf.ru, 0 -rdfzcygj.cn, 0 -readnotify.com, 0 readovka.ru, 0 reagent.com.cn, 0 -realestate.ru, 0 -realfevr.com, 0 -realgreenled.com, 0 -realidadvenezolana.com, 0 -realschulebayern.de, 0 -realsociedad.com, 0 -realtyvision.ru, 0 -rebex.net, 0 -rechargedeal.in, 0 -redcafestore.com, 0 red-gate.com, 0 -redirectme.net, 0 -rednager.xyz, 0 -redserver.su, 0 redshift3d.com, 0 redtubelive.com, 0 refdb.ru, 0 -refog.com, 0 reformagkh.ru, 0 -refurb.me, 0 regard.ru, 0 -regel.it, 0 -regenbogen.com, 0 regione.fvg.it, 0 regione.puglia.it, 0 regionoperator.ru, 0 -regiontrud.ru, 0 -registry.net.za, 0 regruhosting.ru, 0 -reifensuche.com, 0 reimu.net, 0 reincarnationics.com, 0 -reisenthel.com, 0 rekab.ir, 0 -remediobarato.com, 0 -remotewebaccess.com, 0 rem.uz, 0 -remzona.by, 0 renault.ru, 0 -renderpeople.com, 0 -renhe.cn, 0 -renjk.com, 0 renren66.com, 0 renren.com, 0 -renshuu.org, 0 rentacenter.com, 0 -rentalhomes.com, 0 -rentbook.co.za, 0 repaik.com, 0 -repetiruem.ru, 0 -replaymod.com, 0 -reportbee.com, 0 -reportermagazin.cz, 0 -researchgateway.ac.nz, 0 -researchmfg.com, 0 -reseauenscene.fr, 0 reseguiden.se, 0 reservationcounter.com, 0 -reska.co.id, 0 respondi.com, 0 -restate.ru, 0 -restore-iphone-data.com, 0 -resto.ru, 0 -restosducoeur.org, 0 -retouch-weblab.com, 0 -retrovisionlatino.net, 0 -ret.ru, 0 -reveal-sound.com, 0 -revell.de, 0 -reviewtrackers.com, 0 -revistamoi.com, 0 -revolt.tv, 0 -rewriteim.jp, 0 rezeptwelt.de, 0 -rfchost.com, 0 -rfei.ru, 0 rf.gd, 0 -rfgsi.com, 0 -rficb.ru, 0 -rfj.ch, 0 -rfmeteo.ru, 0 -rgups.ru, 0 -rgz.one, 0 -rhbrasil.com.br, 0 rhcloud.com, 0 -rhh520.cn, 0 ria.com, 0 -ridersdeal.com, 0 -riftcat.com, 0 -rightathome.net, 0 -rightknights.com, 0 -rigol.com, 0 -rijigu.com, 0 -rimi.lt, 0 -riolis.ru, 0 ripost.hu, 0 -risda.gov.my, 0 -riseba.lv, 0 -risenenergy.com, 0 -rising-gods.de, 0 -riss.ru, 0 -ritekit.com, 0 -rite.ly, 0 -ritlabs.com, 0 -ritmonexx.ru, 0 -rivalregions.com, 0 -rixcloud.com, 0 -rizhiyi.com, 0 -rjb.ch, 0 rj.gov.br, 0 -rjh.com.cn, 0 rk.gov.ru, 0 -rkiau.ac.ir, 0 rkomi.ru, 0 rlp.de, 0 -rls.tv, 0 -rlu.ru, 0 -rmis36.ru, 0 -rmu.edu, 0 -rmutsb.ac.th, 0 -rmutsv.ac.th, 0 rncb.ru, 0 rn.gov.br, 0 rnp.br, 0 rnz.de, 0 -roadoor.com, 0 roboforex.com, 0 -roboforex.ru, 0 -robrobinette.com, 0 roche.com, 0 -roche.de, 0 rocketbeans.tv, 0 -rocket-exp.com, 0 -rodina.tv, 0 -roebx.com, 0 -rohan.co.uk, 0 -roiland.com, 0 -roklen24.cz, 0 -roman.com.tr, 0 -ronasit.com, 0 -roncoo.com, 0 -rongcapital.cn, 0 -root.bg, 0 root.cz, 0 -roov.org, 0 roowei.com, 0 -rooyeshnews.com, 0 roposo.com, 0 -rosalab.ru, 0 -rosalinux.ru, 0 -rosan.com, 0 rosario3.com, 0 rosario.gov.ar, 0 -roscosmos.ru, 0 roseltorg.ru, 0 -rosen-group.com, 0 roskazna.ru, 0 rosminzdrav.ru, 0 rosrealt.ru, 0 -rossiya-airlines.com, 0 -rossoverdi.com, 0 -rostec.ru, 0 -rostobr.ru, 0 -rostov-gorod.ru, 0 -rostrud.ru, 0 -routerclub.com, 0 -rouxa365.gr, 0 -royal-forest.org, 0 -royalquest.ru, 0 -royalrobbins.com, 0 -royaninstitute.org, 0 -rozanehshop.ir, 0 rozhlas.cz, 0 -rpg-city.de, 0 -rpn.gov.ru, 0 -rqnoj.cn, 0 -rrabbit.cc, 0 -rrc24.com, 0 rrjc.com, 0 -rsc.org.uk, 0 -rsmu.ru, 0 -rsr-olymp.ru, 0 -rs.ru, 0 -rssi.ru, 0 -r-stahl.com, 0 -rstore.in, 0 rte.ie, 0 -rt-mart.com.cn, 0 rt.ru, 0 -rt-thread.org, 0 rtv.rs, 0 rtvs.sk, 0 ru.ac.bd, 0 -ruan8.com, 0 ruanmei.com, 0 -rubarius.ru, 0 -rubhoz.com, 0 ru-board.com, 0 ruby-china.org, 0 ruby-doc.org, 0 ruby-forum.com, 0 ruguoapp.com, 0 ruijie.com.cn, 0 -ru.is, 0 -rukzakoff.ru, 0 -rulaws.ru, 0 rummycircle.com, 0 -runeapps.org, 0 ru.net, 0 -runff.com, 0 -runivers.ru, 0 -runningquotient.com, 0 -ruonu.com, 0 -rusat.com, 0 rusdosug.com, 0 -rusempire.ru, 0 -rusevik.ru, 0 rusfolder.com, 0 -rushydro.ru, 0 -rusnano.com, 0 -ruspo.ru, 0 russian-belgium.be, 0 -russkaja-ohota.ru, 0 -rustest.ru, 0 -rusticae.es, 0 -rustorrents.info, 0 -ruvape.club, 0 -ruvr.ru, 0 -r-v-s.su, 0 -rvv.de, 0 rwth-aachen.de, 0 -rybbaby.com, 0 -rybnik.pl, 0 -rz.com, 0 -rzeszow.pl, 0 -rzgmu.ru, 0 -s1homes.com, 0 -s3d4.cn, 0 -s4yy.com, 0 -sabayon.org, 0 -sabbuy.com, 0 sac.net.cn, 0 -sadc.int, 0 -sadeco.ir, 0 sa.edu.au, 0 -saezlive.net, 0 -safariran.ir, 0 safarme.com, 0 -safc.com, 0 safedog.cn, 0 safer-networking.org, 0 -safe-ws.eu, 0 sahamyab.com, 0 -sahra.org.za, 0 -saibaba.org, 0 -saic-gm.com, 0 -saicmaxus.com, 0 -sailingworld.com, 0 -saintpaul.edu, 0 -saipujianshen.com, 0 saitama-u.ac.jp, 0 -saitreport.ru, 0 saix.net, 0 sakhtafzarmag.com, 0 sakura.ne.jp, 0 -saleshood.com, 0 salon24.pl, 0 -salto.bz, 0 -saltwatersportsman.com, 0 -salzburgerland.com, 0 -samedi.de, 0 -samemes.com.br, 0 -sameroom.io, 0 -samesound.ru, 0 -samgups.ru, 0 -samihost.com, 0 -samohodoff.ru, 0 samregion.ru, 0 samsung-fun.ru, 0 -samuraj-cz.com, 0 sandai.net, 0 -sangfor.com, 0 sangfor.com.cn, 0 -sangoma.com, 0 -sangon.com, 0 sanjieke.cn, 0 -sanquan.com, 0 sanstv.ru, 0 -santaclaus-embassy.com, 0 -santech.ru, 0 -santegidio.org, 0 sanwen8.cn, 0 sanwen.net, 0 -sapagroup.com, 0 sapo.pt, 0 -sarasavi.lk, 0 -sarnovosti.ru, 0 -sarvserver.com, 0 -sarvssl.com, 0 -sasac.gov.cn, 0 -saschina.org, 0 -satc.edu.br, 0 -satel.pl, 0 -saturn-r.ru, 0 -satway.ru, 0 -savechange.ru, 0 saveur.com, 0 -savevpn.cc, 0 -savvytime.com, 0 -saystory.co.kr, 0 sbar.com.cn, 0 -sb-dji.com, 0 sberbank-ast.ru, 0 -sberbank.ua, 0 -sbras.ru, 0 -sbrf.com.ua, 0 sbroker.de, 0 sbro.me, 0 -sbsart.com, 0 -sbs.edu.cn, 0 -sbwml.cn, 0 -scalebay.ru, 0 -scalp-trading.com, 0 -scenedownloads.pw, 0 -scga.gov.cn, 0 -sc.gov.cn, 0 -schieb.de, 0 -schneider-electric.cn, 0 schneider-electric.com, 0 -schneidersladen.de, 0 -school2100.com, 0 school.nz, 0 -schoolofhaskell.com, 0 -schoolpal.cn, 0 -school-scout.de, 0 -schoolsoft.com, 0 -schullv.de, 0 -schul-webportal.de, 0 -schwarzkopf.de, 0 -schweizmobil.ch, 0 -sci99.com, 0 -science-education.ru, 0 -scientificrussia.ru, 0 sci-hub.ac, 0 -sci-nnov.ru, 0 -scoffoni.net, 0 scoop.co.nz, 0 scoop.it, 0 -scorecloud.com, 0 -scotthelme.co.uk, 0 -scottlogic.com, 0 -scotweb.co.uk, 0 -scout.org.hk, 0 -scoutwiki.org, 0 -scrabble-word-finder.com, 0 -screenbid.com, 0 screencastify.com, 0 -scriptbuy.ir, 0 -scriptux.ir, 0 scryde.ru, 0 -scsb.com.tw, 0 scssoft.com, 0 -sctv.com, 0 -scubadiving.com, 0 scu.edu.cn, 0 scut.edu.cn, 0 -sdada.edu.cn, 0 -sde.ru, 0 -sdi.bg, 0 -sdk.cn, 0 sdl.com, 0 sdnu.edu.cn, 0 sdsmt.edu, 0 -sd.ua, 0 sdu.edu.cn, 0 -sdvor.com, 0 -sdyunban.com, 0 -se7en.ws, 0 -seacadets.org, 0 seafile.com, 0 -seamwork.com, 0 searates.com, 0 -search-for-it.com, 0 -searchx.ch, 0 -searu.org, 0 -seasiaconsulting.com, 0 -seasone.ru, 0 seattle.gov, 0 -seatwave.com, 0 -seatwave.es, 0 -seatwave.ie, 0 -seatwave.it, 0 -sebastian.expert, 0 -sebraemg.com.br, 0 -sec.gob.mx, 0 -seckin.com.tr, 0 -seclub.org, 0 -second24.ru, 0 -secp.gov.pk, 0 -secpulse.com, 0 -secureauthservice.com, 0 secureserver.net, 0 -securitasdirect.fr, 0 -securitythinkerz.com, 0 secutix.com, 0 sec-wiki.com, 0 -secye.com, 0 -sedmitza.ru, 0 -seec.com.tw, 0 seeed.cc, 0 -seemallorca.com, 0 seetv.tv, 0 -seeyon.com, 0 se.gov.br, 0 seg-social.pt, 0 -seibert-media.net, 0 -seidensticker.com, 0 -seis.ac.cn, 0 seiyon.net, 0 -seldatdirect.com, 0 -selfhost.de, 0 -selfhost.eu, 0 selfhtml.org, 0 -selfip.biz, 0 -selfip.com, 0 -selfip.net, 0 -selfip.org, 0 -selfmadetrip.com, 0 sellercloud.com, 0 -sellercloudlocal.com, 0 -sellercube.com, 0 sellerlabs.com, 0 -sellermania.com, 0 sellfile.ir, 0 -selpics.com, 0 selzir.com, 0 -semesteratsea.org, 0 -semiaccurate.com, 0 seminuevos.com, 0 -semmel.de, 0 -sem-tem.ru, 0 senado.gov.br, 0 senai.br, 0 sendpulse.com, 0 sendsay.ru, 0 -sengled.com, 0 -sense.com, 0 -sentres.com, 0 -seodollars.com, 0 -seofangfa.com, 0 -seolib.ru, 0 seopult.ru, 0 -seo-summary.de, 0 seoul.co.kr, 0 -seo-united.de, 0 seowhy.com, 0 -sepidwebhost.com, 0 -serg-casper.ru, 0 -serj.ws, 0 -servebeer.com, 0 -serveftp.net, 0 -serveftp.org, 0 servegame.com, 0 -servehttp.com, 0 -servel.cl, 0 -server4you.de, 0 -server4you.net, 0 server-he.de, 0 server.ir, 0 -serveriran.net, 0 -servernews.ru, 0 -serveromat.com, 0 -serverprofi24.com, 0 -serverprofi24.de, 0 -server-sponsoring.com, 0 -service-schematics.ru, 0 -servispckupka.cz, 0 -servisvk.ru, 0 -servyou.com.cn, 0 -sestosg.net, 0 setmore.com, 0 -setti.info, 0 seu.edu.cn, 0 -se-unsa.org, 0 -sevaft.cn, 0 -sevastopol.press, 0 seven-sky.net, 0 -sevpolitforum.ru, 0 -sevt.cz, 0 -sexacg.com, 0 -sexchats.ru, 0 -sexhotgames.com, 0 sexlikereal.com, 0 -seznamzbozi.cz, 0 sfacg.com, 0 -sf-addon.com, 0 -sfe8.com, 0 sfedu.ru, 0 sf-express.com, 0 sfgame.cz, 0 sfgame.de, 0 -sfgame.es, 0 -sfgame.fr, 0 -sfgame.hu, 0 sfgame.net, 0 sfgame.pl, 0 -sfgame.us, 0 sf-helper.com, 0 sflep.com, 0 sfs.gov.ua, 0 -sfuh.tk, 0 sfu-kras.ru, 0 -sfworldwide.com, 0 -sfy.ru, 0 sg-autorepondeur.com, 0 sgcc.com.cn, 0 -sgd.de, 0 sgeb.bg, 0 -sglgroup.com, 0 -sgmw.com.cn, 0 -sguo.com, 0 -sg-video.com, 0 -shab.ch, 0 -shade3d.jp, 0 -shadowfly.org, 0 -shadowpad.jp, 0 -shadowsock.club, 0 -shahinsoft.ir, 0 shahroodut.ac.ir, 0 -shamana.co, 0 shanbay.com, 0 shandongair.com.cn, 0 shanghaidisneyresort.com, 0 shanghaitech.edu.cn, 0 -shantou.gov.cn, 0 -shaogood.com, 0 -shapingrain.com, 0 -sharedbox.com, 0 -shareinstock.com, 0 -sharengo.it, 0 sharepoint.cn, 0 -sharesdk.cn, 0 -sharklasers.com, 0 shatel.ir, 0 shatelland.com, 0 -shatura.com, 0 -shayuvpnn.com, 0 -shdf.gov.cn, 0 -shebaoonline.com, 0 -sheedantivirus.ir, 0 -sheencity.com, 0 shengyeji.com, 0 -shenzhan.in, 0 -shenzhong.net, 0 -sherbrooke.qc.ca, 0 sheridanc.on.ca, 0 -sherlock-holm.es, 0 sherweb.com, 0 sh.gov.cn, 0 -shiep.edu.cn, 0 -shiftelearning.com, 0 -shiftphones.com, 0 shikimori.org, 0 -shina.ru, 0 shinezone.com, 0 -shippable.com, 0 shipxy.com, 0 shirazwebhost.com, 0 -shitou.com, 0 -shmh.gov.cn, 0 shmtu.edu.cn, 0 shmu.sk, 0 -shoe.org, 0 -shoessale.com.ua, 0 -shom.fr, 0 -shooshmall.com, 0 shooter.cn, 0 -shopandroid.com, 0 shop-apotheke.com, 0 -shopbuilder.ro, 0 -shop.hu, 0 -shop-logistics.ru, 0 -shopmania.bg, 0 -shopmania.biz, 0 -shopmania.es, 0 -shopmania.hu, 0 -shopmania.in, 0 -shopmania.it, 0 -shopmania.pt, 0 shopmania.ro, 0 -shopmania.rs, 0 -shopmaster2.ru, 0 shopnctest.com, 0 -shopozz.ru, 0 -shoppal.in, 0 -shop.unas.hu, 0 -shopvote.de, 0 -shorten.id, 0 -shost.ca, 0 shouqu.me, 0 shoushang.com, 0 -shouyeren.org, 0 -showapi.com, 0 showjet.ru, 0 -showradyo.com.tr, 0 -shrinktheweb.com, 0 -shtrih-m.ru, 0 shuaigay.top, 0 shuax.com, 0 shufe.edu.cn, 0 -shunde.gov.cn, 0 shunwang.com, 0 -shunxingkeji.com, 0 -shuxuejia.com, 0 -shyaway.com, 0 siamchart.com, 0 -siaranku.com, 0 -sia.ru, 0 -siasun.com, 0 -sibername.com, 0 -sibsau.ru, 0 -sibstrin.ru, 0 -sibsutis.ru, 0 sicau.edu.cn, 0 -sickoo.com, 0 sicofi.com.mx, 0 sidex.ru, 0 -sidsavara.com, 0 -siedlce.pl, 0 -siedle.de, 0 -sigfox.com, 0 -sigmasport.com, 0 -signfiles.com, 0 -sigsiu.net, 0 -sihaidiaoyu.com, 0 -silagames.com, 0 -silamp.it, 0 -silextimes.com, 0 silhouette-ac.com, 0 -silijiren.info, 0 -silk.co, 0 -silkenowak.de, 0 -siluyuncang.com, 0 -simple-aja.info, 0 simplefx.com, 0 simplementegenial.cc, 0 -simpleminecraft.ru, 0 simple-talk.com, 0 -simplix.info, 0 -simplytest.me, 0 simuwang.com, 0 -sinaapp.com, 0 sina.com.cn, 0 -sinam.net, 0 sinchew.com.my, 0 -sindiconet.com.br, 0 -sinerji.gen.tr, 0 sinica.edu.tw, 0 -sininonton.com, 0 sinochem.com, 0 sinofsx.com, 0 sinopec.com, 0 sinosig.com, 0 -sinosoft.info, 0 sintagespareas.gr, 0 sinyi.com.tw, 0 -sioeye.cn, 0 -sipac.gov.cn, 0 sipo.gov.cn, 0 -sirvoy.com, 0 -si-shell.net, 0 -site40.net, 0 -site88.net, 0 -siteguarding.com, 0 -sito.ir, 0 -sixsenses.com, 0 sjcamhd.com, 0 -sjtu.cn, 0 sjtu.edu.cn, 0 -skalnik.pl, 0 -skat-palast.de, 0 -skauting.cz, 0 skbank.com.tw, 0 -sketchengine.co.uk, 0 -sketchpark.ru, 0 -skifmusic.ru, 0 skinak.ir, 0 -skincrates.com, 0 -skinrenewal.co.za, 0 sk.kz, 0 -skn1.com, 0 -sknt.ru, 0 -skoda.com.cn, 0 -skokie68.org, 0 -skoltech.ru, 0 -skritter.com, 0 sktelecom.com, 0 -skuonline.ru, 0 -skyany.com, 0 -skygear.ru, 0 -skyinsurance.co.uk, 0 -skyocean.com, 0 skywayinvestgroup.com, 0 slack.com, 0 slack-files.com, 0 -slack-imgs.com, 0 slack-redir.net, 0 -slaters.co.uk, 0 -slavyanskaya-kultura.ru, 0 -slevadne.cz, 0 -slide-life.ru, 0 slovodel.com, 0 slunecnice.cz, 0 -smarket.net.cn, 0 -smartafisha.ru, 0 smartisan.com, 0 -smartjobboard.com, 0 smartlog.jp, 0 -smart.net.ly, 0 smartserials.com, 0 -smarty.cz, 0 -smartytoys.ru, 0 -smash.com, 0 -sma.so, 0 -smasurf.com, 0 -smed.ru, 0 -smetnoedelo.ru, 0 -smh.re, 0 -sm-komandor.ru, 0 -smokepack.ru, 0 -smokingirl.org, 0 -smoothscroll.net, 0 -smotreshka.tv, 0 smotri.com, 0 -smow.de, 0 -smsbrana.cz, 0 -smsmoney.ee, 0 smspinigai.lt, 0 -smuc.ac.kr, 0 -smvdu.ac.in, 0 -smxe.cn, 0 -smyl.es, 0 -snapapp.com, 0 -snapgene.com, 0 -snappii.com, 0 snh48.com, 0 snssdk.com, 0 snu.ac.kr, 0 soargames.com, 0 sobt5.org, 0 -sobug.com, 0 -socialquantum.ru, 0 -socialtools.ru, 0 societe.com, 0 so.com, 0 -softconf.com, 0 -softkey.ru, 0 -softlinegroup.com, 0 -softmath.com, 0 -softserveinc.com, 0 sogou.com, 0 -so.gov.pl, 0 -sohucs.com, 0 -soiro.ru, 0 -sojson.com, 0 -sojump.cn, 0 sojump.com, 0 sojump.hk, 0 -sokolniki.com, 0 sokolov.ru, 0 soku.com, 0 -solarcentury.com, 0 -solarianprogrammer.com, 0 -solarmanpv.com, 0 -solestruck.com, 0 solidot.org, 0 -solid-profit.com, 0 -soloaffitti.it, 0 -solvege.net, 0 -somebox.ru, 0 -somonair.com, 0 -sonapresse.com, 0 sonikelf.ru, 0 -sonnenstaatland.com, 0 soonnet.org, 0 -sopot.pl, 0 soprasteria.com, 0 -sorz.org, 0 -sosista.com, 0 sosobta.cn, 0 sosobtc.com, 0 -sostronk.com, 0 -sotel.de, 0 -soti.net, 0 -sotis-online.ru, 0 -sotovikmobile.ru, 0 -soujuw.com, 0 -soujuw.net, 0 -soulkeepers.eu, 0 -soundcream.net, 0 soundgasm.net, 0 -sourcefabric.org, 0 -soushiti.com, 0 southmoney.com, 0 -southplainscollege.edu, 0 -sov5.com, 0 sovkusom.ru, 0 -sovtime.ru, 0 -soyoung.com, 0 -sp2all.ru, 0 -sp2.org, 0 -spaceinvasion.info, 0 -spacem.cn, 0 spaces.ru, 0 -spagobi.org, 0 -spankwirecams.com, 0 -spar-dich-schlau.de, 0 -sparkasse-landshut.de, 0 spark.ru, 0 -spawtz.com, 0 -spbgasu.ru, 0 spbstu.ru, 0 -spb.su, 0 spbu.ru, 0 -spbvedomosti.ru, 0 -spca.org.hk, 0 -spdns.de, 0 -spdns.org, 0 specialist.ru, 0 spec-komp.com, 0 -speechpad.pw, 0 -speechpad.ru, 0 -speedify.com, 0 -speedyshare.com, 0 -speiyou.cn, 0 speiyou.com, 0 -spesifikasiharga.com, 0 sp.gov.br, 0 -sphero.com, 0 -spigit.com, 0 -spk.ru, 0 -spl.info, 0 -splio.com, 0 -splitmetrics.com, 0 -spoilertime.com, 0 -spolo.org, 0 -spongepowered.org, 0 -sponsorpay.com, 0 -sportbedarf.de, 0 -sportbro.cc, 0 -sportdiver.com, 0 -sportfishingmag.com, 0 -sportovnivozy.cz, 0 -sportplayer.io, 0 -sportrider.com, 0 -sport-sante.fr, 0 sportsbet.com.au, 0 -sportsbetting.ag, 0 sportsbikeshop.co.uk, 0 -sportsboom.tv, 0 -sportspar.de, 0 sports.ru, 0 sportvision.rs, 0 spot.im, 0 sprashivai.ru, 0 -spravka-mdv.ru, 0 -spravkatver.ru, 0 -springstreetads.com, 0 -sprintground.com, 0 -sprit.org, 0 spsr.ru, 0 -spurssh.com, 0 sputnikipogrom.com, 0 -spybot.info, 0 -spyshop.pl, 0 -spyzer.ru, 0 -sqli.com, 0 sqlitebrowser.org, 0 sqlservercentral.com, 0 -squick.me, 0 squirt.org, 0 sram.com, 0 -srb2.org, 0 -srcf.net, 0 srovnanicen.cz, 0 -srt.gob.ar, 0 -srvgame.ru, 0 -sscat.cn, 0 -ssdax.com, 0 -ssd-life.com, 0 sse.com.cn, 0 -sshida.com, 0 -s-shot.ru, 0 -ssjsq.net, 0 ssllabs.com, 0 -sslunblocker.com, 0 -ssmu.ru, 0 -ssn.gob.ar, 0 -ssorz.com, 0 -ssrj.com, 0 -ssspeed.net, 0 -ssvpn.vip, 0 -ssw.com.au, 0 -ss.wtf, 0 stac.co.ao, 0 -stackage.org, 0 -stadium.ru, 0 -stadtmobil.de, 0 -staffpoint.fi, 0 -stalker.land, 0 -stample.co, 0 -stampsy.com, 0 stanford.edu, 0 -stanfy.com, 0 -stanmus.ru, 0 -staradworld.com, 0 -staraya-moneta.ru, 0 -starchefs.com, 0 -star-citizens.de, 0 -starfandom.com, 0 -stargard.pl, 0 -starline-online.ru, 0 -starship.xyz, 0 -startdedicated.com, 0 -startdedicated.de, 0 -startsearch.org, 0 -startsmile.ru, 0 startssl.com, 0 -startss.today, 0 -state-of-mind.de, 0 state.or.us, 0 statgrad.org, 0 -stat.uz, 0 -staubli.com, 0 stayfriends.de, 0 -stayge.net, 0 -stays.io, 0 -stb.com.mk, 0 st-clair.net, 0 stcn.com, 0 -steamrepcn.com, 0 -steam-trader.com, 0 -steelalborz.com, 0 -stefanini.com, 0 -steinberg.de, 0 -steinberg.fr, 0 steinberg.net, 0 -steinigke.de, 0 -stellenticket.de, 0 -stepan.com, 0 -stevejenkins.com, 0 -stewardship.com, 0 -stfalcon.com, 0 -stickyadstv.com, 0 -stiesia.ac.id, 0 stirileprotv.ro, 0 stiripesurse.ro, 0 -stis.ac.id, 0 stlouisfed.org, 0 -stluke.com.ph, 0 sto.cc, 0 -stockinthechannel.co.uk, 0 sto.cn, 0 -stolle.ru, 0 stoloto.ru, 0 -stom.ru, 0 -storeapps.org, 0 -storemags.com, 0 stormss.us, 0 -stradeanas.it, 0 -strangled.net, 0 -strategya.com, 0 -strategyanalytics.com, 0 stratoserver.net, 0 -stray.love, 0 -str.by, 0 streamatemodels.com, 0 -streamcatcher.de, 0 -streamcraft.net, 0 -streamjar.tv, 0 -streampub.net, 0 -streeetchypants.com, 0 -streetmeatasia.com, 0 strelkacard.ru, 0 -stressfree.pl, 0 -stroitelstvosovety.ru, 0 -stronazen.pl, 0 -stroygigant.ru, 0 -stroylandiya.ru, 0 -stroysvoimirukami.ru, 0 -strunz.com, 0 -studiorent.ru, 0 studybay.com, 0 -stuffio.com, 0 -stuq.org, 0 -stusz.com, 0 -stylingandroid.com, 0 -su0.ru, 0 subfactory.fr, 0 -sublinet.com, 0 -submail.cn, 0 -suche6.ch, 0 sudact.ru, 0 suda.edu.cn, 0 -sudanzip.com, 0 -sudmed.ru, 0 -sudoku-knacker.de, 0 -suedostschweiz.ch, 0 -su.edu, 0 sues.edu.cn, 0 sufficientvelocity.com, 0 -suitaweb.net, 0 sulinet.hu, 0 -sulrevendas.com.br, 0 -sumaou.com, 0 -sumdu.edu.ua, 0 -sumochka.com, 0 -sumtel.ru, 0 -sunagesh.com, 0 sunbox.cc, 0 suncco.com, 0 -sundray.com.cn, 0 -sundukup.ru, 0 -sunfar.com.tw, 0 -suninfo.com, 0 -suning.cn, 0 suning.com, 0 -sunland.org.cn, 0 sunlands.com, 0 -sunrise74.com, 0 -sunshine-live.de, 0 -sunskypars.ir, 0 -sunwenqi.cn, 0 -suonuo.net, 0 -supaprice.co.uk, 0 -supardi.net, 0 -superb.net, 0 superbotanik.net, 0 -superguiaargentina.com.ar, 0 -superhosting.cz, 0 -supermagnete.ch, 0 -supermagnete.de, 0 -supermagnete.es, 0 -supermagnete.fr, 0 -supermagnete.it, 0 -supermap.com, 0 -supernano.com, 0 superphysique.org, 0 -super-warez.net, 0 -supl.biz, 0 -suplementosbrasil.org, 0 -suppore.cn, 0 sureserver.com, 0 -suresupport.com, 0 -surplussales.com, 0 -surtime.com, 0 -survivaldub.com, 0 -sushishop.ru, 0 sustc.edu.cn, 0 -sust.edu.cn, 0 susu.ru, 0 -sut.ru, 0 -suwalki.pl, 0 suwon.ac.kr, 0 -suzlon.com, 0 -suzuki-china.com, 0 -sv98.de, 0 -svadbagolik.ru, 0 -svadebka.ws, 0 -svarecky-obchod.cz, 0 -sven.de, 0 -sverbihina.com, 0 -svetofor.info, 0 -svetosila.ru, 0 s-vfu.ru, 0 -svijet-medija.hr, 0 -svlfg.de, 0 -svobodni.cz, 0 svp-team.com, 0 svyaznoy.ru, 0 -svzt.ru, 0 swagbucks.com, 0 -swan.sk, 0 -swcszx.com, 0 -sweatband.com, 0 -sweet211.ru, 0 -swfr.de, 0 -swiftzer.net, 0 swissgolden.com, 0 -swissmedical.com.ar, 0 swjtu.edu.cn, 0 swpu.edu.cn, 0 -sws.cz, 0 -swsu.org, 0 -swsu.ru, 0 swu.edu.cn, 0 swufe.edu.cn, 0 swust.edu.cn, 0 -sxe-injected.com, 0 -sxrczx.com, 0 -syau.edu.cn, 0 -sydneynewyearseve.com, 0 sygic.com, 0 -sygnity.pl, 0 -syischina.com, 0 -symphonic-net.com, 0 -synchronkartei.de, 0 -synchronoss.com, 0 -syncis.com, 0 -syncthing.net, 0 sync-video.com, 0 -synergize.co, 0 -synevo.by, 0 synology.me, 0 -sysadmin.ru, 0 -sys-con.com, 0 -sysfx.com, 0 -syslinux.org, 0 -syssel.net, 0 -systutorials.com, 0 -sysucc.org.cn, 0 sysu.edu.cn, 0 sytes.net, 0 sz12333.gov.cn, 0 sz189.cn, 0 szaic.gov.cn, 0 -szamlakozpont.hu, 0 -szcredit.com.cn, 0 szcredit.org.cn, 0 -szft.gov.cn, 0 -szgalaxy.com, 0 sz.gov.cn, 0 szgs.gov.cn, 0 szhome.com, 0 -sziit.edu.cn, 0 -sz-its.cn, 0 szjs.gov.cn, 0 -szjzz.gov.cn, 0 szmb.gov.cn, 0 szm.com, 0 -szmqs.gov.cn, 0 -szn-ural.ru, 0 -szone-online.so, 0 szscjg.gov.cn, 0 szse.cn, 0 szsi.gov.cn, 0 szsti.gov.cn, 0 sztb.gov.cn, 0 szu.edu.cn, 0 -szweb.cn, 0 -szweiflr.cn, 0 -szybko.pl, 0 szzfgjj.com, 0 t2bot.ru, 0 -t4vps.eu, 0 -t4-wiki.de, 0 -tablepress.org, 0 tabletki.ua, 0 tabloidpulsa.co.id, 0 tabnak.ir, 0 tabsbook.ru, 0 tabstabs.com, 0 -tactileo.fr, 0 -ta.de, 0 -tado.com, 0 -tagplus.com.br, 0 tagul.com, 0 -taifedu.gov.sa, 0 -tailtarget.com, 0 -taimen.com, 0 taipeifubon.com.tw, 0 -taizhou.gov.cn, 0 -tajinfo.org, 0 -takcloud.com, 0 -takibu.com, 0 -taknet.ir, 0 takprosto.cc, 0 -taktaktak.ru, 0 -taktaserver.ir, 0 -takufile.com, 0 -talicai.com, 0 -talkingcoder.com, 0 talkingdata.com, 0 -tallynine.com, 0 talon.by, 0 tamasha.ir, 0 -tangtao.net.cn, 0 -tanzpol.org, 0 taoche.com, 0 -taocrm.com, 0 -taodaxiang.com, 0 -taofl.cn, 0 taokezhushou.com, 0 -taomee.com, 0 taoqueqiao.com, 0 taotaosou.com, 0 tapochek.net, 0 -tarelki.com.ua, 0 -targethunter.net, 0 -tas-ix.net, 0 -taskobox.com, 0 tatar-inform.ru, 0 tatar.ru, 0 -tatenergosbyt.ru, 0 tatler.ru, 0 -tatneft.ru, 0 -tattelecom.ru, 0 -tavanir.org.ir, 0 -taxfreeshops.jp, 0 -taxisaturn.ru, 0 taylors.edu.my, 0 tc.edu.tw, 0 -tcgolestan.ir, 0 -tchkcdn.com, 0 tcl.com, 0 -tclkuyu.com, 0 -tdk.com, 0 tdmu.edu.ua, 0 tdx.com.cn, 0 -tdyun.com, 0 -teachersammy.com, 0 -teachers.io, 0 -teachvideo.ru, 0 -teambition.net, 0 -teamshub.com, 0 -team-ulm.de, 0 -teasermedia.net, 0 -teccart.qc.ca, 0 -techglimpse.com, 0 -technocity.ru, 0 technodom.kz, 0 -techprom.ru, 0 techraptor.net, 0 techshot.ir, 0 -techytalk.info, 0 tecnoandroid.it, 0 -tecnolegis.com, 0 tecno-mobile.com, 0 -tecpt.com, 0 -tedliou.com, 0 -tedox.de, 0 -tehnocentr.ru, 0 -tehnoland.lv, 0 -tehnomaks.ru, 0 tehnosila.ru, 0 -tehnoskarb.com.ua, 0 -tehprime.ru, 0 -tehrannews.ir, 0 -tekirdagnethaber.com, 0 -teknomobil.org, 0 -tekscan.com, 0 tekzen.com.tr, 0 tele2.kz, 0 -telecable.es, 0 -telecamera.ru, 0 telecentro.com.ar, 0 -telecom.by, 0 telecom.kz, 0 -telefen.com, 0 -telefonica.de, 0 -telegraf.uz, 0 telekarta.tv, 0 telekom.com, 0 -telekritika.ua, 0 -telemw.com, 0 telenet.be, 0 -telenet.ru, 0 -telenor.dk, 0 -teleos.ru, 0 -teleport.org, 0 -teletal.hu, 0 -teletrade-asia.com, 0 -teletrade-dj.com, 0 teletrade.ru, 0 -telin.co.id, 0 telkomsel.com, 0 -telonko.com, 0 -teltec.de, 0 template-help.com, 0 templatemonster.com, 0 -templates.com, 0 tempodisconti.it, 0 -temptationgifts.com, 0 -tencent.click, 0 -tenddata.com, 0 -tenderplan.ru, 0 tengrinews.kz, 0 -tentorium.ru, 0 -tenvis.com, 0 -teremok.ru, 0 -terra.im, 0 terrapinn.com, 0 -tesbuys.com, 0 -teshehui.com, 0 tesoon.com, 0 -tesser.ru, 0 testerhome.com, 0 -testforhost.com, 0 -testfreaks.com, 0 -testvelocidad.eu, 0 -testwo.com, 0 -tet.tv, 0 -text-compare.com, 0 text.ru, 0 -tezign.com, 0 -tf2mart.net, 0 -tfb.ru, 0 -tfm.ro, 0 tfreeca2.com, 0 -tfshops.com, 0 -tga-arsh.ir, 0 -tgl.ru, 0 -tgram.ru, 0 th7.cn, 0 thalesgroup.com, 0 -thali.ch, 0 -thanks-shine.com, 0 -thatvidieu.com, 0 -the5fire.com, 0 -thebigchoice.com, 0 -thebigplans.ru, 0 -theblueprint.ru, 0 -thecodecampus.de, 0 -thecryptochat.net, 0 -thecus.com, 0 -thecustomizewindows.com, 0 -theidentitypages.com, 0 -the-impish-ink.de, 0 -the-ken.com, 0 -thelibrarystore.com, 0 -thelongdark.ru, 0 themaclife.com, 0 -themall.it, 0 -themefarmer.com, 0 -themient.com, 0 themill.com, 0 -themusic.today, 0 -thenews.kz, 0 -theparkingspot.com, 0 -theqarena.com, 0 therange.co.uk, 0 -thermomix.com, 0 thestar.com.my, 0 -thestation.ru, 0 -thesycon.de, 0 -theteenboy.com, 0 -thewalrus.ru, 0 -thinkingstorm.com, 0 -thinklocal.co.za, 0 -thirtymall.com, 0 -thisismyjam.com, 0 threema.ch, 0 -thruhere.net, 0 -thumbnail-download.com, 0 -thunderquote.com, 0 -thus.ch, 0 tiancity.com, 0 -tianhong.cn, 0 -tianjinwe.com, 0 tiantian8.com, 0 tiantian.tv, 0 -tianti.io, 0 -tianyabagua.cn, 0 tianyancha.com, 0 -ticka.it, 0 -ticketflap.com, 0 -ticketgo.com.tw, 0 -tickets.az, 0 -tickets.com.tr, 0 tickets.kz, 0 -tickets.pl, 0 tickets.ru, 0 tickets.ua, 0 tickmill.com, 0 -ticp.net, 0 ticwear.com, 0 -tidbits.com, 0 -tiendatiger.es, 0 -tierschutz-shop.de, 0 -tiff.net, 0 -tigergaming.com, 0 -tigrimigri.com, 0 timeface.cn, 0 -timepill.net, 0 -time.sc, 0 -timr.com, 0 tingyun.com, 0 -tinkerpatch.com, 0 -tinper.org, 0 -tiplanet.org, 0 -tipplap.hu, 0 tipsport.sk, 0 tiseagles.com, 0 tiss.edu, 0 -tita.com, 0 titanic-magazin.de, 0 -titanpad.com, 0 titrari.ro, 0 -titus.de, 0 -tixforgigs.com, 0 -tiyubisai.com, 0 tizen.org, 0 tjms.jus.br, 0 -tjosm.com, 0 tjpa.jus.br, 0 -tjto.jus.br, 0 tju.edu.cn, 0 -tkbbank.ru, 0 -tkgorod.ru, 0 -tl50.com, 0 -tlgrm.eu, 0 tlgrm.ru, 0 -tlinx.cn, 0 -t-l.ru, 0 -tlushim.co.il, 0 -tmcnet.com, 0 -tmea.org, 0 -tmetric.com, 0 -tmg.nl, 0 -tmon.co.kr, 0 -tmoncorp.com, 0 -tmp.com, 0 tmsf.com, 0 -tms.pl, 0 tmweb.ru, 0 tn.edu.tw, 0 -tn.kz, 0 -tnpu.edu.ua, 0 -tns-ua.com, 0 -tntmusic.ru, 0 -tobacco.com.cn, 0 -tobaccofreekids.org, 0 -tobitcoin.biz, 0 tochka.net, 0 -tode.cz, 0 todoautos.com.pe, 0 -todojuguete.es, 0 -tofour.net, 0 to.gov.br, 0 -tohkalove.com, 0 -toi-moi.com, 0 -tokyo-city.ru, 0 tokyo.jp, 0 -tokyonothot.com, 0 -tokyotower.co.jp, 0 -tomato.it, 0 tomica.ru, 0 tom.ru, 0 -tomsk.gov.ru, 0 tongbu.com, 0 tongda2000.com, 0 -tonghuacun.com, 0 -tongji.cn, 0 tongji.edu.cn, 0 tonytemplates.com, 0 -toobug.net, 0 toontownrewritten.com, 0 -toorot.com, 0 -tootoo.cn, 0 -top54.city, 0 -top55.info, 0 top-channel.tv, 0 -topchrono.biz, 0 -topease.net, 0 -tophouse.ru, 0 -topschool.com, 0 -top.st, 0 -top-technologies.ru, 0 -topthink.com, 0 -topzone.pw, 0 -torah-box.com, 0 -torchystacos.com, 0 -toread.com.cn, 0 -torhub.net, 0 -torquato.de, 0 torrentbit.net, 0 -torrentsafe.com, 0 -torrentsgame.net, 0 -torrent-tv.in.ua, 0 torun.pl, 0 -tosunkaya.com, 0 -totaltele.com, 0 totheglory.im, 0 totogaming.am, 0 -touki.ru, 0 -touricoholidays.com, 0 tourismthailand.org, 0 tourister.ru, 0 -toutapprendre.com, 0 -toutemonannee.com, 0 -toutrix.com, 0 -touzi.com, 0 -toysperiod.com, 0 -tpg.ua, 0 -tplaboratorioquimico.com, 0 -tplink.com, 0 -tpprf.ru, 0 tproger.ru, 0 tpu.ru, 0 tq.cn, 0 -trabzonspor.org.tr, 0 trackingmore.com, 0 -trackmanic.com, 0 -trackofthewolf.com, 0 -trackpadmagic.com, 0 -trackvia.com, 0 -tractorpoint.com, 0 -trade-groups.ru, 0 -trademachines.com, 0 -trademachines.de, 0 trademe.co.nz, 0 -tradesystemjp.com, 0 -traditio.wiki, 0 -tradzone.net, 0 -trafficrouter.io, 0 -traffic.ru, 0 -trafficstore.com, 0 -traficantes.net, 0 trainpix.org, 0 -tramitesadistancia.gob.ar, 0 -transantiago.cl, 0 -transformaniatime.com, 0 -transindex.ro, 0 transmissionbt.com, 0 -trantect.com, 0 travelata.ru, 0 travelbook.de, 0 travelclub.es, 0 -travelcodex.com, 0 -treasury.govt.nz, 0 -trecnutrition.com, 0 -treds.co.uk, 0 -trendsideas.com, 0 -treolan.ru, 0 -tresorit.com, 0 tretyakovgallery.ru, 0 -trian.net, 0 -triblio.com, 0 tribuna.com, 0 -trifork.com, 0 -trinity-parts.ru, 0 -trioo.com, 0 -tripsecrets.ru, 0 -tripsta.com, 0 -tripsta.net, 0 -trishara.com, 0 -triumf.ca, 0 -triya.ru, 0 trojmiasto.pl, 0 -trollhattan.se, 0 -trovamoda.com, 0 -trovoacademy.com, 0 -trt16.jus.br, 0 -trt22.jus.br, 0 -trt23.jus.br, 0 -trt24.jus.br, 0 trtworld.com, 0 truba.com, 0 trucnet.com, 0 trud.bg, 0 -trueconf.com, 0 -true.io, 0 -trus-tech.com, 0 -trustie.net, 0 -trustpay.eu, 0 -trustutn.org, 0 tsargrad.tv, 0 -tsb.kz, 0 -ts-coach.com, 0 -tse.moe, 0 -tsemporium.com, 0 -tsf.org.tr, 0 tsinghua.edu.cn, 0 ts.kg, 0 -tsn.at, 0 tsn.ua, 0 -tspu.ru, 0 -tssgroup.sk, 0 -tsu.ac.th, 0 -tsu.edu, 0 -tthd.org, 0 -ttkd.cn, 0 ttkdex.com, 0 ttlsa.com, 0 ttl.tj, 0 tts.lt, 0 -ttwanda.com, 0 -ttz.com, 0 -ttzx.tv, 0 -tuan800.com, 0 -tuanche.com, 0 -tuars.com, 0 tubeadvertising.eu, 0 -tuchuang.org, 0 -tucson-club.ru, 0 tudelft.nl, 0 tudou.com, 0 tugraz.at, 0 -tuigirl.com, 0 -tuit.uz, 0 tuliu.com, 0 -tulotero.es, 0 -tuluoluo.com, 0 tunestotube.com, 0 -tuningblog.eu, 0 tunisietelecom.tn, 0 -tuntron.com, 0 -tuputech.com, 0 -turbojetbooking.com, 0 -turiba.lv, 0 -turkegitimsen.org.tr, 0 turkiyeburslari.gov.tr, 0 turkiye.gov.tr, 0 -turris.cz, 0 -tursvodka.ru, 0 -tus.si, 0 tusur.ru, 0 tutanota.de, 0 -tuttoformazione.com, 0 -tutuapp.com, 0 tutuapp.vip, 0 tuv.com, 0 -tuxedocomputers.com, 0 -tv189.com, 0 -tv5.zp.ua, 0 -tvalacarta.info, 0 -tvcollect.me, 0 -tvcom.cz, 0 -tvdom.tv, 0 -tvfeed.in, 0 -tvk6.ru, 0 -tv-nasha.ru, 0 tvoe.ru, 0 tvpublica.com.ar, 0 -tvservice.org, 0 tw1.ru, 0 -twbbs.org, 0 -twc.edu.hk, 0 tweepsmap.com, 0 -twgogo.org, 0 twicopy.org, 0 -twomini.com, 0 -twotiger.com, 0 -twrx.ru, 0 twzoa.info, 0 -txiaohe.cn, 0 tyc.edu.tw, 0 -tychy.pl, 0 -typecho.me, 0 -typhon.net, 0 typo3.org, 0 -tysa.ru, 0 -tzbao.com, 0 -tzit.cn, 0 -tzqby.xyz, 0 -tzrl.com, 0 -tzyee.com, 0 uabc.mx, 0 uade.edu.ar, 0 -ua.gov.tr, 0 uakino.net, 0 -ualinux.com, 0 -uapa.ru, 0 -uatoday.tv, 0 -ubejournal.biz, 0 -uberchord.com, 0 -uberspace.de, 0 ubiobio.cl, 0 -ub.ua, 0 ubuntukylin.com, 0 -uc.ac.id, 0 -ucasal.edu.ar, 0 uc.cl, 0 uc.edu, 0 uce.edu.ec, 0 -uchat.co.kr, 0 uchile.cl, 0 -uchil.net, 0 -uchiuroki.ru, 0 uci.cu, 0 -uclv.cu, 0 uclv.edu.cu, 0 ucoin.net, 0 ucol.mx, 0 ucoz.com, 0 ucoz.net, 0 ucoz.ru, 0 -ucpaas.com, 0 uc.pt, 0 ucptt.com, 0 udg.edu, 0 -udmprof.ru, 0 uedsc.com, 0 ueh.edu.vn, 0 uel.br, 0 -uem.mz, 0 -ueq.com, 0 -uer.ca, 0 uerj.br, 0 -uesocc.edu.sv, 0 uestc.edu.cn, 0 -ueuo.com, 0 ufa1.ru, 0 ufanet.ru, 0 -ufh.com.cn, 0 -ufight.gr, 0 ufmg.br, 0 ufms.br, 0 ufmt.br, 0 ufpb.br, 0 -ufrr.br, 0 ufs.br, 0 ufscar.br, 0 ufs-online.ru, 0 @@ -8341,1168 +2490,367 @@ ufvjm.edu.br, 0 ugirls.com, 0 ugm.ac.id, 0 -ugmk-telecom.ru, 0 -uhdog.com, 0 -ui001.com, 0 uji.es, 0 ujs.edu.cn, 0 -ukdefencejournal.org.uk, 0 -ukim.edu.mk, 0 -ukim.mk, 0 u-kor.cn, 0 -ukravto.ua, 0 -ukrmedia.center, 0 -ukrstat.gov.ua, 0 -ukrtelecom.ua, 0 uk.to, 0 -ulanovka.ru, 0 ulbra.br, 0 -ulivingstyle.com, 0 ulpgc.es, 0 -ultiboss.jp, 0 -ultimate-community.de, 0 -ultradox.com, 0 -ulugov.uz, 0 umail.uz, 0 umantis.com, 0 -umbro.com.br, 0 -umc.br, 0 umich.mx, 0 uminho.pt, 0 -umnieroditeli.ru, 0 umu.se, 0 -um.wroc.pl, 0 -unacar.mx, 0 unam.edu.ar, 0 unam.mx, 0 unand.ac.id, 0 -unas.bg, 0 -unas.eu, 0 unas.hu, 0 -unasus.gov.br, 0 -unblockall.com, 0 unca.edu, 0 -unctv.org, 0 undiksha.ac.id, 0 undip.ac.id, 0 -unecon.ru, 0 uned.es, 0 unesp.br, 0 -unet.by, 0 unet.edu.ve, 0 -unexplainablestore.com, 0 -unian.info, 0 unian.net, 0 unian.ua, 0 -uniara.com.br, 0 uni-augsburg.de, 0 uniba.it, 0 uniba.sk, 0 unic.ac.cy, 0 unicamp.br, 0 -unic.edu.ru, 0 -unicef-irc.org, 0 unicen.edu.ar, 0 -uniconf.ru, 0 unideb.hu, 0 -uni.edu.ni, 0 -unifemm.edu.br, 0 -unifenas.br, 0 unifesp.br, 0 -uniforminsignia.org, 0 uni-frankfurt.de, 0 uni-freiburg.de, 0 uni-heidelberg.de, 0 -unihost.com, 0 uni-kassel.de, 0 unilever.com, 0 uni-lj.si, 0 -unimagdalena.edu.co, 0 uni-mainz.de, 0 -unimal.ac.id, 0 -uni-mb.si, 0 -unimedrio.com.br, 0 -unimontes.br, 0 uni-mysore.ac.in, 0 unionesarda.it, 0 unionpay.com, 0 -unionpayintl.com, 0 -unipdu.ac.id, 0 -unipus.cn, 0 unisi.it, 0 uni-sofia.bg, 0 unitbv.ro, 0 -unitconverterpro.com, 0 -unitedbank.cn, 0 -united-host.de, 0 -unitins.br, 0 -unium.ru, 0 -univadis.de, 0 -universal.se, 0 universitego.com, 0 univertv.org, 0 -uniview.com, 0 -univille.edu.br, 0 -unixstorm.org, 0 -uniyar.ac.ru, 0 unlp.edu.ar, 0 unoentrerios.com.ar, 0 -unq.edu.ar, 0 unr.edu.ar, 0 -untan.ac.id, 0 -unternehmertum.de, 0 -unybook.com, 0 unyoo.com, 0 -unyp.cz, 0 uoc.gr, 0 -uooc.online, 0 uop.edu.jo, 0 -uoradea.ro, 0 -upaep.mx, 0 upaiyun.com, 0 upb.edu.co, 0 upc.edu.cn, 0 -upchina.com, 0 -upendo.tv, 0 -upessencia.com.br, 0 -upla.cl, 0 -upl.uz, 0 -upp.edu.mx, 0 -uprav.ru, 0 uprm.edu, 0 -upr.si, 0 -upsrv.ru, 0 -upward.org, 0 upxin.net, 0 uqer.io, 0 uralairlines.ru, 0 -uralplit.ru, 0 -uralpolit.ru, 0 -urban3p.ru, 0 -urbanterror.info, 0 -urbaonline.com, 0 -urc.ac.ru, 0 urfu.ru, 0 -url.ph, 0 url.tw, 0 -urmia.ir, 0 -urss.ru, 0 -usabilitytools.com, 0 usach.cl, 0 -usaedu.net, 0 usc.edu, 0 -useed.fr, 0 -usefulblogging.com, 0 usembassy.gov, 0 -usens.com, 0 -userbase.be, 0 -usermd.net, 0 -users.pub, 0 -useso.com, 0 -usfleettracking.com, 0 -us.jobs, 0 uslugi.mosreg.ru, 0 -uspard.com, 0 usp.br, 0 ustc.edu.cn, 0 -ustclug.org, 0 us.to, 0 u-strasbg.fr, 0 usu.edu, 0 -usuhs.edu, 0 -usurt.ru, 0 -utaipei.edu.tw, 0 uta-net.com, 0 -utazom.com, 0 -utazzitthon.hu, 0 -utgjiu.ro, 0 -utmn.ru, 0 utn.edu.ar, 0 utorrent.info, 0 -utorrent-russian.com, 0 -utouu.com, 0 -utp.br, 0 -utp.edu.br, 0 -utsource.net, 0 utwente.nl, 0 uulian.com, 0 uuoobe.kr, 0 -uuu.com.tw, 0 -uvanet.br, 0 -uv.cl, 0 -uvm.cl, 0 uwec.edu, 0 -uwewe.com, 0 uwow.biz, 0 -uxuejiaoyu.com, 0 -uybor.uz, 0 -uyun.cn, 0 -uzbekenergo.uz, 0 -uzcard.uz, 0 uzer.me, 0 uzex.uz, 0 -uzfor.net, 0 uzh.ch, 0 -uzinfocom.uz, 0 -uztelecom.uz, 0 v1.cn, 0 -v1game.cn, 0 v1.ru, 0 -v5cg.com, 0 -v5kf.com, 0 -vaecn.com, 0 -vahdeals.com, 0 -vainahtelecom.ru, 0 valetudo.ru, 0 -valsun.cn, 0 -valuehost.ru, 0 -vanfun.com, 0 -vapez.ro, 0 -vapteke.ru, 0 -vardex.ru, 0 -variflight.com, 0 -varus.ua, 0 -vasco.com, 0 vashgorod.ru, 0 -vavato.com, 0 -vaz.ru, 0 -vbg.de, 0 -vbill.cn, 0 -vc-enable.co.uk, 0 -vcfboard.com, 0 -vclhk.com, 0 vc.ru, 0 -veekn.com, 0 -veeseo.com, 0 -veestro.com, 0 -vegeweb.org, 0 -vehicle-rent.com, 0 -velex.ir, 0 velosite.ru, 0 -vendor.kz, 0 -venganzasdelpasado.com.ar, 0 -vent-al.ru, 0 vente-privee.com, 0 -venturesafrica.com, 0 -verbraucherschutz.de, 0 -verifiedvolunteers.com, 0 -verybank.ru, 0 verycloud.cn, 0 verygames.net, 0 -veschichka.com, 0 vestacp.com, 0 vesti.kz, 0 -vestum.ru, 0 -veyseloglu.az, 0 vfl.ru, 0 vhall.com, 0 vhostgo.com, 0 -via.de, 0 -viaprinto.de, 0 -vibus.de, 0 vic.edu.au, 0 vic.gov.au, 0 -vicp.cc, 0 -vicp.io, 0 -vicp.net, 0 videoboom.cc, 0 -videochaty.ru, 0 videoforme.ru, 0 -videogamesawesome.com, 0 -videoigr.net, 0 -videojj.com, 0 -video-nvidia.com, 0 -videoplusfrance.com, 0 -videoregforum.ru, 0 -videoseed.ru, 0 videosmile.ru, 0 -videostir.com, 0 videvo.net, 0 -vidido.ua, 0 vidown.cn, 0 -vidproxy.com, 0 -vidri.com.sv, 0 -vid.ru, 0 -vietget.net, 0 -viewdns.net, 0 -viewnetcam.com, 0 -vigodnee.ru, 0 vikingco.com, 0 vikingrivercruises.com, 0 -vilavi.com, 0 -vilaviniteca.es, 0 -villacarte.com, 0 -villamariavivo.com, 0 -vilniausenergija.lt, 0 -vimentis.ch, 0 -vimp.com, 0 -vipautoliker.com, 0 -vipbaiduyun.com, 0 -vipc.cn, 0 -vipedp2.com, 0 -vipfreepremium.com, 0 -vipgaming.ru, 0 vipip.ru, 0 -vip-member.net, 0 -vipmro.net, 0 -vipreading.com, 0 vipshop.com, 0 -vip-weapon.ru, 0 -vip-wifi.com, 0 -vipwifi.com, 0 -vira20.ir, 0 -viral-alert.com, 0 viralsection.com, 0 virink.com, 0 -virten.net, 0 -virt-manager.org, 0 -virtual-college.co.uk, 0 -virtuallyboring.com, 0 virtualsoccer.ru, 0 virtuemart.net, 0 -virtuosgames.com, 0 -virtuozzo.com, 0 -vision.com.tw, 0 -visitporno.net, 0 vistula.edu.pl, 0 -visual3d.cn, 0 -visualead.com, 0 -visualwatermark.com, 0 -vitacom.ro, 0 vitalia.cz, 0 -vitaminking.com.au, 0 -vitek.ru, 0 -vivasexe.com, 0 -vivendi.com, 0 -viventor.com, 0 -vivo.xyz, 0 vizio.com, 0 -vizzlo.com, 0 -vkfake.ru, 0 -vkjust.com, 0 vko.cn, 0 -vkonline.ru, 0 -vladislav.ua, 0 vladmama.ru, 0 -vluki.ru, 0 -vnc.biz, 0 -vnebo.mobi, 0 vnet.cn, 0 -vnmu.edu.ua, 0 voc.com.cn, 0 vodafone.it, 0 -vodjk.com, 0 -vodokanal.kiev.ua, 0 voffka.com, 0 -vogu35.ru, 0 vogue.ru, 0 -voicecloud.cn, 0 -voiceofgreaterassam.com, 0 -volgadmin.ru, 0 volganet.ru, 0 -volksbuehne-berlin.de, 0 volkswagen.de, 0 -volnistye.ru, 0 volnorez.com, 0 vonvon.me, 0 -voodoo.com, 0 -voodoo.community, 0 -voprosoff.net, 0 voriginale.tv, 0 -vorlagen.de, 0 -vorwaerts.de, 0 vorwerk.com, 0 -vorwerk.co.uk, 0 vorwerk.de, 0 -vorwerk.es, 0 -vorwerk.fr, 0 -vorwerk.it, 0 -vostok.ru, 0 -votobo.com, 0 -votonia.ru, 0 -votrube.ru, 0 -voxbone.com, 0 -voxygen.fr, 0 -voyhoy.com, 0 -voz48.xyz, 0 -vpndaquan.net.cn, 0 -vpnme.me, 0 -vpnxx.net, 0 -vpphoangha.vn, 0 -vprka.com, 0 -vps-10.com, 0 -vpsgroups.com, 0 -vpsps.com, 0 -vpsville.ru, 0 -vqs.com, 0 -vrach42.ru, 0 vrheads.com, 0 vrn.ru, 0 -vrsa.lt, 0 -vsactivity.com, 0 -vsadu.ru, 0 -vsbt174.ru, 0 vse.cz, 0 -vsei.ua, 0 -vsekroham.ru, 0 -vsemayki.com, 0 -vserpg.ru, 0 -vsestudent.cz, 0 vsopen.ru, 0 vso-software.fr, 0 -vsu.by, 0 vsu.ru, 0 -vtambove.ru, 0 -vtb.az, 0 -vtech.com, 0 -vtechda.com, 0 vt.edu, 0 -vten.ru, 0 -vtrhome.net, 0 -vtrus.net, 0 -vtt.ru, 0 -vucke.sk, 0 -vuze.camera, 0 vvic.com, 0 -vvo.aero, 0 vvsu.ru, 0 vwr.com, 0 -vxianchang.cn, 0 -w3template.ir, 0 w69b.com, 0 wacai.com, 0 -wacaiyun.com, 0 -wacom.pl, 0 -wadmz.com, 0 wa.edu.au, 0 -wagner-group.com, 0 -wahaha.com.cn, 0 waikato.ac.nz, 0 waiqin365.com, 0 -waitalone.cn, 0 waitsun.com, 0 -wakku.to, 0 -walatao.com, 0 -wallbox.ru, 0 -wallegro.ru, 0 -wallpai.com, 0 -wallpaperfusion.com, 0 -wallpapers.pub, 0 -wan5d.com, 0 -wanadev.fr, 0 -wanchongchong.com, 0 -wanderland.ch, 0 wandoujia.com, 0 wanfangdata.com.cn, 0 wang1314.com, 0 -wangfujing.com, 0 -wangfz.com, 0 -wang-guanjia.com, 0 -wanghailin.cn, 0 -wangye.org, 0 -wanhu.com.cn, 0 wankr.com.cn, 0 wanmei.com, 0 -wanxiaohong.cn, 0 -wanzi.tv, 0 -waqu.com, 0 warez-bb.org, 0 warlegend.net, 0 -warmen.cc, 0 -warspear-online.com, 0 -wartapost.com, 0 warwick.ac.uk, 0 -wasai.org, 0 -wasu.com, 0 -watches.ru, 0 watchrecon.com, 0 watsons.com.tw, 0 -watsons.ua, 0 -wave.io, 0 -waylens.com, 0 -waysofhistory.com, 0 -wazizu.com, 0 -wb-community.com, 0 -wb-fernstudium.de, 0 wbiao.cn, 0 -wciu.com, 0 -wdw88.com, 0 wdwd.com, 0 we7.cc, 0 wealthnavi.com, 0 -weaver.com.cn, 0 -webalfa.net, 0 -webanetlabs.net, 0 -webanketa.com, 0 webartex.ru, 0 webassign.com, 0 -webbankir.com, 0 webb-site.com, 0 -webcamfuck.me, 0 webceo.com, 0 -webdesign.org, 0 webd.pl, 0 -webeden.co.uk, 0 -webei.cn, 0 -webernetz.net, 0 -webfoss.com, 0 -webfungame.com, 0 -webhop.me, 0 -webhop.net, 0 webhostbox.net, 0 -webid-gateway.de, 0 -webim.ru, 0 webinar.fm, 0 -webmaster.kitchen, 0 -weborama.com, 0 -weborama.fr, 0 -webpass.net, 0 -webplatform.org, 0 -webpro.co.jp, 0 webptt.com, 0 -web-republic.de, 0 -we.bs, 0 -webseiten.cc, 0 websequencediagrams.com, 0 -website.tk, 0 -webspacecontrol.com, 0 -webstarterz.com, 0 -webtemp.no, 0 -webterren.com, 0 -web-tinker.com, 0 -webtm.ru, 0 webtransfer.com, 0 -webtropia.com, 0 webuntis.com, 0 -weclick.ir, 0 -weddywood.ru, 0 wednet.edu, 0 wedos.com, 0 wedos.net, 0 weekdone.com, 0 weibo.cn, 0 weiboyi.com, 0 -weicps.cn, 0 weijuju.com, 0 -weimi.cc, 0 -weiphone.com, 0 weiphone.net, 0 -weismarkets.com, 0 -weitaming.com, 0 -wek.ru, 0 -welcomechile.com, 0 -welfulloutdoors.com, 0 -welian.com, 0 -wellgames.com, 0 -wellingtoncdsb.ca, 0 -welovedance.ru, 0 -wenidc.com, 0 wenjuan.com, 0 wenjuan.net, 0 wenming.cn, 0 -westcall.net, 0 -westend.hu, 0 -westhome.spb.ru, 0 -westland.ru, 0 -westsib.ru, 0 -westwin.com, 0 -wetu.com, 0 -weyes.cn, 0 wfu.edu, 0 -wg263.com, 0 -wghostk.com, 0 -wh1.su, 0 -whaley.cn, 0 -whaller.com, 0 -whatpulse.org, 0 -whhd.gov.cn, 0 whnet.edu.cn, 0 -wholikesu.net, 0 whu.edu.cn, 0 -wiaa.com, 0 -wiair.com, 0 -wicp.net, 0 -wicwuzhen.cn, 0 -wide.ad.jp, 0 -widoobiz.com, 0 -widuu.com, 0 -wifispc.com, 0 -wigwam.com, 0 -wiidatabase.de, 0 -wik-end.com, 0 wiki8.com, 0 wikiart.org, 0 wikimart.ru, 0 -wikin.cn, 0 wikium.ru, 0 wildo.ru, 0 williamlong.info, 0 -wincomi.com, 0 windowsazure.cn, 0 windowscentral.com, 0 windowsforum.kr, 0 windscribe.com, 0 -winesou.com, 0 -winestreet.ru, 0 -wingoads.com, 0 -wingtech.com, 0 -winhong.com, 0 -winni.in, 0 -winployee.com, 0 wintalent.cn, 0 -winxuan.com, 0 -winyer.cn, 0 -wiscom.com.cn, 0 -wisconsinhistory.org, 0 -wisemedia.cn, 0 -wisenjoy.com, 0 -wishmindr.com, 0 wizardofodds.com, 0 -wizardofvegas.com, 0 -wizzley.com, 0 -wjdaily.com, 0 -wkbins.com, 0 -wkinfo.com.cn, 0 wko.at, 0 -wktk.so, 0 -wkzuche.com, 0 -wlwx.cn, 0 -wmasteru.org, 0 -wmv-dresden.de, 0 -wnmu.edu, 0 -wogibtswas.de, 0 -woheni.de, 0 -wolf.ua, 0 -wolterskluwer.de, 0 womanadvice.ru, 0 woman.ru, 0 -womenonweb.org, 0 wondershare.cn, 0 -wonsterscript.com, 0 woodgears.ca, 0 -wooplus.com, 0 -wordassociations.net, 0 -workaround.org, 0 -workingmother.com, 0 workout-italia.it, 0 -worksection.com, 0 -work-way.com, 0 worldcubeassociation.org, 0 -worldoftrucks.ru, 0 -worldskills.ru, 0 -worldtravelserver.com, 0 -woshidai.com, 0 wosign.com, 0 -wo.tc, 0 -wotcase.ru, 0 -wowdsgn.com, 0 wowgirls.com, 0 wow-impulse.net, 0 -wowtrack.org, 0 -wowzonegc.ir, 0 -woyun.la, 0 -wpcp.org, 0 -wpdesigner.ir, 0 wpmayor.com, 0 -wpscdn.cn, 0 wps.cn, 0 -wp-statistics.com, 0 -wpweixin.net, 0 wrealu24.pl, 0 -wrestling-infos.de, 0 wroclaw.pl, 0 wsgf.org, 0 wsgjp.com.cn, 0 -wsgvet.com, 0 -wsloan.com, 0 -wsms.ru, 0 -wstvb.com, 0 -wtigga.com, 0 -wtu.edu.cn, 0 -wuage.com, 0 -wumart.com, 0 -wuminhao.com, 0 -wunschimmo.de, 0 -wusa5.com, 0 -wust.edu.cn, 0 -wusunyinyue.cn, 0 -wuyatv.com, 0 -wvo-dbg.de, 0 www.chita.ru, 0 -www.gov.lk, 0 www.uz, 0 -wxchina.com, 0 -wxdm.net, 0 -wxfenxiao.com, 0 -wxliu.com, 0 -wxrrd.com, 0 -wxwgood.com, 0 -wykxsw.com, 0 -x431.com, 0 x4jdm.com, 0 -x5aa.com, 0 -x5.ru, 0 -x64dbg.com, 0 -xaau.edu.cn, 0 -xacbank.com, 0 -xaecong.com, 0 -xap.com, 0 -xarakiri.ru, 0 -xbls.ninja, 0 -xbmc-kodi.cz, 0 -xbpmo.com, 0 -xchange.cc, 0 xcloudgame.com, 0 xd.com, 0 xdf.cn, 0 xdjd.cn, 0 -xenderdownloads.com, 0 -xenforo.rocks, 0 -xenos.org, 0 xfplay.com, 0 -xfsub.com, 0 xgimi.com, 0 -xgm.guru, 0 -xhu.edu.cn, 0 xiamenair.com, 0 xiangha.com, 0 -xianyugame.com, 0 xiaodao.la, 0 xiaoji001.com, 0 -xiaokakeji.com, 0 xiaokaxiu.com, 0 xiaomishu.com, 0 -xiaoyaoji.com.cn, 0 -xiaoying.tv, 0 xiaozhu.com, 0 -xiaoz.me, 0 -xiashu.cc, 0 -xiazai3.net, 0 -xiazaidown.com, 0 xici.net, 0 -xicp.net, 0 -xidorn.com, 0 ximalaya.com, 0 xincheping.com, 0 xin.com, 0 xineurope.com, 0 xingk.cc, 0 -xingshulin.com, 0 -xingyun.net, 0 -xingzikeji.com, 0 -xinhua08.com, 0 -xinhuamed.com.cn, 0 xinhuanet.com, 0 -xinhua.org, 0 -xinit.ru, 0 -xiniugushi.com, 0 xinmin.cn, 0 xinqixi.com, 0 -xinxindai.com, 0 xiph.org, 0 xitieba.com, 0 xiu8.com, 0 xiu.com, 0 xixi123.com, 0 xizi.com, 0 -xjnu.edu.cn, 0 xjtlu.edu.cn, 0 xjtu.edu.cn, 0 -xju.edu.cn, 0 -xjy.cn, 0 xkb.com.cn, 0 xmcimg.com, 0 xmeye.net, 0 -xmisp.com, 0 -xmmandarinonline.com, 0 -xm-n-tax.gov.cn, 0 -xmp.net, 0 xmt.cn, 0 xmusik.me, 0 -xmyuzhou.com.cn, 0 -xn--1-btbl6aqcj8hc.xn--p1ai, 0 -xn--41a.ws, 0 -xn--80aaaac8algcbgbck3fl0q.xn--p1ai, 0 -xn--80ahclcbajtrv5ae6c.xn--p1ai, 0 -xn----8sbbilafpyxcf8a.xn--p1ai, 0 -xn--90agrrk8e.xn--p1ai, 0 -xn--c1afjenhpy1e1a.xn--p1ai, 0 xn--c1arjr.xn--p1ai, 0 -xn----dtbofgvdd5ah.xn--p1ai, 0 -xn--e1agfw6a0bt.xn--p1ai, 0 -xn--f1ae4a2b.xn--p1ai, 0 xn--i2ru8q2qg.com, 0 xopom.com, 0 -xosobinhduong.com.vn, 0 -xpg.com.br, 0 -xpir.ru, 0 -xquartz.org, 0 xrea.com, 0 xs4all.nl, 0 xsph.ru, 0 -xssec.org, 0 xsteach.com, 0 -xtbg.ac.cn, 0 xtcrm.com, 0 -xtern.ru, 0 xthor.bz, 0 -xtion.net, 0 xtrade.com, 0 -xuanwo.org, 0 -xubiji.com, 0 xueda.com, 0 -xujc.com, 0 xunjiepdf.com, 0 -xunleiyy.com, 0 xunyou.com, 0 -xvid.com, 0 -xvideoslive.com, 0 -xweb.cn, 0 -xwsd.com, 0 -xxshe.com, 0 -xxt.cn, 0 -xxx3tube.com, 0 xyaz.cn, 0 xydeyou.com, 0 -xyfunds.com.cn, 0 -xyiege.com, 0 -xyu.tv, 0 -xyy001.com, 0 -xyzq.com.cn, 0 -xzmc.edu.cn, 0 xzn.ir, 0 y3600.com, 0 yablyk.com, 0 -yabumi.cc, 0 -yachtbooker.com, 0 -yachtingmagazine.com, 0 -yagla.ru, 0 -yaguo.ru, 0 yahooeu.ru, 0 -yakitoriya.ru, 0 -yalova.edu.tr, 0 -yamaha-motor.co.th, 0 -yamobi.ru, 0 -yanfabu.com, 0 -yangshitianqi.com, 0 -yangtuner.com, 0 -yangzhou.gov.cn, 0 -yanke.info, 0 -yanue.net, 0 -yaociyuan.com, 0 -yaostrov.ru, 0 -yaou369.com, 0 -yaozh.com, 0 -yat-net.com, 0 yatong.info, 0 -yatta.de, 0 -yavix.ru, 0 -yavuz-selim.com, 0 -yazuo.com, 0 -ybren.com, 0 -ybu.edu.cn, 0 yburlan.ru, 0 -ycgame.com, 0 -ydniu.com, 0 -ydybt.net, 0 yeahka.com, 0 -yealink.com, 0 -yeastar.com, 0 -yeezon.com, 0 -yeezyboost750sale.net, 0 -yerevan.am, 0 -yesilgazete.org, 0 -yesmywine.com, 0 yeti.com, 0 -yfdxs.com, 0 ygopro.co, 0 ygyhg.com, 0 -yht.co.jp, 0 -yibizi.com, 0 yicai.com, 0 -yiche.com, 0 -yidai.com, 0 -yidianda.com, 0 yifile.com, 0 -yigoonet.com, 0 yiguo.com, 0 -yihu.cn, 0 -yiiframework.com.ua, 0 -yimishiji.com, 0 yimu100.com, 0 -yingxiong.com, 0 yinhu.com, 0 yiqifa.com, 0 -yiqiniu.com, 0 -yiso.me, 0 -yit.com, 0 yithemes.com, 0 -yiyult.com, 0 yizhihongxing.com, 0 yjc.ir, 0 -yjsnpi.nu, 0 -ylc.edu.tw, 0 -ymg360.com, 0 -ynairport.com, 0 -yngou.com, 0 -yngs.gov.cn, 0 -ynjy.cn, 0 -ynnu.edu.cn, 0 -ynot.com, 0 ynu.edu.cn, 0 -yoga.com, 0 -yohotour.com, 0 yokogawa.com, 0 -yoncu.com, 0 -yongche.org, 0 -yonghui.cn, 0 -yongjinbao.com.cn, 0 yonyou.com, 0 -yooooo.us, 0 -yooread.com, 0 -yotuku.cn, 0 youdao.com, 0 -youdian.in, 0 yougou.com, 0 youhack.ru, 0 -youhaosuda.com, 0 -youhaovip.com, 0 -youhuashu.com, 0 youidraw.com, 0 youjizzlive.com, 0 -youkeshu.com, 0 youku.com, 0 -you-mp3.net, 0 -youngwriterssociety.com, 0 yourmechanic.com, 0 -your-pictionary.com, 0 your-server.de, 0 -yourtion.com, 0 -youscan.io, 0 -youss.co, 0 -youtubers.me, 0 -youwager.eu, 0 -youweather.com, 0 youxi.com, 0 youxiniao.com, 0 -youzhuan.com, 0 -yovole.com, 0 -yoya.com, 0 -yoyi.com.cn, 0 -yper.co, 0 ypmate.com, 0 -yq24.net, 0 ys137.com, 0 ys7.com, 0 ysepay.com, 0 ysu.edu.cn, 0 -ytdestek.com, 0 -ytvpn.net.cn, 0 yu0123456.com, 0 -yuanbao365.com, 0 yuanlai521.com, 0 yueing.org, 0 -yuewen.com, 0 -yugcontract.ua, 0 yugiohcardmarket.eu, 0 -yugiohgameonline.com.br, 0 yui-nya.com, 0 -yulong.com, 0 -yumama.com, 0 yunaq.com, 0 -yunbore.com, 0 yuncaijing.com, 0 -yundun.cn, 0 -yundun.com, 0 -yuneec.cn, 0 -yunhou.com, 0 -yunjiweidian.com, 0 yunpan.cn, 0 -yunserver.com, 0 -yunshanmeicai.com, 0 yuntech.edu.tw, 0 -yunyichong.com, 0 -yunyuejuan.net, 0 yunyy.cc, 0 yunzhijia.com, 0 -yusen-logistics.com, 0 yutong.com, 0 -yuuby.com, 0 -yuzhoutuofu.com, 0 -ywtywt.com, 0 yxlady.com, 0 -yy4480.org, 0 yy6080.org, 0 -z0download.com, 0 -z3news.com, 0 zaba.hr, 0 zabedu.ru, 0 -zakka.com.tw, 0 zakonyprolidi.cz, 0 -zakopane.pl, 0 -zampdsp.com, 0 -zaodula.com, 0 -zaoshu.io, 0 -zapable.com, 0 -zap-hosting.com, 0 -za.pl, 0 -zapster.ru, 0 zapto.org, 0 zarfund.com, 0 zarinp.al, 0 -zastavok.net, 0 -zatunen.com, 0 zaymer.ru, 0 -zaymiprosto.ru, 0 -zbgl.net, 0 zbj.com, 0 -zcmu.edu.cn, 0 -zczj.com, 0 zdfans.com, 0 -zdrav26.ru, 0 -zdrojak.cz, 0 -zdsoft.com, 0 -ze.am, 0 -zebraboss.com, 0 -zelenaya.net, 0 -zelluloza.ru, 0 zen.co.uk, 0 zenden.ru, 0 -zeneakademia.hu, 0 -zengram.ru, 0 zenhotels.com, 0 -zenitel.com, 0 zenmate.com, 0 -zenpage.cn, 0 -zentaizone.com, 0 -zephyrproject.org, 0 zepo.ir, 0 -zerobest.net, 0 -zfilm-hd.net, 0 -zggtxhw.com, 0 -zgpingshu.com, 0 -zh30.com, 0 -zhacker.net, 0 -zhanad.com, 0 zhangge.net, 0 -zhaodl.xyz, 0 zhaopin.com, 0 -zhaorannote.cn, 0 -zhaoshangdai.com, 0 zhaosuliao.com, 0 -zhbor.com, 0 zhcw.com, 0 zhe800.com, 0 zhenai.com, 0 -zhenfund.com, 0 zhengjie.com, 0 -zhihedongfang.com, 0 zhisheji.com, 0 zhitouwang.cn, 0 -zhiwei.li, 0 -zhiwo.com, 0 -zhizaoyun.com, 0 -zhiziyun.com, 0 -zhizuobiao.com, 0 -zhjtong.com, 0 -zhong5.cn, 0 zhongan.com, 0 -zhonganonline.com, 0 -zhongguowangshi.com, 0 -zhongye.net, 0 zhongziso.com, 0 -zhovner.com, 0 -zhuang.ba, 0 -zhuankezhijia.com, 0 -zhuanyejun.com, 0 -zhuatieba.com, 0 -zhubaoleyuan.com, 0 -zhujiwu.me, 0 zhuna.cn, 0 -zhushou001.com, 0 zhuwei.me, 0 -zhuzi.me, 0 zhyk.ru, 0 -zige.la, 0 -ziguangcn.com, 0 zik.ua, 0 -zilingo.com, 0 -zip-anime.xyz, 0 -zipbob.net, 0 -zip.ch, 0 -ziping.ir, 0 -zipy.co.il, 0 -zitian.cn, 0 ziyonet.uz, 0 ziyoufang.com, 0 ziyuanmao.com, 0 -zj.com, 0 -zjds.gov.cn, 0 -zjjt365.com, 0 -zjmax.com, 0 -zjport.gov.cn, 0 -zjsafety.gov.cn, 0 zju.edu.cn, 0 -zjuqsc.com, 0 zjut.edu.cn, 0 -zju.tools, 0 zjzwfw.gov.cn, 0 -zkteco.com, 0 zlavadna.sk, 0 -zlfund.cn, 0 -zlx3323.top, 0 -zm123.com, 0 -zmirrordemo.com, 0 zmodo.com, 0 -znaxyar.ru, 0 znds.com, 0 zntec.cn, 0 zodgame.us, 0 zol.com.cn, 0 -zomro.com, 0 -zonakz.net, 0 -zonazvuka.ru, 0 -zone-game.info, 0 -zoodshoor.com, 0 zoo.gr, 0 -zoomlion.com, 0 -zoomsquare.com, 0 -zoossoft.cn, 0 -zori.pt, 0 -zor.uz, 0 -z-payment.com, 0 zph.com.cn, 0 zqgame.com, 0 -zqu.edu.cn, 0 -zqzhibo.com, 0 -zryhyy.com.cn, 0 -zsedu.net, 0 -zs.gov.cn, 0 -zsnet.com, 0 -zt.com, 0 ztedevice.com, 0 ztgame.com, 0 -ztmao.com, 0 -ztm.poznan.pl, 0 -zuadr.com, 0 -zu.edu.ua, 0 -zugunder.com, 0 -zuimc.com, 0 -zun.com, 0 zupoec.com, 0 -zust.edu.cn, 0 -zveronline.ru, 0 -zxdl.pw, 0 -zx-pk.ru, 0 zxtsg.com, 0 -zycao.com, 0 -zyctd.com, 0 -zygames.com, 0 -zype.com, 0 -zyq108.com, 0 -zyxr.com, 0 -zz.vc, 0 -zzy.cn, 0 zzz.com.ua, 0 -zzz.sk, 0 %%
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc index f00777d..ad5f356 100644 --- a/net/spdy/spdy_network_transaction_unittest.cc +++ b/net/spdy/spdy_network_transaction_unittest.cc
@@ -3995,12 +3995,16 @@ helper.VerifyDataConsumed(); } -TEST_F(SpdyNetworkTransactionTest, GoAwayWithActiveStream) { +// Request should fail upon receiving a GOAWAY frame +// with Last-Stream-ID lower than the stream id corresponding to the request +// and with error code other than NO_ERROR. +TEST_F(SpdyNetworkTransactionTest, FailOnGoAway) { SpdySerializedFrame req( spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); MockWrite writes[] = {CreateMockWrite(req, 0)}; - SpdySerializedFrame go_away(spdy_util_.ConstructSpdyGoAway()); + SpdySerializedFrame go_away( + spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_INTERNAL_ERROR, "")); MockRead reads[] = { CreateMockRead(go_away, 1), }; @@ -4008,12 +4012,48 @@ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, NetLogWithSource(), nullptr); - helper.AddData(&data); helper.RunToCompletion(&data); TransactionHelperResult out = helper.output(); EXPECT_THAT(out.rv, IsError(ERR_ABORTED)); } +// Request should be retried on a new connection upon receiving a GOAWAY frame +// with Last-Stream-ID lower than the stream id corresponding to the request +// and with error code NO_ERROR. +TEST_F(SpdyNetworkTransactionTest, RetryOnGoAway) { + NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, + NetLogWithSource(), nullptr); + + // First connection. + SpdySerializedFrame req( + spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); + MockWrite writes1[] = {CreateMockWrite(req, 0)}; + SpdySerializedFrame go_away( + spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_NO_ERROR, "")); + MockRead reads1[] = {CreateMockRead(go_away, 1)}; + SequencedSocketData data1(reads1, arraysize(reads1), writes1, + arraysize(writes1)); + helper.AddData(&data1); + + // Second connection. + MockWrite writes2[] = {CreateMockWrite(req, 0)}; + SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); + SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); + MockRead reads2[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2), + MockRead(ASYNC, 0, 3)}; + SequencedSocketData data2(reads2, arraysize(reads2), writes2, + arraysize(writes2)); + helper.AddData(&data2); + + helper.RunPreTestSetup(); + helper.RunDefaultTest(); + + TransactionHelperResult out = helper.output(); + EXPECT_THAT(out.rv, IsOk()); + + helper.VerifyDataConsumed(); +} + // A server can gracefully shut down by sending a GOAWAY frame // with maximum last-stream-id value. // Transactions started before receiving such a GOAWAY frame should succeed,
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index da91d6ce..e104832 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc
@@ -2695,6 +2695,8 @@ if (error_code == ERROR_CODE_HTTP_1_1_REQUIRED) { // TODO(bnc): Record histogram with number of open streams capped at 50. DoDrainSession(ERR_HTTP_1_1_REQUIRED, "HTTP_1_1_REQUIRED for stream."); + } else if (error_code == ERROR_CODE_NO_ERROR) { + StartGoingAway(last_accepted_stream_id, ERR_SPDY_SERVER_REFUSED_STREAM); } else { StartGoingAway(last_accepted_stream_id, ERR_ABORTED); }
diff --git a/net/spdy/spdy_test_utils.cc b/net/spdy/spdy_test_utils.cc index 1a9fb2b..66806bf 100644 --- a/net/spdy/spdy_test_utils.cc +++ b/net/spdy/spdy_test_utils.cc
@@ -152,8 +152,7 @@ } void TestHeadersHandler::OnHeaderBlockEnd(size_t header_bytes_parsed) { - header_bytes_parsed_ = header_bytes_parsed; - compressed_header_bytes_parsed_ = 0; + OnHeaderBlockEnd(header_bytes_parsed, 0); } void TestHeadersHandler::OnHeaderBlockEnd(
diff --git a/remoting/host/linux/linux_me2me_host.py b/remoting/host/linux/linux_me2me_host.py index 4e511148..ead7be2 100755 --- a/remoting/host/linux/linux_me2me_host.py +++ b/remoting/host/linux/linux_me2me_host.py
@@ -32,6 +32,7 @@ import subprocess import sys import tempfile +import threading import time import uuid @@ -126,6 +127,9 @@ SHORT_BACKOFF_THRESHOLD = 5 MAX_LAUNCH_FAILURES = SHORT_BACKOFF_THRESHOLD + 10 +# Number of seconds to save session output to the log. +SESSION_OUTPUT_TIME_LIMIT_SECONDS = 30 + # Globals needed by the atexit cleanup() handler. g_desktops = [] g_host_hash = hashlib.md5(socket.gethostname()).hexdigest() @@ -353,6 +357,41 @@ config["private_key"] = self.private_key +class SessionOutputFilterThread(threading.Thread): + """Reads session log from a pipe and logs the output for amount of time + defined by SESSION_OUTPUT_TIME_LIMIT_SECONDS.""" + + def __init__(self, stream): + threading.Thread.__init__(self) + self.stream = stream + self.daemon = True + + def run(self): + started_time = time.time() + is_logging = True + while True: + try: + line = self.stream.readline(); + except IOError as e: + print("IOError when reading session output: ", e) + return + + if line == "": + # EOF reached. Just stop the thread. + return + + if not is_logging: + continue + + if time.time() - started_time >= SESSION_OUTPUT_TIME_LIMIT_SECONDS: + is_logging = False + print("Suppressing rest of the session output.") + sys.stdout.flush() + else: + print("Session output: %s" % line.strip("\n")) + sys.stdout.flush() + + class Desktop: """Manage a single virtual desktop""" @@ -677,8 +716,14 @@ logging.info("Launching X session: %s" % xsession_command) self.session_proc = subprocess.Popen(xsession_command, stdin=open(os.devnull, "r"), + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, cwd=HOME_DIR, env=self.child_env) + + output_filter_thread = SessionOutputFilterThread(self.session_proc.stdout) + output_filter_thread.start() + if not self.session_proc.pid: raise Exception("Could not start X session")
diff --git a/services/ui/ws/window_manager_client_unittest.cc b/services/ui/ws/window_manager_client_unittest.cc index 6b16f73..91187ed 100644 --- a/services/ui/ws/window_manager_client_unittest.cc +++ b/services/ui/ws/window_manager_client_unittest.cc
@@ -18,6 +18,7 @@ #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/mus/window_tree_client_delegate.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/test/mus/window_tree_client_private.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h" @@ -724,7 +725,7 @@ nullptr, false); second_client.ConnectViaWindowTreeFactory(); aura::WindowTreeHostMus window_tree_host_in_second_client( - &second_client, cc::FrameSinkId(1, 1)); + aura::CreateInitParamsForTopLevel(&second_client)); window_tree_host_in_second_client.InitHost(); window_tree_host_in_second_client.window()->Show(); ASSERT_TRUE(second_client.GetRoots().count( @@ -754,7 +755,7 @@ nullptr, false); second_client.ConnectViaWindowTreeFactory(); aura::WindowTreeHostMus window_tree_host_in_second_client( - &second_client, cc::FrameSinkId(1, 1)); + aura::CreateInitParamsForTopLevel(&second_client)); window_tree_host_in_second_client.InitHost(); window_tree_host_in_second_client.window()->Show(); aura::Window* second_client_child = NewVisibleWindow(
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 96f62c1..1e18c5e 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -21,7 +21,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -51,7 +51,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -80,7 +80,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -110,7 +110,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -139,7 +139,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -169,7 +169,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -198,7 +198,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -228,7 +228,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -257,7 +257,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -287,7 +287,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -316,7 +316,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -346,7 +346,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -375,7 +375,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -405,7 +405,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -434,7 +434,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -464,7 +464,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -493,7 +493,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -523,7 +523,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -552,7 +552,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -582,7 +582,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -611,7 +611,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -641,7 +641,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -670,7 +670,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -700,7 +700,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -729,7 +729,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -759,7 +759,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -788,7 +788,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -818,7 +818,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -847,7 +847,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -877,7 +877,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -906,7 +906,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -936,7 +936,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1083,7 +1083,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1113,7 +1113,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1142,7 +1142,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -1172,7 +1172,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -1201,7 +1201,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1231,7 +1231,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1260,7 +1260,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1290,7 +1290,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1319,7 +1319,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -1349,7 +1349,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -1378,7 +1378,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1408,7 +1408,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1437,7 +1437,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -1467,7 +1467,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -1496,7 +1496,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1526,7 +1526,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -1555,7 +1555,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -1585,7 +1585,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -1614,7 +1614,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -1644,7 +1644,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -1673,7 +1673,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1703,7 +1703,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1732,7 +1732,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1762,7 +1762,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -1791,7 +1791,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -1821,7 +1821,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -1850,7 +1850,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -1880,7 +1880,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -1909,7 +1909,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -1939,7 +1939,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -1968,7 +1968,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -1998,7 +1998,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -2027,7 +2027,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2057,7 +2057,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2086,7 +2086,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -2116,7 +2116,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -2204,7 +2204,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -2234,7 +2234,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -2263,7 +2263,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -2293,7 +2293,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -2322,7 +2322,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -2352,7 +2352,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -2381,7 +2381,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -2411,7 +2411,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -2440,7 +2440,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -2470,7 +2470,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -2499,7 +2499,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -2529,7 +2529,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -2558,7 +2558,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -2588,7 +2588,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -2617,7 +2617,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2647,7 +2647,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2676,7 +2676,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -2706,7 +2706,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -2735,7 +2735,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2765,7 +2765,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2853,7 +2853,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2883,7 +2883,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -2912,7 +2912,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -2942,7 +2942,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -2971,7 +2971,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -3001,7 +3001,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -3089,7 +3089,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -3119,7 +3119,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -3148,7 +3148,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -3178,7 +3178,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -3207,7 +3207,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -3237,7 +3237,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -3266,7 +3266,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -3296,7 +3296,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -3325,7 +3325,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -3355,7 +3355,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -3384,7 +3384,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -3414,7 +3414,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -3443,7 +3443,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -3473,7 +3473,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -3502,7 +3502,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -3532,7 +3532,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -3561,7 +3561,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -3591,7 +3591,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -3620,7 +3620,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -3650,7 +3650,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -3679,7 +3679,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -3709,7 +3709,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -3738,7 +3738,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -3768,7 +3768,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -3797,7 +3797,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -3827,7 +3827,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -3915,7 +3915,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -3945,7 +3945,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -3974,7 +3974,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -4004,7 +4004,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -4033,7 +4033,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -4063,7 +4063,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -4092,7 +4092,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -4122,7 +4122,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -4151,7 +4151,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4181,7 +4181,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4210,7 +4210,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -4240,7 +4240,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -4269,7 +4269,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4299,7 +4299,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4328,7 +4328,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -4358,7 +4358,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -4387,7 +4387,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -4417,7 +4417,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -4446,7 +4446,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -4476,7 +4476,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -4505,7 +4505,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -4535,7 +4535,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -4564,7 +4564,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -4594,7 +4594,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -4623,7 +4623,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4653,7 +4653,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4682,7 +4682,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -4712,7 +4712,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -4741,7 +4741,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -4771,7 +4771,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -4800,7 +4800,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -4829,7 +4829,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -4859,7 +4859,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -4888,7 +4888,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4918,7 +4918,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -4947,7 +4947,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -4977,7 +4977,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -5065,7 +5065,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -5095,7 +5095,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -5124,7 +5124,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5154,7 +5154,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5183,7 +5183,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -5213,7 +5213,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -5242,7 +5242,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5272,7 +5272,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5301,7 +5301,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -5331,7 +5331,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -5360,7 +5360,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5390,7 +5390,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5419,7 +5419,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5449,7 +5449,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5478,7 +5478,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -5508,7 +5508,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -5537,7 +5537,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5567,7 +5567,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5596,7 +5596,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5626,7 +5626,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5655,7 +5655,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -5685,7 +5685,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -5714,7 +5714,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -5744,7 +5744,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -5773,7 +5773,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5803,7 +5803,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -5832,7 +5832,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -5862,7 +5862,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -5891,7 +5891,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5921,7 +5921,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -5950,7 +5950,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -5980,7 +5980,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -6009,7 +6009,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -6039,7 +6039,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -6068,7 +6068,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -6098,7 +6098,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -6127,7 +6127,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -6157,7 +6157,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -6186,7 +6186,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -6216,7 +6216,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -6245,7 +6245,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6275,7 +6275,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6304,7 +6304,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -6334,7 +6334,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -6363,7 +6363,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6393,7 +6393,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6422,7 +6422,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -6452,7 +6452,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -6481,7 +6481,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -6511,7 +6511,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -6540,7 +6540,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6570,7 +6570,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6599,7 +6599,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -6629,7 +6629,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -6658,7 +6658,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -6688,7 +6688,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -6717,7 +6717,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -6747,7 +6747,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -6776,7 +6776,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -6806,7 +6806,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -6835,7 +6835,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -6865,7 +6865,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -6894,7 +6894,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6924,7 +6924,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6953,7 +6953,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -6983,7 +6983,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device1", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -7012,7 +7012,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7042,7 +7042,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7071,7 +7071,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7101,7 +7101,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7130,7 +7130,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7160,7 +7160,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7189,7 +7189,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7219,7 +7219,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7248,7 +7248,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7278,7 +7278,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7307,7 +7307,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -7337,7 +7337,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -7366,7 +7366,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -7396,7 +7396,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -7425,7 +7425,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -7455,7 +7455,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device4", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -7484,7 +7484,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7514,7 +7514,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7543,7 +7543,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -7573,7 +7573,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -7602,7 +7602,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7632,7 +7632,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -7661,7 +7661,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -7690,7 +7690,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7720,7 +7720,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7749,7 +7749,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7779,7 +7779,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7809,7 +7809,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -7838,7 +7838,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7868,7 +7868,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7897,7 +7897,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7927,7 +7927,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -7956,7 +7956,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -7986,7 +7986,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8015,7 +8015,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -8045,7 +8045,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -8133,7 +8133,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -8163,7 +8163,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -8192,7 +8192,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -8222,7 +8222,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -8251,7 +8251,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -8281,7 +8281,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -8428,7 +8428,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -8458,7 +8458,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -8487,7 +8487,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -8517,7 +8517,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -8546,7 +8546,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8576,7 +8576,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8605,7 +8605,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -8635,7 +8635,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -8664,7 +8664,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -8694,7 +8694,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -8723,7 +8723,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -8753,7 +8753,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -8782,7 +8782,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8812,7 +8812,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8841,7 +8841,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8871,7 +8871,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -8900,7 +8900,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -8930,7 +8930,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -8959,7 +8959,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -8989,7 +8989,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -9018,7 +9018,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -9048,7 +9048,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -9077,7 +9077,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9107,7 +9107,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9136,7 +9136,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -9166,7 +9166,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -9254,7 +9254,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -9284,7 +9284,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -9313,7 +9313,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9343,7 +9343,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9372,7 +9372,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -9402,7 +9402,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -9431,7 +9431,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -9461,7 +9461,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build248-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -9490,7 +9490,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -9520,7 +9520,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -9549,7 +9549,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9579,7 +9579,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9608,7 +9608,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -9638,7 +9638,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build248-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -9667,7 +9667,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -9697,7 +9697,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device5", + "id": "build249-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -9726,7 +9726,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -9756,7 +9756,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -9785,7 +9785,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -9815,7 +9815,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" } @@ -9844,7 +9844,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9874,7 +9874,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -9903,7 +9903,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -9933,7 +9933,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -9962,7 +9962,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -9992,7 +9992,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10021,7 +10021,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10051,7 +10051,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10080,7 +10080,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10110,7 +10110,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10139,7 +10139,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -10169,7 +10169,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -10198,7 +10198,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -10228,7 +10228,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device6", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -10257,7 +10257,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -10287,7 +10287,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -10316,7 +10316,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -10346,7 +10346,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device5", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -10375,7 +10375,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10405,7 +10405,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10434,7 +10434,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10464,7 +10464,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device7", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10493,7 +10493,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -10523,7 +10523,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -10552,7 +10552,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10582,7 +10582,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10611,7 +10611,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10641,7 +10641,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10670,7 +10670,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10700,7 +10700,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10729,7 +10729,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10759,7 +10759,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -10788,7 +10788,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10818,7 +10818,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build249-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -10847,7 +10847,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -10877,7 +10877,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device2", + "id": "build248-m4--device1", "os": "Android", "pool": "Chrome-perf" } @@ -10906,7 +10906,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -10936,7 +10936,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device7", + "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -10965,7 +10965,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -10995,7 +10995,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build248-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -11024,7 +11024,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -11053,7 +11053,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -11083,7 +11083,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device4", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -11112,7 +11112,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -11142,7 +11142,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -11172,7 +11172,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device6", + "id": "build248-m4--device3", "os": "Android", "pool": "Chrome-perf" } @@ -11201,7 +11201,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -11231,7 +11231,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device1", + "id": "build249-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -11260,7 +11260,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -11290,7 +11290,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device7", + "id": "build249-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -11378,7 +11378,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -11408,7 +11408,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device2", + "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" } @@ -11437,7 +11437,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -11467,7 +11467,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device3", + "id": "build249-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -11496,7 +11496,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -11526,7 +11526,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build249-m4--device3", + "id": "build248-m4--device4", "os": "Android", "pool": "Chrome-perf" } @@ -11555,7 +11555,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -11585,7 +11585,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build248-m4--device6", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" }
diff --git a/testing/libfuzzer/fuzzers/es_parser_mpeg1audio_fuzzer.cc b/testing/libfuzzer/fuzzers/es_parser_mpeg1audio_fuzzer.cc index 94b8a60..6afacd2 100644 --- a/testing/libfuzzer/fuzzers/es_parser_mpeg1audio_fuzzer.cc +++ b/testing/libfuzzer/fuzzers/es_parser_mpeg1audio_fuzzer.cc
@@ -13,13 +13,10 @@ class NullMediaLog : public media::MediaLog { public: NullMediaLog() {} + ~NullMediaLog() override {} - void DoAddEventLogString(const std::string& event) {} void AddEvent(std::unique_ptr<media::MediaLogEvent> event) override {} - protected: - virtual ~NullMediaLog() {} - private: DISALLOW_COPY_AND_ASSIGN(NullMediaLog); }; @@ -29,13 +26,12 @@ // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - scoped_refptr<NullMediaLog> media_log(new NullMediaLog()); - media::mp2t::EsParserMpeg1Audio es_parser(base::Bind(&NewAudioConfig), - base::Bind(&EmitBuffer), media_log); - if (!es_parser.Parse(data, size, media::kNoTimestamp, - media::kNoDecodeTimestamp())) { - return 0; + NullMediaLog media_log; + media::mp2t::EsParserMpeg1Audio es_parser( + base::Bind(&NewAudioConfig), base::Bind(&EmitBuffer), &media_log); + if (es_parser.Parse(data, size, media::kNoTimestamp, + media::kNoDecodeTimestamp())) { + es_parser.Flush(); } - es_parser.Flush(); return 0; }
diff --git a/testing/libfuzzer/fuzzers/mp4_box_reader_fuzzer.cc b/testing/libfuzzer/fuzzers/mp4_box_reader_fuzzer.cc index 6e5c6bd5..ff6f5791 100644 --- a/testing/libfuzzer/fuzzers/mp4_box_reader_fuzzer.cc +++ b/testing/libfuzzer/fuzzers/mp4_box_reader_fuzzer.cc
@@ -7,20 +7,16 @@ #include <memory> -#include "media/formats/mp4/box_reader.h" #include "base/logging.h" +#include "media/formats/mp4/box_reader.h" class NullMediaLog : public media::MediaLog { public: NullMediaLog() {} - - void DoAddEventLogString(const std::string& event) {} + ~NullMediaLog() override {} void AddEvent(std::unique_ptr<media::MediaLogEvent> event) override {} - protected: - virtual ~NullMediaLog() {} - private: DISALLOW_COPY_AND_ASSIGN(NullMediaLog); }; @@ -28,18 +24,9 @@ // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { bool err; - scoped_refptr<NullMediaLog> media_log(new NullMediaLog()); + NullMediaLog media_log; std::unique_ptr<media::mp4::BoxReader> reader( - media::mp4::BoxReader::ReadTopLevelBox(data, static_cast<const int>(size), - media_log, &err)); - if (err) { - return 0; - } - if (reader == NULL) { - return 0; - } - if (!reader->ScanChildren()) { - return 0; - } - return 0; + media::mp4::BoxReader::ReadTopLevelBox(data, static_cast<int>(size), + &media_log, &err)); + return !err && reader && reader->ScanChildren() ? 0 : 0; }
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index d750e45..4123ca3c 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -280,6 +280,43 @@ ] } ] + }, + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "BackgroundOptimizationEnabled", + "params": { + "max_keyframe_distance_media_source_ms": "10000", + "max_keyframe_distance_ms": "1000" + }, + "enable_features": [ + "BackgroundVideoTrackOptimization" + ] + } + ] + }, + { + "platforms": [ + "chromeos", + "linux", + "mac", + "win" + ], + "experiments": [ + { + "name": "BackgroundOptimizationEnabled", + "params": { + "max_keyframe_distance_media_source_ms": "10000", + "max_keyframe_distance_ms": "0" + }, + "enable_features": [ + "BackgroundVideoTrackOptimization" + ] + } + ] } ], "BrowserBlacklist": [ @@ -2642,6 +2679,7 @@ "SettingsEnforcement": [ { "platforms": [ + "mac", "win" ], "experiments": [ @@ -3042,32 +3080,6 @@ ] } ], - "UpdateMenuItem": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledWithNewerVersionAvailableSummary", - "params": { - "enable_update_badge": "true", - "enable_update_menu_item": "true", - "show_summary": "true" - } - }, - { - "name": "EnabledWithCustomSummary", - "params": { - "custom_summary": "Custom update summary", - "enable_update_badge": "true", - "enable_update_menu_item": "true", - "show_summary": "true" - } - } - ] - } - ], "V8CacheStrategiesForCacheStorage": [ { "platforms": [
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 53eedf0..12b79ac 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -268,6 +268,13 @@ # ====== LayoutNG-only failures from here ====== # LayoutNG - is a new layout system for Blink. +#### external/wpt/css/CSS2/abspos +#### Passed: 13 81% +#### Skipped: 3 +crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-001.xht [ Skip ] +crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-007.xht [ Skip ] +crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009a.xht [ Skip ] + #### external/wpt/css/CSS2/normal-flow #### Passed: 420 59% #### Skipped: 288 @@ -952,9 +959,6 @@ crbug.com/676432 fullscreen/full-screen-iframe-zIndex.html [ Skip ] crbug.com/676432 virtual/android/fullscreen/full-screen-iframe-zIndex.html [ Skip ] -crbug.com/709846 paint/pagination/pagination-change-clip-crash.html [ NeedsRebaseline ] -crbug.com/709846 virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash.html [ NeedsRebaseline ] - crbug.com/538697 [ Win7 Debug ] virtual/threaded/printing/webgl-oversized-printing.html [ Failure Crash ] crbug.com/538697 [ Win7 Debug ] printing/webgl-oversized-printing.html [ Failure Crash ] @@ -2990,6 +2994,9 @@ # for Mac earlier in the file, so just skip it everywhere. crbug.com/707689 shapedetection/detection-HTMLCanvasElement.html [ Skip ] +# Sheriff failures 2017-04-19 +crbug.com/713094 [ Win ] virtual/sharedarraybuffer/fast/css/fontfaceset-check-platform-fonts.html [ Failure Pass ] + # Tests to be run only under virtual/experimental-canvas-features/ crbug.com/682753 fast/canvas-experimental [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites index 18fb6a9..80c24ad 100644 --- a/third_party/WebKit/LayoutTests/VirtualTestSuites +++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -468,6 +468,11 @@ "args": ["--enable-blink-features=LayoutNG"] }, { + "prefix": "layout_ng", + "base": "external/wpt/css/CSS2/abspos", + "args": ["--enable-blink-features=LayoutNG"] + }, + { "prefix": "feature-policy", "base": "http/tests/feature-policy", "args": ["--enable-blink-features=FeaturePolicy"]
diff --git a/third_party/WebKit/LayoutTests/accessibility/aom.html b/third_party/WebKit/LayoutTests/accessibility/aom.html index bb19384..46c1043 100644 --- a/third_party/WebKit/LayoutTests/accessibility/aom.html +++ b/third_party/WebKit/LayoutTests/accessibility/aom.html
@@ -21,14 +21,14 @@ test(function(t) { var button = document.getElementById("button"); assert_equals(button.nodeType, Node.ELEMENT_NODE); - assert_not_equals(button.accessibleNode, null); + assert_true(Boolean(button.accessibleNode)); }, "DOM Elements have an AccessibleNode"); test(function(t) { var button = document.getElementById("button"); var staticText = button.firstChild; assert_equals(staticText.nodeType, Node.TEXT_NODE); - assert_not_equals(staticText.accessibleNode, null); + assert_false(Boolean(staticText.accessibleNode)); }, "DOM Text nodes do not have an AccessibleNode."); test(function(t) {
diff --git a/third_party/WebKit/LayoutTests/accessibility/aria-owns-grid.html b/third_party/WebKit/LayoutTests/accessibility/aria-owns-grid.html index 0b24222..3555b47d 100644 --- a/third_party/WebKit/LayoutTests/accessibility/aria-owns-grid.html +++ b/third_party/WebKit/LayoutTests/accessibility/aria-owns-grid.html
@@ -23,7 +23,7 @@ <script> test(function(t) { var axGrid = accessibilityController.accessibleElementById("grid"); - assert_equals(axGrid.role, "AXRole: AXTable"); + assert_equals(axGrid.role, "AXRole: AXGrid"); assert_equals(axGrid.columnCount, 3); assert_equals(axGrid.rowCount, 2); }, "Aria-owns works on ARIA grids.");
diff --git a/third_party/WebKit/LayoutTests/accessibility/aria-tables-expected.txt b/third_party/WebKit/LayoutTests/accessibility/aria-tables-expected.txt index f22eb8d..075a596 100644 --- a/third_party/WebKit/LayoutTests/accessibility/aria-tables-expected.txt +++ b/third_party/WebKit/LayoutTests/accessibility/aria-tables-expected.txt
@@ -10,7 +10,7 @@ End of test AXRole: AXWebArea - AXRole: AXTable + AXRole: AXGrid AXRole: AXRow AXRole: AXColumnHeader "col head" AXRole: AXStaticText "col head"
diff --git a/third_party/WebKit/LayoutTests/accessibility/table-with-grid-roles.html b/third_party/WebKit/LayoutTests/accessibility/table-with-grid-roles.html index 05da3942..7bc2366 100644 --- a/third_party/WebKit/LayoutTests/accessibility/table-with-grid-roles.html +++ b/third_party/WebKit/LayoutTests/accessibility/table-with-grid-roles.html
@@ -36,7 +36,7 @@ <script> test(function(t) { var axTable = accessibilityController.accessibleElementById('table1'); - assert_equals(axTable.role, "AXRole: AXTable"); + assert_equals(axTable.role, "AXRole: AXGrid"); assert_equals(axTable.rowCount, 2); assert_equals(axTable.columnCount, 2); @@ -44,7 +44,7 @@ test(function(t) { var axTable = accessibilityController.accessibleElementById('table2'); - assert_equals(axTable.role, "AXRole: AXTable"); + assert_equals(axTable.role, "AXRole: AXGrid"); assert_equals(axTable.rowCount, 2); assert_equals(axTable.columnCount, 2); @@ -52,7 +52,7 @@ test(function(t) { var axTable = accessibilityController.accessibleElementById('table3'); - assert_equals(axTable.role, "AXRole: AXTable"); + assert_equals(axTable.role, "AXRole: AXGrid"); assert_equals(axTable.rowCount, 2); assert_equals(axTable.columnCount, 2);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/frame-src-redirect.html b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/frame-src-redirect.html new file mode 100644 index 0000000..f5ac88b0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/frame-src-redirect.html
@@ -0,0 +1,35 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./support/testharness-helper.sub.js"></script> +<body></body> +<script> + function waitForViolation(el, policy, blocked_origin) { + return new Promise(resolve => { + el.addEventListener('securitypolicyviolation', e => { + if (e.originalPolicy == policy && (new URL(e.blockedURI)).origin == blocked_origin) + resolve(e); + }); + }); + } + + async_test(t => { + var i = document.createElement("iframe"); + var redirect = generateCrossOriginRedirectFrame(); + i.src = redirect.url; + + // Report-only policy should trigger a violation on the original request. + var original_report_only = waitForViolation(window, "frame-src http://foo.test", (new URL(i.src)).origin) + // Report-only policy should trigger a violation on the redirected request. + var redirect_report_only = waitForViolation(window, "frame-src http://foo.test", (new URL(redirect.target)).origin) + // Enforced policy should trigger a violation on the redirected request. + var redirect_enforced = waitForViolation(window, "frame-src 'self'", (new URL(redirect.target)).origin) + + Promise.all([original_report_only, redirect_report_only, redirect_enforced]).then(t.step_func(_ => { + t.done(); + })); + + document.body.appendChild(i); + }, "Redirected iframe src should evaluate both enforced and report-only policies on both original request and when following redirect"); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/frame-src-redirect.html.headers b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/frame-src-redirect.html.headers new file mode 100644 index 0000000..338bea1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/frame-src-redirect.html.headers
@@ -0,0 +1,2 @@ +Content-Security-Policy: frame-src 'self' +Content-Security-Policy-Report-Only: frame-src http://foo.test
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/support/frame.html b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/support/frame.html new file mode 100644 index 0000000..50be429 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/support/frame.html
@@ -0,0 +1,2 @@ +<!doctype html> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/support/testharness-helper.sub.js b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/support/testharness-helper.sub.js new file mode 100644 index 0000000..b9e9a6c8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/frame-src/support/testharness-helper.sub.js
@@ -0,0 +1,5 @@ +function generateCrossOriginRedirectFrame() { + var target = "http://{{domains[天気の良い日]}}:" + document.location.port + "/content-security-policy/frame-src/support/frame.html"; + var url = "/common/redirect.py?location=" + encodeURIComponent(target); + return { url: url, target: target }; +}
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html new file mode 100644 index 0000000..2761127 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html
@@ -0,0 +1,31 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./support/testharness-helper.sub.js"></script> +<body></body> +<script> + function waitForViolation(el, t, policy, blocked_origin) { + return new Promise(resolve => { + el.addEventListener('securitypolicyviolation', e => { + if (e.originalPolicy == policy && (new URL(e.blockedURI)).origin == blocked_origin) + resolve(e); + else + t.unreached_func("Unexpected violation event for " + e.blockedURI)(); + }); + }); + } + + async_test(t => { + var i = document.createElement("img"); + var redirect = generateCrossOriginRedirectImage(); + i.src = redirect.url; + + // Report-only policy should trigger a violation on the redirected request. + waitForViolation(window, t, "img-src https:", (new URL(redirect.target)).origin).then(t.step_func(e => { + t.done(); + })); + + document.body.appendChild(i); + }, "Image that redirects to http:// URL prohibited by Report-Only must generate a violation report, even with upgrade-insecure-requests"); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers new file mode 100644 index 0000000..57207bb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers
@@ -0,0 +1,2 @@ +Content-Security-Policy-Report-Only: img-src https: +Content-Security-Policy: upgrade-insecure-requests
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js new file mode 100644 index 0000000..816b88f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js
@@ -0,0 +1,5 @@ +function generateCrossOriginRedirectImage() { + var target = "http://{{host}}:{{ports[https][0]}}/content-security-policy/support/pass.png"; + var url = "/common/redirect.py?location=" + encodeURIComponent(target); + return { url: url, target: target } +} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html new file mode 100644 index 0000000..5a0bc7c8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html
@@ -0,0 +1,60 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/upgrade-insecure-requests/support/testharness-helper.sub.js"></script> +<body></body> +<script> + function waitForViolation(el, effective_directive) { + return new Promise(resolve => { + el.addEventListener('securitypolicyviolation', e => { + if (e.effectiveDirective == effective_directive) + resolve(e); + }); + }); + } + + async_test(t => { + var url = generateURL(Host.SAME_ORIGIN, Protocol.INSECURE, ResourceType.IMAGE).url; + var i = document.createElement('img'); + var loaded = false; + var reported = false; + waitForViolation(window, "img-src") + .then(t.step_func(e => { + reported = true; + if (loaded) + t.done(); + })); + i.onload = t.step_func(_ => { + loaded = true; + if (reported) + t.done(); + }); + i.onerror = t.unreached_func(url + " should load successfully."); + i.src = url; + document.body.appendChild(i); + }, "Upgraded image is reported"); + + async_test(t => { + var url = generateURL(Host.SAME_ORIGIN, Protocol.INSECURE, ResourceType.FRAME).url; + var i = document.createElement('iframe'); + var loaded = false; + var reported = false; + waitForViolation(window, "frame-src") + .then(t.step_func(e => { + reported = true; + if (loaded) + t.done(); + })); + window.addEventListener("message", t.step_func(e => { + if (e.source == i.contentWindow) { + i.remove(); + loaded = true; + if (reported) + t.done(); + } + })); + i.src = url; + document.body.appendChild(i); + }, "Upgraded iframe is reported"); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers new file mode 100644 index 0000000..b8bec0b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers
@@ -0,0 +1,2 @@ +Content-Security-Policy-Report-Only: frame-src https:; img-src https: +Content-Security-Policy: upgrade-insecure-requests
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2-expected.html b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2-expected.html index 48e0faa..cbefe78 100644 --- a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2-expected.html +++ b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2-expected.html
@@ -1,6 +1,6 @@ <!DOCTYPE html> -<script src="../../../resources/ahem.js"></script> <p>crbug.com/648342: The text should be on two lines.</p> -<div style="width:260px; font-size: 12px; font-family: ahem, sans-serif;"> - <br><br>Text Text <br> Text Text +<div style="width:260px; font-size: 12px; font-family: arial, sans-serif;"> + <br><br>Text Text Text Text Text Text <br> Text Text Text </div> +
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2.html b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2.html index 9b29d97..7fe4e800 100644 --- a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2.html +++ b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-2.html
@@ -1,6 +1,5 @@ <!DOCTYPE html> -<script src="../../../resources/ahem.js"></script> <p>crbug.com/648342: The text should be on two lines.</p> -<div style="width:260px; font-size: 12px; font-family: ahem, sans-serif;"> - <span></span><br><br><span><a><img src="../../../canvas/philip/images/transparent.png" widht="100" height="50" align="right"></a>Text Text Text Text</span><br><span></span> +<div style="width:260px; font-size: 12px; font-family: arial, sans-serif;"> + <span></span><br><br><span><a><img src="../../../canvas/philip/images/transparent.png" align="right">Text Text Text Text Text Text Text Text Text</a></span><br><span></span> </div>
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-expected.html b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-expected.html index 48e0faa..cbefe78 100644 --- a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-expected.html +++ b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks-expected.html
@@ -1,6 +1,6 @@ <!DOCTYPE html> -<script src="../../../resources/ahem.js"></script> <p>crbug.com/648342: The text should be on two lines.</p> -<div style="width:260px; font-size: 12px; font-family: ahem, sans-serif;"> - <br><br>Text Text <br> Text Text +<div style="width:260px; font-size: 12px; font-family: arial, sans-serif;"> + <br><br>Text Text Text Text Text Text <br> Text Text Text </div> +
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks.html b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks.html index 9346bc1..9956ac4 100644 --- a/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks.html +++ b/third_party/WebKit/LayoutTests/fast/block/float/float-should-dirty-line-when-adjacent-to-line-breaks.html
@@ -1,6 +1,5 @@ <!DOCTYPE html> -<script src="../../../resources/ahem.js"></script> <p>crbug.com/648342: The text should be on two lines.</p> -<div style="width:260px; font-size: 12px; font-family: ahem, sans-serif;"> - <br><br><a><img src="../../../canvas/philip/images/transparent.png" widht="100" height="50" align="right"></a>Text Text Text Text +<div style="width:260px; font-size: 12px; font-family: arial, sans-serif;"> + <br><br><a><img src="../../../canvas/philip/images/transparent.png" align="right"></a>Text Text Text Text Text Text Text Text Text </div>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-arc-negative-radius.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-arc-negative-radius.html index 8c52cc5..57e2937 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-arc-negative-radius.html +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-arc-negative-radius.html
@@ -25,5 +25,5 @@ path.arcTo(10, 10, 20, 20, 5); path.arcTo(10, 10, 20, 20, 0); assert_throws(null, function() {path.arcTo(10, 10, 20, 20, -5);}); -}, 'Tests CanvasPathMethods arc and arcTo with negative radii.'); +}, 'Tests CanvasPath arc and arcTo with negative radii.'); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-ellipse-negative-radius.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-ellipse-negative-radius.html index f934358..6f7f2f4 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-ellipse-negative-radius.html +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-ellipse-negative-radius.html
@@ -5,16 +5,16 @@ test(function(t) { var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); - + ctx.ellipse(10, 10, 10, 5, 0, 0, 1, false); ctx.ellipse(10, 10, 10, 0, 0, 0, 1, false); ctx.ellipse(10, 10, -0, 5, 0, 0, 1, false); - + assert_throws(null, function() {ctx.ellipse(10, 10, -2, 5, 0, 0, 1, false);}); assert_throws(null, function() {ctx.ellipse(10, 10, 0, -1.5, 0, 0, 1, false);}); assert_throws(null, function() {ctx.ellipse(10, 10, -2, -5, 0, 0, 1, false);}); - + // FIXME: When this is exposed on Path as well as CanvasRenderingContext2D, add tests for Path as well. -}, 'Tests CanvasPathMethods ellipse with negative radii.'); +}, 'Tests CanvasPath ellipse with negative radii.'); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/fast/css-generated-content/before-content-continuation-chain-expected.txt b/third_party/WebKit/LayoutTests/fast/css-generated-content/before-content-continuation-chain-expected.txt index 0a56e97..defe321 100644 --- a/third_party/WebKit/LayoutTests/fast/css-generated-content/before-content-continuation-chain-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/css-generated-content/before-content-continuation-chain-expected.txt
@@ -5,11 +5,11 @@ LayoutBlockFlow {BODY} at (8,8) size 784x400 LayoutBlockFlow (anonymous) at (0,0) size 784x0 LayoutInline {SPAN} at (0,0) size 0x0 [color=#008000] - LayoutBlockFlow (anonymous) at (0,0) size 784x200 + LayoutBlockFlow (anonymous) at (0,0) size 784x200 [color=#008000] LayoutBlockFlow {<pseudo:before>} at (0,0) size 784x200 [color=#0000FF] LayoutTextFragment (anonymous) at (0,0) size 200x200 text run at (0,0) width 200: "A" - LayoutBlockFlow {DIV} at (0,200) size 784x0 [color=#008000] + LayoutBlockFlow {DIV} at (0,200) size 784x0 LayoutBlockFlow (anonymous) at (0,200) size 784x200 LayoutInline {SPAN} at (0,0) size 200x200 [color=#008000] LayoutText {#text} at (0,0) size 200x200
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png index 4d6bff7..cd24cd5 100644 --- a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png index 163b265..5c4828a 100644 --- a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png index c348dd4..1e1397b 100644 --- a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.txt b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.txt new file mode 100644 index 0000000..b82eeb0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.txt
@@ -0,0 +1,12 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x64 + LayoutBlockFlow {HTML} at (0,0) size 800x64 + LayoutBlockFlow {BODY} at (8,8) size 784x48 + LayoutText {#text} at (0,0) size 438x19 + text run at (0,0) width 438: "Passes if pink underline below paints behind text descenders on 'pyg'." + LayoutBR {BR} at (438,0) size 0x19 + LayoutInline {SPAN} at (0,0) size 113x27 + LayoutText {#text} at (0,20) size 113x27 + text run at (0,20) width 113: "abc pyg def" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders.html b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders.html new file mode 100644 index 0000000..938a0523 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<style> +span { + font-size: 24px; + text-decoration: underline; + text-decoration-color: pink; +} +</style> +Passes if pink underline below paints behind text descenders on 'pyg'.<br> +<span>abc pyg def</span>
diff --git a/third_party/WebKit/LayoutTests/fast/inline/middle-continuation-inherits-visibility-from-inline-parent.html b/third_party/WebKit/LayoutTests/fast/inline/middle-continuation-inherits-visibility-from-inline-parent.html new file mode 100644 index 0000000..5fcb782 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/inline/middle-continuation-inherits-visibility-from-inline-parent.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<style> +.hidden { + visibility:hidden; +} +</style> +<a href="#" class="hidden"> + <div id="div">Inside a</div> +</a> +<script> +test(function() { + if (window.eventSender) { + eventSender.dragMode = false; + eventSender.mouseMoveTo(10, 10); + var originalInfo = window.internals.getCurrentCursorInfo(); + assert_equals(originalInfo, "type=Pointer hotSpot=0,0"); + } +}, 'crbug.com/706324: Middle continuations should inherit the style of their inline parent, so when the cursor is placed over the anonymous block it should remain a pointer.'); +</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/multiple-report-policies-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/multiple-report-policies-expected.txt index 27ddba2..58ca480 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/multiple-report-policies-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/multiple-report-policies-expected.txt
@@ -1,8 +1,8 @@ +CONSOLE WARNING: Subresource requests using legacy protocols (like `ftp:`) are are blocked. Please deliver web-accessible resources over modern protocols like HTTPS. See https://www.chromestatus.com/feature/5709390967472128 for details. CONSOLE ERROR: line 8: [Report Only] Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://* https://*". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/save-report.php?test=multiple-report-policies-1'. CONSOLE ERROR: line 8: [Report Only] Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/save-report.php?test=multiple-report-policies-2'. -CONSOLE WARNING: Subresource requests using legacy protocols (like `ftp:`) are are blocked. Please deliver web-accessible resources over modern protocols like HTTPS. See https://www.chromestatus.com/feature/5709390967472128 for details.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-multiple-blocked.php b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-multiple-blocked.php index a63cf622..49f31d8 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-multiple-blocked.php +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-multiple-blocked.php
@@ -14,18 +14,12 @@ link.onerror = t.unreached_func("The import should load."); link.onload = t.step_func(_ => assert_true(!!link.import, "The import was loaded.")); - var watcher = new EventWatcher(t, document, ['securitypolicyviolation', 'securitypolicyviolation']); + var watcher = new EventWatcher(t, document, ['securitypolicyviolation']); watcher .wait_for('securitypolicyviolation') - .then(t.step_func(e => { - assert_equals(e.blockedURI, "http://127.0.0.1:8000/security/resources/blank.html"); - assert_equals(e.lineNumber, 27); - // TODO(mkwst): We shouldn't be generating another violation report here. - return watcher.wait_for('securitypolicyviolation'); - })) .then(t.step_func_done(e => { assert_equals(e.blockedURI, "http://127.0.0.1:8000/security/resources/blank.html"); - assert_equals(e.lineNumber, 0); + assert_equals(e.lineNumber, 21); })); document.head.appendChild(link);
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-reportonly-allowed.php b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-reportonly-allowed.php index 34256fb..0fa0ec4c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-reportonly-allowed.php +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/nonces/import-reportonly-allowed.php
@@ -16,15 +16,9 @@ var watcher = new EventWatcher(t, document, ['securitypolicyviolation', 'securitypolicyviolation']); watcher .wait_for('securitypolicyviolation') - .then(t.step_func(e => { - assert_equals(e.blockedURI, "http://127.0.0.1:8000/security/resources/blank.html"); - assert_equals(e.lineNumber, 27); - // TODO(mkwst): We shouldn't be generating another violation report here. - return watcher.wait_for('securitypolicyviolation'); - })) .then(t.step_func_done(e => { assert_equals(e.blockedURI, "http://127.0.0.1:8000/security/resources/blank.html"); - assert_equals(e.lineNumber, 0); + assert_equals(e.lineNumber, 21); })); document.head.appendChild(link);
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-cross-origin-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-cross-origin-expected.txt index c77d131..9aa540b 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-cross-origin-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-cross-origin-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE ERROR: line 4: [Report Only] Refused to load the image 'http://localhost:8080/security/resources/abe.png' because it violates the following Content Security Policy directive: "img-src 'none'". +CONSOLE ERROR: line 3: [Report Only] Refused to load the image 'http://localhost:8080/security/resources/abe.png' because it violates the following Content Security Policy directive: "img-src 'none'". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/save-report.php?test=report-blocked-uri-cross-origin.php'. CSP report received: @@ -6,4 +6,4 @@ HTTP_REFERER: http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri-cross-origin.php REQUEST_METHOD: POST === POST DATA === -{"csp-report":{"document-uri":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri-cross-origin.php","referrer":"","violated-directive":"img-src","effective-directive":"img-src","original-policy":"img-src 'none'; report-uri resources/save-report.php?test=report-blocked-uri-cross-origin.php","disposition":"report","blocked-uri":"http://localhost:8080/security/resources/abe.png","line-number":4,"source-file":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri-cross-origin.php","status-code":200,"script-sample":""}} +{"csp-report":{"document-uri":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri-cross-origin.php","referrer":"","violated-directive":"img-src","effective-directive":"img-src","original-policy":"img-src 'none'; report-uri resources/save-report.php?test=report-blocked-uri-cross-origin.php","disposition":"report","blocked-uri":"http://localhost:8080/security/resources/abe.png","line-number":3,"source-file":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri-cross-origin.php","status-code":200,"script-sample":""}}
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-expected.txt index e6429cea..f5b18d4 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-blocked-uri-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE ERROR: line 4: [Report Only] Refused to load the image 'http://127.0.0.1:8000/security/resources/abe.png' because it violates the following Content Security Policy directive: "img-src 'none'". +CONSOLE ERROR: line 3: [Report Only] Refused to load the image 'http://127.0.0.1:8000/security/resources/abe.png' because it violates the following Content Security Policy directive: "img-src 'none'". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/save-report.php?test=report-blocked-uri.php'. CSP report received: @@ -6,4 +6,4 @@ HTTP_REFERER: http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri.php REQUEST_METHOD: POST === POST DATA === -{"csp-report":{"document-uri":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri.php","referrer":"","violated-directive":"img-src","effective-directive":"img-src","original-policy":"img-src 'none'; report-uri resources/save-report.php?test=report-blocked-uri.php","disposition":"report","blocked-uri":"http://127.0.0.1:8000/security/resources/abe.png","line-number":4,"source-file":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri.php","status-code":200,"script-sample":""}} +{"csp-report":{"document-uri":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri.php","referrer":"","violated-directive":"img-src","effective-directive":"img-src","original-policy":"img-src 'none'; report-uri resources/save-report.php?test=report-blocked-uri.php","disposition":"report","blocked-uri":"http://127.0.0.1:8000/security/resources/abe.png","line-number":3,"source-file":"http://127.0.0.1:8000/security/contentSecurityPolicy/report-blocked-uri.php","status-code":200,"script-sample":""}}
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-multiple-violations-01-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-multiple-violations-01-expected.txt index a96ef20..5957daa 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-multiple-violations-01-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-multiple-violations-01-expected.txt
@@ -1,7 +1,7 @@ -CONSOLE ERROR: [Report Only] Refused to load the image 'http://127.0.0.1:8000/security/resources/abe.png' because it violates the following Content Security Policy directive: "img-src 'none'". +CONSOLE ERROR: line 9: [Report Only] Refused to load the image 'http://127.0.0.1:8000/security/resources/abe.png' because it violates the following Content Security Policy directive: "img-src 'none'". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/does-not-exist'. -CONSOLE ERROR: [Report Only] Refused to load the image 'http://127.0.0.1:8000/security/resources/eba.png' because it violates the following Content Security Policy directive: "img-src 'none'". +CONSOLE ERROR: line 10: [Report Only] Refused to load the image 'http://127.0.0.1:8000/security/resources/eba.png' because it violates the following Content Security Policy directive: "img-src 'none'". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/does-not-exist'. This tests that multiple violations on a page trigger multiple reports. The test passes if two PingLoader callbacks are visible in the output.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-original-url.php b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-original-url.php index 321f564..10b18c8 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-original-url.php +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-original-url.php
@@ -1,5 +1,5 @@ <?php - header("Content-Security-Policy-Report-Only: img-src http://allowed.test"); + header("Content-Security-Policy-Report-Only: img-src http://allowed.test"); ?> <!DOCTYPE html> <script src="/resources/testharness.js"></script> @@ -29,17 +29,15 @@ async_test(t => { var i = document.createElement('img'); - // TODO(mkwst): This should be `http://allowed.test:8000/security/resources/redir.php?url=...` - // rather than the redirect target: https://crbug.com/613960 - createListener("http://127.0.0.1:8000/security/resources/compass.jpg?t=3", t); - i.src = "http://allowed.test:8000/security/resources/redir.php?url=" + encodeURIComponent("http://127.0.0.1:8000/security/resources/compass.jpg?t=3"); + var url = "http://allowed.test:8000/security/resources/redir.php?url=" + encodeURIComponent("http://127.0.0.1:8000/security/resources/compass.jpg?t=3"); + createListener(url, t); + i.src = url; }, "Block after redirect, same-origin = original URL in report"); async_test(t => { var i = document.createElement('img'); - // TODO(mkwst): This should be `http://allowed.test:8000/security/resources/redir.php?url=...` - // rather than the redirect target: https://crbug.com/613960 - createListener("http://blocked.test:8000", t); - i.src = "http://allowed.test:8000/security/resources/redir.php?url=" + encodeURIComponent("http://blocked.test:8000/security/resources/compass.jpg?t=4"); + var url = "http://allowed.test:8000/security/resources/redir.php?url=" + encodeURIComponent("http://blocked.test:8000/security/resources/compass.jpg?t=4"); + createListener(url, t); + i.src = url; }, "Block after redirect, cross-origin = original URL in report"); </script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-expected.txt index 698e862..d71ac68 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-expected.txt
@@ -1,8 +1,8 @@ -CONSOLE ERROR: line 8: Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". - CONSOLE ERROR: line 8: [Report Only] Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/save-report.php?test=report-uri-multiple.php'. +CONSOLE ERROR: line 8: Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". + CSP report received: CONTENT_TYPE: application/csp-report HTTP_REFERER: http://127.0.0.1:8000/security/contentSecurityPolicy/report-uri-multiple.php
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-reversed-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-reversed-expected.txt index 0f2d81e..206c35b 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-reversed-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/report-uri-multiple-reversed-expected.txt
@@ -1,8 +1,8 @@ -CONSOLE ERROR: line 8: Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". - CONSOLE ERROR: line 8: [Report Only] Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". PingLoader dispatched to 'http://127.0.0.1:8000/security/contentSecurityPolicy/resources/save-report.php?test=report-uri-multiple-reversed.php'. +CONSOLE ERROR: line 8: Refused to load the image 'ftp://blah.test/' because it violates the following Content Security Policy directive: "img-src http://*". + CSP report received: CONTENT_TYPE: application/csp-report HTTP_REFERER: http://127.0.0.1:8000/security/contentSecurityPolicy/report-uri-multiple-reversed.php
diff --git a/third_party/WebKit/LayoutTests/payments/payment-request-interface-expected.txt b/third_party/WebKit/LayoutTests/payments/payment-request-interface-expected.txt index 8b9ce91b..41079930 100644 --- a/third_party/WebKit/LayoutTests/payments/payment-request-interface-expected.txt +++ b/third_party/WebKit/LayoutTests/payments/payment-request-interface-expected.txt
@@ -1,3 +1,4 @@ +CONSOLE WARNING: line 160: Duplicate shipping option identifier 'express' is treated as an invalid address indicator. CONSOLE WARNING: line 248: Cannot yet distinguish credit, debit, and prepaid cards. CONSOLE WARNING: line 252: Cannot yet distinguish credit, debit, and prepaid cards. This is a testharness.js-based test.
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png index f916069..0c46d4069a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/generated-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/generated-content-expected.png index 2485e0c9a..80abc66 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/generated-content-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/generated-content-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/root-layer-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/root-layer-update-expected.png index f65ceab..ccc60ec1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/root-layer-update-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/root-layer-update-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png index 32ef17f..7a4c0e10 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/sibling-positioning-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/sibling-positioning-expected.png index 744e41a..845fbe1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/sibling-positioning-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/sibling-positioning-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/basic/inheritance-expected.png index fbd0a738..8afc076b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png index e231d16a..66d917f5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-17-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-17-expected.png index edf9980..bda78da 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-17-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-17-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-18-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-18-expected.png index c12eae41..f6bb9e3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-18-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-18-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-61-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-61-expected.png index d853249..75746cc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-61-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/html/css3-modsel-61-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-17-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-17-expected.png index edf9980..bda78da 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-17-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-17-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-18-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-18-expected.png index c12eae41..f6bb9e3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-18-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-18-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-61-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-61-expected.png index d853249..75746cc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-61-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xhtml/css3-modsel-61-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-17-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-17-expected.png index 670f29a..f1c67e6e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-17-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-17-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-18-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-18-expected.png index cbce770..c2aa2b0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-18-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-18-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-61-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-61-expected.png index c433b66..07a5b91 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-61-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/selectors3/xml/css3-modsel-61-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5190926-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5190926-expected.png index 5653ca9a..b167dbd6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5190926-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5190926-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/inserting/5156401-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/inserting/5156401-2-expected.png index cf93b06..bc8dd40 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/inserting/5156401-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/inserting/5156401-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/drop-text-without-selection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/drop-text-without-selection-expected.png index 6cd3397..fa30267 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/drop-text-without-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/drop-text-without-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png index 56ba39e..d34ce26d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png index 56ba39e..d34ce26d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png index 56ba39e..d34ce26d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png index 56ba39e..d34ce26d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png index 56ba39e..d34ce26d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-text-016-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-text-016-expected.png index a923dd4..7e577ae 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-text-016-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/pasteboard/paste-text-016-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/3690719-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/3690719-expected.png index 29e5dbec..3723517 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/3690719-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/3690719-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/4402375-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/4402375-expected.png index 0db7f25..53137fd4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/4402375-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/4402375-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/6476-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/6476-expected.png index 717fb033..50c9aeb 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/6476-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/6476-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/leave-requested-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/leave-requested-block-expected.png index c29b43a6..f656ec1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/leave-requested-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/leave-requested-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/previous-line-position-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/previous-line-position-expected.png index d8e7fe4..76ec574 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/previous-line-position-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/previous-line-position-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/style/block-styles-007-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/style/block-styles-007-expected.png index cc35c36b..c49e377 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/style/block-styles-007-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/style/block-styles-007-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-clip-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-clip-text-expected.png index 3a23b4f..b40ac41 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-clip-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-clip-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/size/zero-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/size/zero-expected.png index faa5cd44..d45c045c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/size/zero-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/size/zero-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/basic/018-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/basic/018-expected.png index f98e4a9e..53a5ae6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/basic/018-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/basic/018-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/002-expected.png index 0e926ba..88236924 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/centered-float-avoidance-complexity-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/centered-float-avoidance-complexity-expected.png index a94aa18..6812c17 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/centered-float-avoidance-complexity-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/centered-float-avoidance-complexity-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-hit-testing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-hit-testing-expected.png index f11ae6a..e793cac 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-hit-testing-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-hit-testing-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-painting-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-painting-expected.png index c34ea49a..78aa86b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-painting-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/float-in-float-painting-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/019-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/019-expected.png index d420877..5b205ab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/020-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/020-expected.png index ec1483492..1da8dfa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/020-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/020-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/019-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/019-expected.png index d420877..5b205ab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/020-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/020-expected.png index ec1483492..1da8dfa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/020-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/block-inside-inline/020-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.png index ca0b90b8..0916a62a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.txt index b21904ec..5404ac4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/child-style-can-override-visited-style-expected.txt
@@ -8,7 +8,7 @@ text run at (0,0) width 356: "This tests that a child style can override the :visited style." LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow (anonymous) at (0,20) size 784x20 + LayoutBlockFlow (anonymous) at (0,20) size 784x20 [color=#FF0000] LayoutBlockFlow {DIV} at (0,0) size 784x20 [color=#008000] LayoutText {#text} at (0,0) size 267x19 text run at (0,0) width 267: "This text should be green (and underlined)"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/clip-zooming-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/clip-zooming-expected.png index 3ac35ce..2c31eaf 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/clip-zooming-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/clip-zooming-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/compare-content-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/compare-content-style-expected.png index 643b97a..36ed0413 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/compare-content-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/compare-content-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-hover-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-hover-expected.png index a47bb3e..b33fc8e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-hover-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-hover-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-visibility-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-visibility-expected.png index 9486bcd..4760d94d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-visibility-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/first-letter-visibility-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/focus-ring-multiline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/focus-ring-multiline-expected.png index 6c00f03..22f35f6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/focus-ring-multiline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/focus-ring-multiline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/invalid-percentage-property-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/invalid-percentage-property-expected.png index 3f0b6e7..2edd02c3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/invalid-percentage-property-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/invalid-percentage-property-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-font-order-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-font-order-expected.png index cab42a2..bfd0d978 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-font-order-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-font-order-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-thickness-underline-strikethrough-overline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-thickness-underline-strikethrough-overline-expected.png index ccc0ba2..6fd33625 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-thickness-underline-strikethrough-overline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-thickness-underline-strikethrough-overline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/nth-child-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/nth-child-dynamic-expected.png index 3362e10a..0cb1212 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/nth-child-dynamic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/nth-child-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-expected.png index f1207b44..615980c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-strict-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-strict-expected.png index f1207b44..615980c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-strict-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-ellipsis-strict-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png index 228fcede..b525fdaf 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png index c3e5fb2..72f58d02 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png index 4a46160..6f6dd78 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 86ff5ec8..ca8d82e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png index b5353c1..c5ab751 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png index 409fe9f..09f7458 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png index c69535d..0d0d7f4e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png new file mode 100644 index 0000000..5cc98dc --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/events/reveal-link-when-focused-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/events/reveal-link-when-focused-expected.png index 4ef1b4d8..e6077f7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/events/reveal-link-when-focused-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/events/reveal-link-when-focused-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/14498-positionForCoordinates-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/14498-positionForCoordinates-expected.png index e8e1a229..3706a30 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/14498-positionForCoordinates-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/14498-positionForCoordinates-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-expected.png index 55d50fb..520e50c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-long-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-long-image-expected.png index e2f2376..059f952 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-long-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-long-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-x-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-x-expected.png index 140ce1f..90f482b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-x-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-x-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-y-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-y-expected.png index dce284e..5568093 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-y-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-box-background-repeat-y-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-focus-ring-expected.png index 73c0015..dd77ec2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-focus-ring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-focus-ring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/normal-flow-hit-test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/normal-flow-hit-test-expected.png index 052ec0cd..7d40ec0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/normal-flow-hit-test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/normal-flow-hit-test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.png index aecda6f..473e33d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/003-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/003-expected.png index ba22e3f..ec0aa70 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/scrolled-marker-paint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/scrolled-marker-paint-expected.png index 4af7a38..af684c0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/scrolled-marker-paint-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/scrolled-marker-paint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/position-fixed-transform-clipping-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/position-fixed-transform-clipping-expected.png index 2d807b48..541bdd6f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/position-fixed-transform-clipping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/position-fixed-transform-clipping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/reflections/reflection-overflow-hidden-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/reflections/reflection-overflow-hidden-expected.png index a08f3d5..3f2cccf 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/reflections/reflection-overflow-hidden-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/reflections/reflection-overflow-hidden-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/selection-rect-transform-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/selection-rect-transform-expected.png index eb94b26..0411c02 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/selection-rect-transform-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/selection-rect-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/018-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/018-expected.png index e1c8dea..f4acd0fc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/018-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/018-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/061-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/061-expected.png index d853249..75746cc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/061-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/061-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/166-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/166-expected.png index 3a969ca..87f4f4f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/166-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/selectors/166-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-expected.png index 1e9bf68..9a7eb25 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-vertical-expected.png index a3664a3..fe0673b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/004-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png index 21ccdf5..d1a8c6b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png index cd0da3d..d39925c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png index 51868cf7..18a0f2f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-CSS-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-CSS-expected.png index 1c190f05..92e8256 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-CSS-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-CSS-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-HTML-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-HTML-expected.png index 1e1d2bde..4ff97481 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-HTML-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-HTML-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-formatting-characters-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-formatting-characters-expected.png index 726b691..cd2f6ed8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-formatting-characters-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-LDB-2-formatting-characters-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png index a98ef7a0..aa146fa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/stroking-decorations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/stroking-decorations-expected.png index ebef48a..9fba72b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/stroking-decorations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/stroking-decorations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/whitespace/020-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/whitespace/020-expected.png index cf55f7a..aa05265 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/whitespace/020-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/whitespace/020-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/english-lr-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/english-lr-text-expected.png index fc4b6b5..178e01e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/english-lr-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/english-lr-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png index 33b5927..8038086 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png index 3b81586..f3cbb0b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png index 7b7afce..6fd423e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-layers-expected.png index 8412b48..3da4c54 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-layers-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-layers-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selected-replaced-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selected-replaced-expected.png index 940e77f..08c4eb0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selected-replaced-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selected-replaced-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/shadow-multiple-expected.png index add0ac4a..164658d3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug113235-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug113235-1-expected.png index 46840e3..045c68b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug113235-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug113235-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug1188-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug1188-expected.png index 17f96ed..0e95b5c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug1188-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug1188-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug20804-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug20804-expected.png index c752ee2..071b7b2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug20804-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug20804-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug23235-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug23235-expected.png index 289e051..ecf2c8c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug23235-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug23235-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png index b6aefe7..95e4721 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-4-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-4-expected.png index ebf440c..5eef4c5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-4-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-4-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug51140-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug51140-expected.png index 22bd374..7e4f10c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug51140-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug51140-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug57828-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug57828-2-expected.png index 50ca5a32..a4ca77c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug57828-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug57828-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug59354-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug59354-expected.png index a70eedfb..4f60601 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug59354-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug59354-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug7342-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug7342-expected.png index 45202630..9274b06 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug7342-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug7342-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug8950-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug8950-expected.png index d46634c..fde2aef 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug8950-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug8950-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png index 16e3a73..2e8b7bb 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png index 25067000..c33a7dd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1010-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1010-expected.png index 48a86bd..c08725c1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1010-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1010-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1055-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1055-2-expected.png index be256ef0..ee37524 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1055-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug1055-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index 464536b..761d3eb 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-positioned-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-positioned-ancestor-expected.png index 92556ea..86fa539 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-positioned-ancestor-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-positioned-ancestor-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-caret-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-caret-expected.png index fe4df29..27d3944 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-caret-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-caret-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png index f916069..0c46d4069a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/generated-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/generated-content-expected.png new file mode 100644 index 0000000..80abc66 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/generated-content-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/root-layer-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/root-layer-update-expected.png new file mode 100644 index 0000000..ccc60ec1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/root-layer-update-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png new file mode 100644 index 0000000..7a4c0e10 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/sibling-positioning-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/sibling-positioning-expected.png new file mode 100644 index 0000000..845fbe1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/sibling-positioning-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png index 7b7afce..6fd423e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png index 8412b48..3da4c54 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png index 940e77f..08c4eb0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png index add0ac4a..164658d3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/019-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/019-expected.png index d420877..5b205ab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/020-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/020-expected.png index ec1483492..1da8dfa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/020-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/020-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/019-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/019-expected.png index d420877..5b205ab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/020-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/020-expected.png index ec1483492..1da8dfa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/020-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/020-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/basic/inheritance-expected.png index fbd0a738..8afc076b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png new file mode 100644 index 0000000..0916a62a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt new file mode 100644 index 0000000..5404ac4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt
@@ -0,0 +1,20 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow (anonymous) at (0,0) size 784x20 + LayoutText {#text} at (0,0) size 356x19 + text run at (0,0) width 356: "This tests that a child style can override the :visited style." + LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (anonymous) at (0,20) size 784x20 [color=#FF0000] + LayoutBlockFlow {DIV} at (0,0) size 784x20 [color=#008000] + LayoutText {#text} at (0,0) size 267x19 + text run at (0,0) width 267: "This text should be green (and underlined)" + LayoutBlockFlow (anonymous) at (0,40) size 784x0 + LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,40) size 784x20 [color=#008000] + LayoutText {#text} at (0,0) size 159x19 + text run at (0,0) width 159: "This text should be green"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/clip-zooming-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/clip-zooming-expected.png new file mode 100644 index 0000000..2c31eaf --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/clip-zooming-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/compare-content-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/compare-content-style-expected.png new file mode 100644 index 0000000..36ed0413 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/compare-content-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/first-letter-hover-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/first-letter-hover-expected.png new file mode 100644 index 0000000..b33fc8e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/first-letter-hover-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/first-letter-visibility-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/first-letter-visibility-expected.png new file mode 100644 index 0000000..4760d94d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/first-letter-visibility-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/focus-ring-multiline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/focus-ring-multiline-expected.png new file mode 100644 index 0000000..22f35f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/focus-ring-multiline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/invalid-percentage-property-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/invalid-percentage-property-expected.png new file mode 100644 index 0000000..2edd02c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/invalid-percentage-property-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/line-height-font-order-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/line-height-font-order-expected.png new file mode 100644 index 0000000..bfd0d978 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/line-height-font-order-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/line-thickness-underline-strikethrough-overline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/line-thickness-underline-strikethrough-overline-expected.png new file mode 100644 index 0000000..6fd33625 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/line-thickness-underline-strikethrough-overline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/nth-child-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/nth-child-dynamic-expected.png new file mode 100644 index 0000000..0cb1212 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/nth-child-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/text-overflow-ellipsis-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/text-overflow-ellipsis-expected.png new file mode 100644 index 0000000..615980c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/text-overflow-ellipsis-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/text-overflow-ellipsis-strict-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/text-overflow-ellipsis-strict-expected.png new file mode 100644 index 0000000..615980c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/sharedarraybuffer/fast/css/text-overflow-ellipsis-strict-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/basic/inheritance-expected.png index fba597d..6005d01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/text_properties/text_decoration-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/text_properties/text_decoration-expected.png index 75c9906d..d3b0038 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/text_properties/text_decoration-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/text_properties/text_decoration-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/lists/003-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/lists/003-vertical-expected.png index 07741f9..7536110 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/lists/003-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/lists/003-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/hackernews-comments-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/hackernews-comments-expected.png index de11de8..1f9a27b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/hackernews-comments-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/hackernews-comments-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-partial-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-partial-selection-expected.png index 44adfb0..dcc785f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-partial-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-partial-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-spacing-features-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-spacing-features-expected.png index 8234c1a..6abc0c1c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-spacing-features-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/atsui-spacing-features-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/basic/008-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/basic/008-expected.png index d8fa4d2..c0c3ccdb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/basic/008-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/basic/008-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/break-word-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/break-word-expected.png index 71d248c..66545d05 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/break-word-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/break-word-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-boundaries-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-boundaries-expected.png index d712de4a5..c38297e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-boundaries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-boundaries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-empty-generated-string-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-empty-generated-string-expected.png index 3c478ef4..214b6a6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-empty-generated-string-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-empty-generated-string-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-preserve-nbsp-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-preserve-nbsp-expected.png index 85b757f9..22b74e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-preserve-nbsp-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/capitalize-preserve-nbsp-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/decorations-with-text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/decorations-with-text-combine-expected.png index 08e5cc8..0bf3763 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/decorations-with-text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/decorations-with-text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/delete-hard-break-character-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/delete-hard-break-character-expected.png index 47f8f25f..d915da1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/delete-hard-break-character-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/delete-hard-break-character-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/font-initial-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/font-initial-expected.png index 433d394b..27911b4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/font-initial-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/font-initial-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/in-rendered-text-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/in-rendered-text-rtl-expected.png index 4f305f7..281761b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/in-rendered-text-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/in-rendered-text-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/001-expected.png index cd9f75a..1cb07197 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/003-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/003-expected.png index ee5dfe4c..c7aee7b4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-CSS-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-CSS-expected.png index b0b1db4..7c15799 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-CSS-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-CSS-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-HTML-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-HTML-expected.png index 07a501e..0368967 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-HTML-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-HTML-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-formatting-characters-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-formatting-characters-expected.png index 06b0d4a..6d083b2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-formatting-characters-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-LDB-2-formatting-characters-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png index 4dd11bf..83fae4e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/khmer-selection-expected.png index 73910e4..49443dc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-caret-expected.png index 029532ab..25b3fae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-caret-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-caret-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-white-space-pre-wrap-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-white-space-pre-wrap-expected.png index 1634a80..aa021386 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-white-space-pre-wrap-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/international/rtl-white-space-pre-wrap-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-after-breakable-char-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-after-breakable-char-expected.png index 6ae55e2..edcbaebc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-after-breakable-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-after-breakable-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-hang-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-hang-expected.png index 5bdf834..40fc02e8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-hang-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/midword-break-hang-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/reset-emptyRun-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/reset-emptyRun-expected.png index 4c412f2..d6d1e34f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/reset-emptyRun-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/reset-emptyRun-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/selection-hard-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/selection-hard-linebreak-expected.png index 026c1b2c..debad67 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/selection-hard-linebreak-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/selection-hard-linebreak-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/stroking-decorations-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/stroking-decorations-expected.png index 9357c75e..bcfac4a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/stroking-decorations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/stroking-decorations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/wbr-in-pre-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/wbr-in-pre-crash-expected.png index 7001da9..a5f3f426 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/wbr-in-pre-crash-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/wbr-in-pre-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/024-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/024-expected.png index ae11148..dbb84d1c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/024-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/024-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-last-char-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-last-char-expected.png index 427b78f..db79233 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-last-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-last-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-overflow-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-overflow-selection-expected.png index a4a2f23..ee27af6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-overflow-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-overflow-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png index 52c861e..0397789 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-break-soft-hyphen-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-break-soft-hyphen-expected.png index 1b7865a..1e65cb9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-break-soft-hyphen-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-break-soft-hyphen-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-space-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-space-expected.png index 70c59ad..a85cc7d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-space-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/word-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/writing-mode/english-lr-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/writing-mode/english-lr-text-expected.png index 07695d0..f19abb3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/writing-mode/english-lr-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/writing-mode/english-lr-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/ietestcenter/css3/text/textshadow-002-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/ietestcenter/css3/text/textshadow-002-expected.png index bbde45100..981afa3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/ietestcenter/css3/text/textshadow-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/ietestcenter/css3/text/textshadow-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/shadow-multiple-expected.png index fa99f07a..4bf1b85d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png index 7e37300..128d7e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png index fa99f07a..4bf1b85d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/basic/inheritance-expected.png index fba597d..6005d01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png index 75c9906d..d3b0038 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/khmer-selection-expected.png index 549cafc..c3b8db9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/text_properties/text_decoration-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/text_properties/text_decoration-expected.png index 13a745a..16acd60 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/text_properties/text_decoration-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/text_properties/text_decoration-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 5c45478..cd663f9a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/hackernews-comments-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/hackernews-comments-expected.png index 71876f1..0c806f97 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/hackernews-comments-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/hackernews-comments-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-partial-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-partial-selection-expected.png index d0e2128..91574bf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-partial-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-partial-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-spacing-features-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-spacing-features-expected.png index 92af824..b3621ef 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-spacing-features-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/atsui-spacing-features-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/basic/008-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/basic/008-expected.png index d3ce5af..be409428 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/basic/008-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/basic/008-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/break-word-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/break-word-expected.png index d1abcdf..5f6593a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/break-word-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/break-word-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-boundaries-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-boundaries-expected.png index c0469c3..584fe95b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-boundaries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-boundaries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-empty-generated-string-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-empty-generated-string-expected.png index 184ebf0..55bcedf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-empty-generated-string-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-empty-generated-string-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-preserve-nbsp-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-preserve-nbsp-expected.png index aec6dd4..e1d85fa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-preserve-nbsp-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/capitalize-preserve-nbsp-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/delete-hard-break-character-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/delete-hard-break-character-expected.png index e00b97a..0cfc1a4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/delete-hard-break-character-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/delete-hard-break-character-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/font-initial-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/font-initial-expected.png index ab725b09..47bb315f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/font-initial-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/font-initial-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/in-rendered-text-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/in-rendered-text-rtl-expected.png index 05c2f74..2a42853 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/in-rendered-text-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/in-rendered-text-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/001-expected.png index 8f0abbe..6ab10a9c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/003-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/003-expected.png index 29b71d23..9c96589 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-CSS-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-CSS-expected.png index 1d3ddf9..3d0f875 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-CSS-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-CSS-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-HTML-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-HTML-expected.png index ad1d05c..c9326ac 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-HTML-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-HTML-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-formatting-characters-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-formatting-characters-expected.png index 22f0104a..4fcad75 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-formatting-characters-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-LDB-2-formatting-characters-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png index 61e52370..17b2e98 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/khmer-selection-expected.png index 8a09aa48..15431728 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-caret-expected.png index 8edbf63..9c77bfb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-caret-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-caret-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-white-space-pre-wrap-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-white-space-pre-wrap-expected.png index 4f66d7d7..e90b484 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-white-space-pre-wrap-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/international/rtl-white-space-pre-wrap-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-after-breakable-char-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-after-breakable-char-expected.png index da9760e6..8fbd4fe 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-after-breakable-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-after-breakable-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-hang-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-hang-expected.png index 9615579..e1a6bf6c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-hang-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/midword-break-hang-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/reset-emptyRun-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/reset-emptyRun-expected.png index 35355c4..77ca7b6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/reset-emptyRun-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/reset-emptyRun-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/selection-hard-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/selection-hard-linebreak-expected.png index d9bc91c..3c8358e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/selection-hard-linebreak-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/selection-hard-linebreak-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/wbr-in-pre-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/wbr-in-pre-crash-expected.png index ebe5f6c..a1c58c2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/wbr-in-pre-crash-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/wbr-in-pre-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/024-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/024-expected.png index b80e381..8d73462b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/024-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/024-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-last-char-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-last-char-expected.png index 9eebf26..e45a7338 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-last-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-last-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-overflow-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-overflow-selection-expected.png index 90904eae..ccb0f854 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-overflow-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-overflow-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png index e7a4911..f653722 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-break-soft-hyphen-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-break-soft-hyphen-expected.png index c83a75d..5c363512 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-break-soft-hyphen-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-break-soft-hyphen-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-space-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-space-expected.png index 4138372c..621f25a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-space-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/word-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png index 13a745a..16acd60 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/khmer-selection-expected.png index 549cafc..c3b8db9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css1/basic/inheritance-expected.png index c45714c7..3bf7731 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css1/text_properties/text_decoration-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css1/text_properties/text_decoration-expected.png index 61fd1a4..a444260 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css1/text_properties/text_decoration-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css1/text_properties/text_decoration-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.png index 9ab0538..53d32f1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.txt index 740eb8c..0991ac27 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/child-style-can-override-visited-style-expected.txt
@@ -8,7 +8,7 @@ text run at (0,0) width 367: "This tests that a child style can override the :visited style." LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow (anonymous) at (0,18) size 784x18 + LayoutBlockFlow (anonymous) at (0,18) size 784x18 [color=#FF0000] LayoutBlockFlow {DIV} at (0,0) size 784x18 [color=#008000] LayoutText {#text} at (0,0) size 272x18 text run at (0,0) width 272: "This text should be green (and underlined)"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 0686425..ae63514 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png index d2a6be5..9ded002 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png index 3f693e9..107b043 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png index 96c12be..db7b8f7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png new file mode 100644 index 0000000..3c5c70d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/003-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/003-vertical-expected.png index 49044c8..29db9bc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/003-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/003-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/hackernews-comments-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/hackernews-comments-expected.png index ef976dc..b913216 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/hackernews-comments-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/hackernews-comments-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-partial-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-partial-selection-expected.png index 5dcf770f..b1d23f0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-partial-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-partial-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-small-caps-punctuation-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-small-caps-punctuation-size-expected.png index 93ba877..3991a96 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-small-caps-punctuation-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-small-caps-punctuation-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-spacing-features-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-spacing-features-expected.png index c618713..b9de49b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-spacing-features-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/atsui-spacing-features-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/008-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/008-expected.png index dcf1144..f25af16 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/008-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/008-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/015-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/015-expected.png index f9c6b2f..54bd91c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/015-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/basic/015-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/break-word-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/break-word-expected.png index 9366fe32..dbfc824 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/break-word-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/break-word-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png index cbf58cc..691cebe 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-empty-generated-string-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-empty-generated-string-expected.png index 800cb2c..124b58a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-empty-generated-string-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-empty-generated-string-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-preserve-nbsp-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-preserve-nbsp-expected.png index 86f9884..dce9ceff 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-preserve-nbsp-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/capitalize-preserve-nbsp-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/decorations-with-text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/decorations-with-text-combine-expected.png index 67fe9279..25ef5a4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/decorations-with-text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/decorations-with-text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/delete-hard-break-character-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/delete-hard-break-character-expected.png index 1019635..aa887cb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/delete-hard-break-character-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/delete-hard-break-character-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-for-custom-font-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-for-custom-font-expected.png index 0d6cd85..ccbd820 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-for-custom-font-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-for-custom-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-initial-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-initial-expected.png index 9b296109..7edd3e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-initial-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-initial-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/in-rendered-text-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/in-rendered-text-rtl-expected.png index f97b83a..144a132 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/in-rendered-text-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/in-rendered-text-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/001-expected.png index c9772c6..7975b91 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/003-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/003-expected.png index a30b51f..aa3c5ee09 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-CSS-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-CSS-expected.png index f2d5c9c..412860ed 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-CSS-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-CSS-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-HTML-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-HTML-expected.png index 57b667f9..a1f5624b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-HTML-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-HTML-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-formatting-characters-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-formatting-characters-expected.png index ad9cd07..28aa147 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-formatting-characters-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-LDB-2-formatting-characters-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png index bad44a8..cc07414 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png index 5211a25e..e2e0190 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-caret-expected.png index 966913b..346183c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-caret-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-caret-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-white-space-pre-wrap-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-white-space-pre-wrap-expected.png index 4bfc2e2..aa28f29 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-white-space-pre-wrap-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/rtl-white-space-pre-wrap-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png index be11f64..32d83980 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-hang-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-hang-expected.png index 397b5b2c..cc805bf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-hang-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-hang-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/reset-emptyRun-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/reset-emptyRun-expected.png index d5b0754..511ab04f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/reset-emptyRun-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/reset-emptyRun-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/selection-hard-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/selection-hard-linebreak-expected.png index dd8c52d..8d0c922 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/selection-hard-linebreak-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/selection-hard-linebreak-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/stroking-decorations-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/stroking-decorations-expected.png index 02511cd..2474402 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/stroking-decorations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/stroking-decorations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/wbr-in-pre-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/wbr-in-pre-crash-expected.png index 39ba911..02e4f85 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/wbr-in-pre-crash-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/wbr-in-pre-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/024-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/024-expected.png index aae063e..e0c04571 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/024-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/024-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.png index cace135..f57ce5f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.png index d0dd01b..e7f974e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png index ecaea7ec..b52b4497 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-run-rounding-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-run-rounding-expected.png index f146722..6ac96bf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-run-rounding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-run-rounding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png index 417b5805..c366f4a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-space-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-space-expected.png index 52fbd79..d8b44255 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-space-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/word-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/english-lr-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/english-lr-text-expected.png index f147ace..08fa365 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/english-lr-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/english-lr-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png index a1ddf71..31684c4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shadow-multiple-expected.png index fddd90e6..2bcbbf7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt new file mode 100644 index 0000000..693c3e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt
@@ -0,0 +1,33 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [785, 734], + "contentsOpaque": true, + "drawsContent": true, + "paintInvalidations": [ + { + "object": "LayoutView #document", + "rect": [0, 634, 785, 100], + "reason": "incremental" + } + ] + }, + { + "name": "LayoutBlockFlow DIV id='background'", + "position": [8, 426], + "bounds": [769, 300] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutView #document", + "reason": "incremental" + }, + { + "object": "LayoutBlockFlow DIV id='background'", + "reason": "style change" + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png index 46bb1ca1..e56d7700 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png index fddd90e6..2bcbbf7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash-expected.txt new file mode 100644 index 0000000..693c3e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash-expected.txt
@@ -0,0 +1,33 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [785, 734], + "contentsOpaque": true, + "drawsContent": true, + "paintInvalidations": [ + { + "object": "LayoutView #document", + "rect": [0, 634, 785, 100], + "reason": "incremental" + } + ] + }, + { + "name": "LayoutBlockFlow DIV id='background'", + "position": [8, 426], + "bounds": [769, 300] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutView #document", + "reason": "incremental" + }, + { + "object": "LayoutBlockFlow DIV id='background'", + "reason": "style change" + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/basic/inheritance-expected.png index c45714c7..3bf7731 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png index 61fd1a4..a444260 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/text_properties/text_decoration-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png new file mode 100644 index 0000000..53d32f1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt new file mode 100644 index 0000000..0991ac27 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt
@@ -0,0 +1,20 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow (anonymous) at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 367x18 + text run at (0,0) width 367: "This tests that a child style can override the :visited style." + LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (anonymous) at (0,18) size 784x18 [color=#FF0000] + LayoutBlockFlow {DIV} at (0,0) size 784x18 [color=#008000] + LayoutText {#text} at (0,0) size 272x18 + text run at (0,0) width 272: "This text should be green (and underlined)" + LayoutBlockFlow (anonymous) at (0,36) size 784x0 + LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,36) size 784x18 [color=#008000] + LayoutText {#text} at (0,0) size 162x18 + text run at (0,0) width 162: "This text should be green"
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png index d0caf311..a78e47d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/win/css1/basic/inheritance-expected.png index 4bd27724..05a0dc1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5190926-expected.png b/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5190926-expected.png index e00889f1a..4beac7e0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5190926-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5190926-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/editing/selection/3690719-expected.png b/third_party/WebKit/LayoutTests/platform/win/editing/selection/3690719-expected.png index c734665..f8eb4415 100644 --- a/third_party/WebKit/LayoutTests/platform/win/editing/selection/3690719-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/editing/selection/3690719-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.png index 32a6cd0..58f7829 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.txt index dbe50280..3b6baea 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/child-style-can-override-visited-style-expected.txt
@@ -8,7 +8,7 @@ text run at (0,0) width 337: "This tests that a child style can override the :visited style." LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow (anonymous) at (0,20) size 784x20 + LayoutBlockFlow (anonymous) at (0,20) size 784x20 [color=#FF0000] LayoutBlockFlow {DIV} at (0,0) size 784x20 [color=#008000] LayoutText {#text} at (0,0) size 252x19 text run at (0,0) width 252: "This text should be green (and underlined)"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index a17b7c06..bfbcba0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png index a339247..fccee25 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png index 9a0995b5..62b7150 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png index be63c94..c0bba0dc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png new file mode 100644 index 0000000..36bd40a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-underline-paints-behind-descenders-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/decorations-with-text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text/decorations-with-text-combine-expected.png index 0709b6c..dc1d4f3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text/decorations-with-text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text/decorations-with-text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text/international/khmer-selection-expected.png index d40d03c..2b78501 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/stroking-decorations-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text/stroking-decorations-expected.png index 5f0d811e..885db5b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text/stroking-decorations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text/stroking-decorations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/english-lr-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/english-lr-text-expected.png index 1162a58..4a707302 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/english-lr-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/english-lr-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shadow-multiple-expected.png index 9799791..af94e977 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png new file mode 100644 index 0000000..a78e47d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png index 9799791..af94e977 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/basic/inheritance-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/basic/inheritance-expected.png index 4bd27724..05a0dc1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/basic/inheritance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/basic/inheritance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png new file mode 100644 index 0000000..58f7829 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt new file mode 100644 index 0000000..3b6baea --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/sharedarraybuffer/fast/css/child-style-can-override-visited-style-expected.txt
@@ -0,0 +1,20 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow (anonymous) at (0,0) size 784x20 + LayoutText {#text} at (0,0) size 337x19 + text run at (0,0) width 337: "This tests that a child style can override the :visited style." + LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (anonymous) at (0,20) size 784x20 [color=#FF0000] + LayoutBlockFlow {DIV} at (0,0) size 784x20 [color=#008000] + LayoutText {#text} at (0,0) size 252x19 + text run at (0,0) width 252: "This text should be green (and underlined)" + LayoutBlockFlow (anonymous) at (0,40) size 784x0 + LayoutInline {A} at (0,0) size 0x0 [color=#FF0000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,40) size 784x20 [color=#008000] + LayoutText {#text} at (0,0) size 150x19 + text run at (0,0) width 150: "This text should be green"
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/hackernews-comments-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/hackernews-comments-expected.png index f2cb4b9..350b4ff 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/hackernews-comments-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/hackernews-comments-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-partial-selection-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-partial-selection-expected.png index f8664d9..e7871c5 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-partial-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-partial-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-small-caps-punctuation-size-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-small-caps-punctuation-size-expected.png index cec72a5b..fbe59b9 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-small-caps-punctuation-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-small-caps-punctuation-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-spacing-features-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-spacing-features-expected.png index 0f2b434..5f7b2e3 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-spacing-features-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/atsui-spacing-features-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/basic/015-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/basic/015-expected.png index f479019..fa79208 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/basic/015-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/basic/015-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/break-word-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/break-word-expected.png index 91e3ca8..d8de167 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/break-word-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/break-word-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-boundaries-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-boundaries-expected.png index 777aa84b..bd1e9e8 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-boundaries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-boundaries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-empty-generated-string-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-empty-generated-string-expected.png index 8a1ddc0..bbf10bc 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-empty-generated-string-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-empty-generated-string-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-preserve-nbsp-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-preserve-nbsp-expected.png index 94f1dca..1c005a1 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-preserve-nbsp-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/capitalize-preserve-nbsp-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/decorations-with-text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/decorations-with-text-combine-expected.png index 6d7a1c6..93b0cd6 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/decorations-with-text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/decorations-with-text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/delete-hard-break-character-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/delete-hard-break-character-expected.png index cf812584..5ce1ad6 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/delete-hard-break-character-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/delete-hard-break-character-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/font-initial-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/font-initial-expected.png index 1586bd9..6d16ff9 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/font-initial-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/font-initial-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/in-rendered-text-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/in-rendered-text-rtl-expected.png index 567e707a..ac9eb4871 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/in-rendered-text-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/in-rendered-text-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-CSS-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-CSS-expected.png index 140c96a..36f86337 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-CSS-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-CSS-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-HTML-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-HTML-expected.png index 1494865..2c7cfd7 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-HTML-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-HTML-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-formatting-characters-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-formatting-characters-expected.png index 006caa7..303e4c0d 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-formatting-characters-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-LDB-2-formatting-characters-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png index 80ce85f4..cc2fa76 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/bidi-neutral-directionality-paragraph-start-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/khmer-selection-expected.png index 148d850..0cb97425 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-caret-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-caret-expected.png index f8010fdb..171f5a8 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-caret-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-caret-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-white-space-pre-wrap-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-white-space-pre-wrap-expected.png index 233049d..c29f7dd 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-white-space-pre-wrap-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-white-space-pre-wrap-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-after-breakable-char-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-after-breakable-char-expected.png index a045de3..144ee36 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-after-breakable-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-after-breakable-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-hang-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-hang-expected.png index 534c7c44..3192c7b 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-hang-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/midword-break-hang-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/reset-emptyRun-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/reset-emptyRun-expected.png index 832b431..93fca558 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/reset-emptyRun-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/reset-emptyRun-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/selection-hard-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/selection-hard-linebreak-expected.png index 833b6a0..adaf2cd 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/selection-hard-linebreak-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/selection-hard-linebreak-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/stroking-decorations-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/stroking-decorations-expected.png index 5194dea..5dcd9cc 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/stroking-decorations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/stroking-decorations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/wbr-in-pre-crash-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/wbr-in-pre-crash-expected.png index 9b21e5b6..04e274f 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/wbr-in-pre-crash-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/wbr-in-pre-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/024-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/024-expected.png index 7190cba..823befe 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/024-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/024-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-last-char-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-last-char-expected.png index 6db2035..78d70e1 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-last-char-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-last-char-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-overflow-selection-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-overflow-selection-expected.png index 29905af..21814ea 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-overflow-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-overflow-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png index 26b884e..318ee88 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-run-rounding-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-run-rounding-expected.png index 7aa034c..0aa5ec3 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-run-rounding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-run-rounding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-soft-hyphen-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-soft-hyphen-expected.png index f9f3d91..ffe2c20 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-soft-hyphen-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-break-soft-hyphen-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-space-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-space-expected.png index 6cc9a31..c5c32b5 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-space-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/word-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/shadow-multiple-expected.png index 47f17ab..65a1bcb 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png index 47f17ab..65a1bcb 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/layout_ng/external/wpt/css/CSS2/abspos/README.txt b/third_party/WebKit/LayoutTests/virtual/layout_ng/external/wpt/css/CSS2/abspos/README.txt new file mode 100644 index 0000000..ba3f9280 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/layout_ng/external/wpt/css/CSS2/abspos/README.txt
@@ -0,0 +1,3 @@ +# This suite runs the tests in external/wpt/css/CSS2/abspos with +# --enable-blink-features=LayoutNG. +# The LayoutNG project is described here: http://goo.gl/1hwhfX
diff --git a/third_party/WebKit/Source/core/css/mediaControls.css b/third_party/WebKit/Source/core/css/mediaControls.css index 152f634..be0c2a3 100644 --- a/third_party/WebKit/Source/core/css/mediaControls.css +++ b/third_party/WebKit/Source/core/css/mediaControls.css
@@ -157,7 +157,8 @@ align-items: center; font-size: 16px; background-color: black; - transition: opacity .2s ease-in-out; + opacity: 0; + transition: opacity .3s ease-in-out; } video::-internal-media-remoting-background-image {
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp index 001432da..32cb93e 100644 --- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp +++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
@@ -72,6 +72,27 @@ namespace blink { +namespace { + +// Helper function that returns true if the given |header_type| should be +// checked when the CheckHeaderType is |check_header_type|. +bool CheckHeaderTypeMatches( + ContentSecurityPolicy::CheckHeaderType check_header_type, + ContentSecurityPolicyHeaderType header_type) { + switch (check_header_type) { + case ContentSecurityPolicy::CheckHeaderType::kCheckAll: + return true; + case ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly: + return header_type == kContentSecurityPolicyHeaderTypeReport; + case ContentSecurityPolicy::CheckHeaderType::kCheckEnforce: + return header_type == kContentSecurityPolicyHeaderTypeEnforce; + } + NOTREACHED(); + return false; +} + +} // namespace + bool ContentSecurityPolicy::IsNonceableElement(const Element* element) { if (RuntimeEnabledFeatures::hideNonceContentAttributeEnabled() && isHTMLScriptElement(element)) { @@ -459,12 +480,15 @@ bool IsAllowedByAll(const CSPDirectiveListVector& policies, const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) { + SecurityViolationReportingPolicy reporting_policy, + ContentSecurityPolicy::CheckHeaderType check_header_type) { if (ContentSecurityPolicy::ShouldBypassContentSecurityPolicy(url)) return true; bool is_allowed = true; for (const auto& policy : policies) { + if (!CheckHeaderTypeMatches(check_header_type, policy->HeaderType())) + continue; is_allowed &= (policy.Get()->*allowFromURL)(url, redirect_status, reporting_policy); } @@ -481,12 +505,15 @@ const KURL& url, const String& nonce, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) { + SecurityViolationReportingPolicy reporting_policy, + ContentSecurityPolicy::CheckHeaderType check_header_type) { if (ContentSecurityPolicy::ShouldBypassContentSecurityPolicy(url)) return true; bool is_allowed = true; for (const auto& policy : policies) { + if (!CheckHeaderTypeMatches(check_header_type, policy->HeaderType())) + continue; is_allowed &= (policy.Get()->*allowFromURLWithNonce)( url, nonce, redirect_status, reporting_policy); } @@ -506,7 +533,8 @@ const IntegrityMetadataSet& hashes, ParserDisposition parser_disposition, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) { + SecurityViolationReportingPolicy reporting_policy, + ContentSecurityPolicy::CheckHeaderType check_header_type) { if (ContentSecurityPolicy::ShouldBypassContentSecurityPolicy(url)) { // If we're running experimental features, bypass CSP only for // non-parser-inserted resources whose scheme otherwise bypasses CSP. If @@ -523,6 +551,8 @@ bool is_allowed = true; for (const auto& policy : policies) { + if (!CheckHeaderTypeMatches(check_header_type, policy->HeaderType())) + continue; is_allowed &= (policy.Get()->*allowFromURLWithNonceAndParser)( url, nonce, hashes, parser_disposition, redirect_status, reporting_policy); @@ -707,7 +737,8 @@ const IntegrityMetadataSet& hashes, ParserDisposition parser_disposition, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { if (ShouldBypassContentSecurityPolicy(url)) { UseCounter::Count( GetDocument(), @@ -717,7 +748,7 @@ } return IsAllowedByAll<&CSPDirectiveList::AllowScriptFromSource>( policies_, url, nonce, hashes, parser_disposition, redirect_status, - reporting_policy); + reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowScriptWithHash(const String& source, @@ -736,9 +767,11 @@ WebURLRequest::RequestContext context, const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { for (const auto& policy : policies_) { - if (!policy->AllowRequestWithoutIntegrity(context, url, redirect_status, + if (CheckHeaderTypeMatches(check_header_type, policy->HeaderType()) && + !policy->AllowRequestWithoutIntegrity(context, url, redirect_status, reporting_policy)) return false; } @@ -752,53 +785,63 @@ const IntegrityMetadataSet& integrity_metadata, ParserDisposition parser_disposition, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { if (integrity_metadata.IsEmpty() && !AllowRequestWithoutIntegrity(context, url, redirect_status, - reporting_policy)) + reporting_policy, check_header_type)) { return false; + } switch (context) { case WebURLRequest::kRequestContextAudio: case WebURLRequest::kRequestContextTrack: case WebURLRequest::kRequestContextVideo: - return AllowMediaFromSource(url, redirect_status, reporting_policy); + return AllowMediaFromSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextBeacon: case WebURLRequest::kRequestContextEventSource: case WebURLRequest::kRequestContextFetch: case WebURLRequest::kRequestContextXMLHttpRequest: case WebURLRequest::kRequestContextSubresource: - return AllowConnectToSource(url, redirect_status, reporting_policy); + return AllowConnectToSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextEmbed: case WebURLRequest::kRequestContextObject: - return AllowObjectFromSource(url, redirect_status, reporting_policy); + return AllowObjectFromSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextFavicon: case WebURLRequest::kRequestContextImage: case WebURLRequest::kRequestContextImageSet: - return AllowImageFromSource(url, redirect_status, reporting_policy); + return AllowImageFromSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextFont: - return AllowFontFromSource(url, redirect_status, reporting_policy); + return AllowFontFromSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextForm: - return AllowFormAction(url, redirect_status, reporting_policy); + return AllowFormAction(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextFrame: case WebURLRequest::kRequestContextIframe: - return AllowFrameFromSource(url, redirect_status, reporting_policy); + return AllowFrameFromSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextImport: case WebURLRequest::kRequestContextScript: case WebURLRequest::kRequestContextXSLT: return AllowScriptFromSource(url, nonce, integrity_metadata, parser_disposition, redirect_status, - reporting_policy); + reporting_policy, check_header_type); case WebURLRequest::kRequestContextManifest: - return AllowManifestFromSource(url, redirect_status, reporting_policy); + return AllowManifestFromSource(url, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextServiceWorker: case WebURLRequest::kRequestContextSharedWorker: case WebURLRequest::kRequestContextWorker: return AllowWorkerContextFromSource(url, redirect_status, - reporting_policy); + reporting_policy, check_header_type); case WebURLRequest::kRequestContextStyle: - return AllowStyleFromSource(url, nonce, redirect_status, - reporting_policy); + return AllowStyleFromSource(url, nonce, redirect_status, reporting_policy, + check_header_type); case WebURLRequest::kRequestContextCSPReport: case WebURLRequest::kRequestContextDownload: case WebURLRequest::kRequestContextHyperlink: @@ -825,110 +868,127 @@ bool ContentSecurityPolicy::AllowObjectFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowObjectFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowFrameFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowFrameFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowImageFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { if (ShouldBypassContentSecurityPolicy(url, SchemeRegistry::kPolicyAreaImage)) return true; return IsAllowedByAll<&CSPDirectiveList::AllowImageFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowStyleFromSource( const KURL& url, const String& nonce, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { if (ShouldBypassContentSecurityPolicy(url, SchemeRegistry::kPolicyAreaStyle)) return true; return IsAllowedByAll<&CSPDirectiveList::AllowStyleFromSource>( - policies_, url, nonce, redirect_status, reporting_policy); + policies_, url, nonce, redirect_status, reporting_policy, + check_header_type); } bool ContentSecurityPolicy::AllowFontFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowFontFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowMediaFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowMediaFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowConnectToSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowConnectToSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowFormAction( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowFormAction>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowBaseURI( const KURL& url, RedirectStatus redirect_status, SecurityViolationReportingPolicy reporting_policy) const { + // `base-uri` isn't affected by 'upgrade-insecure-requests', so we'll check + // both report-only and enforce headers here. return IsAllowedByAll<&CSPDirectiveList::AllowBaseURI>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, + ContentSecurityPolicy::CheckHeaderType::kCheckAll); } bool ContentSecurityPolicy::AllowWorkerContextFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { // CSP 1.1 moves workers from 'script-src' to the new 'child-src'. Measure the // impact of this backwards-incompatible change. + // TODO(mkwst): We reverted this. if (Document* document = this->GetDocument()) { UseCounter::Count(*document, UseCounter::kWorkerSubjectToCSP); if (IsAllowedByAll<&CSPDirectiveList::AllowWorkerFromSource>( policies_, url, redirect_status, - SecurityViolationReportingPolicy::kSuppressReporting) && + SecurityViolationReportingPolicy::kSuppressReporting, + check_header_type) && !IsAllowedByAll<&CSPDirectiveList::AllowScriptFromSource>( policies_, url, AtomicString(), IntegrityMetadataSet(), kNotParserInserted, redirect_status, - SecurityViolationReportingPolicy::kSuppressReporting)) { + SecurityViolationReportingPolicy::kSuppressReporting, + check_header_type)) { UseCounter::Count(*document, UseCounter::kWorkerAllowedByChildBlockedByScript); } } return IsAllowedByAll<&CSPDirectiveList::AllowWorkerFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowManifestFromSource( const KURL& url, RedirectStatus redirect_status, - SecurityViolationReportingPolicy reporting_policy) const { + SecurityViolationReportingPolicy reporting_policy, + CheckHeaderType check_header_type) const { return IsAllowedByAll<&CSPDirectiveList::AllowManifestFromSource>( - policies_, url, redirect_status, reporting_policy); + policies_, url, redirect_status, reporting_policy, check_header_type); } bool ContentSecurityPolicy::AllowAncestors(
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h index 7bdeb65..d266c21 100644 --- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h +++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
@@ -112,6 +112,20 @@ kWorkerSrc, }; + // CheckHeaderType can be passed to Allow*FromSource methods to control which + // types of CSP headers are checked. + enum class CheckHeaderType { + // Check both Content-Security-Policy and + // Content-Security-Policy-Report-Only headers. + kCheckAll, + // Check Content-Security-Policy headers only and ignore + // Content-Security-Policy-Report-Only headers. + kCheckEnforce, + // Check Content-Security-Policy-Report-Only headers only and ignore + // Content-Security-Policy headers. + kCheckReportOnly + }; + static ContentSecurityPolicy* Create() { return new ContentSecurityPolicy(); } ~ContentSecurityPolicy(); DECLARE_TRACE(); @@ -182,35 +196,38 @@ const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; - bool AllowFrameFromSource( - const KURL&, - RedirectStatus = RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; - bool AllowImageFromSource( - const KURL&, - RedirectStatus = RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; + bool AllowFrameFromSource(const KURL&, + RedirectStatus = RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy = + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; + bool AllowImageFromSource(const KURL&, + RedirectStatus = RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy = + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; bool AllowFontFromSource(const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; - bool AllowMediaFromSource( - const KURL&, - RedirectStatus = RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; - bool AllowConnectToSource( - const KURL&, - RedirectStatus = RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; + bool AllowMediaFromSource(const KURL&, + RedirectStatus = RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy = + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; + bool AllowConnectToSource(const KURL&, + RedirectStatus = RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy = + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; bool AllowFormAction(const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; bool AllowBaseURI(const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = @@ -219,13 +236,15 @@ const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; bool AllowManifestFromSource( const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; // Passing 'String()' into the |nonce| arguments in the following methods // represents an unnonced resource load. @@ -236,13 +255,14 @@ ParserDisposition, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; - bool AllowStyleFromSource( - const KURL&, - const String& nonce, - RedirectStatus = RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; + bool AllowStyleFromSource(const KURL&, + const String& nonce, + RedirectStatus = RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy = + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; bool AllowInlineScript(Element*, const String& context_url, const String& nonce, @@ -287,7 +307,8 @@ const KURL&, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; bool AllowRequest(WebURLRequest::RequestContext, const KURL&, @@ -296,7 +317,8 @@ ParserDisposition, RedirectStatus = RedirectStatus::kNoRedirect, SecurityViolationReportingPolicy = - SecurityViolationReportingPolicy::kReport) const; + SecurityViolationReportingPolicy::kReport, + CheckHeaderType = CheckHeaderType::kCheckAll) const; void UsesScriptHashAlgorithms(uint8_t content_security_policy_hash_algorithm); void UsesStyleHashAlgorithms(uint8_t content_security_policy_hash_algorithm); @@ -413,6 +435,12 @@ FRIEND_TEST_ALL_PREFIXES(ContentSecurityPolicyTest, NonceInline); FRIEND_TEST_ALL_PREFIXES(ContentSecurityPolicyTest, NonceSinglePolicy); FRIEND_TEST_ALL_PREFIXES(ContentSecurityPolicyTest, NonceMultiplePolicy); + FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest, + RedirectChecksReportedAndEnforcedCSP); + FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest, + AllowResponseChecksReportedAndEnforcedCSP); + FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest, + PopulateResourceRequestChecksReportOnlyCSP); ContentSecurityPolicy();
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp index 93a5586..d5839b48 100644 --- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp +++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp
@@ -133,16 +133,19 @@ EXPECT_FALSE(csp2->AllowScriptFromSource( example_url, String(), IntegrityMetadataSet(), kParserInserted, ResourceRequest::RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy::kSuppressReporting)); + SecurityViolationReportingPolicy::kSuppressReporting, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); EXPECT_TRUE(csp2->AllowPluginType( "application/x-type-1", "application/x-type-1", example_url, SecurityViolationReportingPolicy::kSuppressReporting)); EXPECT_TRUE(csp2->AllowImageFromSource( example_url, ResourceRequest::RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy::kSuppressReporting)); + SecurityViolationReportingPolicy::kSuppressReporting, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); EXPECT_FALSE(csp2->AllowImageFromSource( not_example_url, ResourceRequest::RedirectStatus::kNoRedirect, - SecurityViolationReportingPolicy::kSuppressReporting)); + SecurityViolationReportingPolicy::kSuppressReporting, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); EXPECT_FALSE(csp2->AllowPluginType( "application/x-type-2", "application/x-type-2", example_url, SecurityViolationReportingPolicy::kSuppressReporting)); @@ -686,7 +689,10 @@ kContentSecurityPolicyHeaderTypeReport, kContentSecurityPolicyHeaderSourceHTTP); EXPECT_TRUE(policy->AllowScriptFromSource( - resource, String(test.nonce), IntegrityMetadataSet(), kParserInserted)); + resource, String(test.nonce), IntegrityMetadataSet(), kParserInserted, + ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); // If this is expected to generate a violation, we should have sent a // report, even though we don't deny access in `allowScriptFromSource`: EXPECT_EQ(expected_reports, policy->violation_reports_sent_.size()); @@ -827,9 +833,17 @@ policy->DidReceiveHeader(test.policy2, kContentSecurityPolicyHeaderTypeReport, kContentSecurityPolicyHeaderSourceHTTP); - EXPECT_EQ(test.allowed1, policy->AllowScriptFromSource( - resource, String(test.nonce), - IntegrityMetadataSet(), kParserInserted)); + EXPECT_EQ(test.allowed1, + policy->AllowScriptFromSource( + resource, String(test.nonce), IntegrityMetadataSet(), + kParserInserted, ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckEnforce)); + EXPECT_TRUE(policy->AllowScriptFromSource( + resource, String(test.nonce), IntegrityMetadataSet(), kParserInserted, + ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); EXPECT_EQ(expected_reports, policy->violation_reports_sent_.size()); // Report / Enforce @@ -841,9 +855,17 @@ policy->DidReceiveHeader(test.policy2, kContentSecurityPolicyHeaderTypeEnforce, kContentSecurityPolicyHeaderSourceHTTP); - EXPECT_EQ(test.allowed2, policy->AllowScriptFromSource( - resource, String(test.nonce), - IntegrityMetadataSet(), kParserInserted)); + EXPECT_TRUE(policy->AllowScriptFromSource( + resource, String(test.nonce), IntegrityMetadataSet(), kParserInserted, + ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); + EXPECT_EQ(test.allowed2, + policy->AllowScriptFromSource( + resource, String(test.nonce), IntegrityMetadataSet(), + kParserInserted, ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckEnforce)); EXPECT_EQ(expected_reports, policy->violation_reports_sent_.size()); // Enforce / Enforce @@ -855,10 +877,12 @@ policy->DidReceiveHeader(test.policy2, kContentSecurityPolicyHeaderTypeEnforce, kContentSecurityPolicyHeaderSourceHTTP); - EXPECT_EQ( - test.allowed1 && test.allowed2, - policy->AllowScriptFromSource(resource, String(test.nonce), - IntegrityMetadataSet(), kParserInserted)); + EXPECT_EQ(test.allowed1 && test.allowed2, + policy->AllowScriptFromSource( + resource, String(test.nonce), IntegrityMetadataSet(), + kParserInserted, ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckEnforce)); EXPECT_EQ(expected_reports, policy->violation_reports_sent_.size()); // Report / Report @@ -871,7 +895,10 @@ kContentSecurityPolicyHeaderTypeReport, kContentSecurityPolicyHeaderSourceHTTP); EXPECT_TRUE(policy->AllowScriptFromSource( - resource, String(test.nonce), IntegrityMetadataSet(), kParserInserted)); + resource, String(test.nonce), IntegrityMetadataSet(), kParserInserted, + ResourceRequest::RedirectStatus::kNoRedirect, + SecurityViolationReportingPolicy::kReport, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly)); EXPECT_EQ(expected_reports, policy->violation_reports_sent_.size()); } }
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp index c8fa9d8..8bb6dad 100644 --- a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
@@ -492,7 +492,7 @@ } void HTMLVideoElement::MediaRemotingStarted() { - DCHECK_EQ(media_remoting_status_, MediaRemotingStatus::kNotStarted); + DCHECK(media_remoting_status_ == MediaRemotingStatus::kNotStarted); media_remoting_status_ = MediaRemotingStatus::kStarted; if (!remoting_interstitial_) { remoting_interstitial_ = new MediaRemotingInterstitial(*this); @@ -504,9 +504,13 @@ } void HTMLVideoElement::MediaRemotingStopped() { - if (media_remoting_status_ != MediaRemotingStatus::kDisabled) - media_remoting_status_ = MediaRemotingStatus::kNotStarted; + // Early return because this was already called when media remoting was + // disabled. + if (media_remoting_status_ == MediaRemotingStatus::kDisabled) + return; + DCHECK(media_remoting_status_ == MediaRemotingStatus::kStarted); DCHECK(remoting_interstitial_); + media_remoting_status_ = MediaRemotingStatus::kNotStarted; remoting_interstitial_->Hide(); }
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp b/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp index ec8889f..c023053 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp
@@ -45,9 +45,12 @@ using namespace HTMLNames; static inline UChar ToLowerCase(UChar cc) { - DCHECK(IsASCIIUpper(cc)); - const int kLowerCaseOffset = 0x20; - return cc + kLowerCaseOffset; + DCHECK(IsASCIIAlpha(cc)); + return cc | 0x20; +} + +static inline UChar ToLowerCaseIfAlpha(UChar cc) { + return cc | (IsASCIIUpper(cc) ? 0x20 : 0); } static inline bool VectorEqualsString(const Vector<LChar, 32>& vector, @@ -235,16 +238,13 @@ END_STATE() HTML_BEGIN_STATE(kTagOpenState) { - if (cc == '!') + if (cc == '!') { HTML_ADVANCE_TO(kMarkupDeclarationOpenState); - else if (cc == '/') + } else if (cc == '/') { HTML_ADVANCE_TO(kEndTagOpenState); - else if (IsASCIIUpper(cc)) { + } else if (IsASCIIAlpha(cc)) { token_->BeginStartTag(ToLowerCase(cc)); HTML_ADVANCE_TO(kTagNameState); - } else if (IsASCIILower(cc)) { - token_->BeginStartTag(cc); - HTML_ADVANCE_TO(kTagNameState); } else if (cc == '?') { ParseError(); // The spec consumes the current character before switching @@ -260,14 +260,10 @@ END_STATE() HTML_BEGIN_STATE(kEndTagOpenState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { token_->BeginEndTag(static_cast<LChar>(ToLowerCase(cc))); appropriate_end_tag_name_.clear(); HTML_ADVANCE_TO(kTagNameState); - } else if (IsASCIILower(cc)) { - token_->BeginEndTag(static_cast<LChar>(cc)); - appropriate_end_tag_name_.clear(); - HTML_ADVANCE_TO(kTagNameState); } else if (cc == '>') { ParseError(); HTML_ADVANCE_TO(kDataState); @@ -284,20 +280,17 @@ END_STATE() HTML_BEGIN_STATE(kTagNameState) { - if (IsTokenizerWhitespace(cc)) + if (IsTokenizerWhitespace(cc)) { HTML_ADVANCE_TO(kBeforeAttributeNameState); - else if (cc == '/') + } else if (cc == '/') { HTML_ADVANCE_TO(kSelfClosingStartTagState); - else if (cc == '>') + } else if (cc == '>') { return EmitAndResumeIn(source, HTMLTokenizer::kDataState); - else if (IsASCIIUpper(cc)) { - token_->AppendToName(ToLowerCase(cc)); - HTML_ADVANCE_TO(kTagNameState); } else if (cc == kEndOfFileMarker) { ParseError(); HTML_RECONSUME_IN(kDataState); } else { - token_->AppendToName(cc); + token_->AppendToName(ToLowerCaseIfAlpha(cc)); HTML_ADVANCE_TO(kTagNameState); } } @@ -316,14 +309,10 @@ END_STATE() HTML_BEGIN_STATE(kRCDATAEndTagOpenState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kRCDATAEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kRCDATAEndTagNameState); } else { BufferCharacter('<'); BufferCharacter('/'); @@ -333,14 +322,10 @@ END_STATE() HTML_BEGIN_STATE(kRCDATAEndTagNameState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kRCDATAEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kRCDATAEndTagNameState); } else { if (IsTokenizerWhitespace(cc)) { if (IsAppropriateEndTag()) { @@ -381,14 +366,10 @@ END_STATE() HTML_BEGIN_STATE(kRAWTEXTEndTagOpenState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kRAWTEXTEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kRAWTEXTEndTagNameState); } else { BufferCharacter('<'); BufferCharacter('/'); @@ -398,14 +379,10 @@ END_STATE() HTML_BEGIN_STATE(kRAWTEXTEndTagNameState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kRAWTEXTEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kRAWTEXTEndTagNameState); } else { if (IsTokenizerWhitespace(cc)) { if (IsAppropriateEndTag()) { @@ -450,14 +427,10 @@ END_STATE() HTML_BEGIN_STATE(kScriptDataEndTagOpenState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kScriptDataEndTagNameState); } else { BufferCharacter('<'); BufferCharacter('/'); @@ -467,14 +440,10 @@ END_STATE() HTML_BEGIN_STATE(kScriptDataEndTagNameState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kScriptDataEndTagNameState); } else { if (IsTokenizerWhitespace(cc)) { if (IsAppropriateEndTag()) { @@ -576,17 +545,11 @@ temporary_buffer_.clear(); DCHECK(buffered_end_tag_name_.IsEmpty()); HTML_ADVANCE_TO(kScriptDataEscapedEndTagOpenState); - } else if (IsASCIIUpper(cc)) { + } else if (IsASCIIAlpha(cc)) { BufferCharacter('<'); BufferCharacter(cc); temporary_buffer_.clear(); - temporary_buffer_.push_back(ToLowerCase(cc)); - HTML_ADVANCE_TO(kScriptDataDoubleEscapeStartState); - } else if (IsASCIILower(cc)) { - BufferCharacter('<'); - BufferCharacter(cc); - temporary_buffer_.clear(); - temporary_buffer_.push_back(static_cast<LChar>(cc)); + temporary_buffer_.push_back(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataDoubleEscapeStartState); } else { BufferCharacter('<'); @@ -596,14 +559,10 @@ END_STATE() HTML_BEGIN_STATE(kScriptDataEscapedEndTagOpenState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataEscapedEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kScriptDataEscapedEndTagNameState); } else { BufferCharacter('<'); BufferCharacter('/'); @@ -613,14 +572,10 @@ END_STATE() HTML_BEGIN_STATE(kScriptDataEscapedEndTagNameState) { - if (IsASCIIUpper(cc)) { + if (IsASCIIAlpha(cc)) { temporary_buffer_.push_back(static_cast<LChar>(cc)); AddToPossibleEndTag(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataEscapedEndTagNameState); - } else if (IsASCIILower(cc)) { - temporary_buffer_.push_back(static_cast<LChar>(cc)); - AddToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(kScriptDataEscapedEndTagNameState); } else { if (IsTokenizerWhitespace(cc)) { if (IsAppropriateEndTag()) { @@ -655,13 +610,9 @@ HTML_ADVANCE_TO(kScriptDataDoubleEscapedState); else HTML_ADVANCE_TO(kScriptDataEscapedState); - } else if (IsASCIIUpper(cc)) { + } else if (IsASCIIAlpha(cc)) { BufferCharacter(cc); - temporary_buffer_.push_back(ToLowerCase(cc)); - HTML_ADVANCE_TO(kScriptDataDoubleEscapeStartState); - } else if (IsASCIILower(cc)) { - BufferCharacter(cc); - temporary_buffer_.push_back(static_cast<LChar>(cc)); + temporary_buffer_.push_back(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataDoubleEscapeStartState); } else HTML_RECONSUME_IN(kScriptDataEscapedState); @@ -739,13 +690,9 @@ HTML_ADVANCE_TO(kScriptDataEscapedState); else HTML_ADVANCE_TO(kScriptDataDoubleEscapedState); - } else if (IsASCIIUpper(cc)) { + } else if (IsASCIIAlpha(cc)) { BufferCharacter(cc); - temporary_buffer_.push_back(ToLowerCase(cc)); - HTML_ADVANCE_TO(kScriptDataDoubleEscapeEndState); - } else if (IsASCIILower(cc)) { - BufferCharacter(cc); - temporary_buffer_.push_back(static_cast<LChar>(cc)); + temporary_buffer_.push_back(static_cast<LChar>(ToLowerCase(cc))); HTML_ADVANCE_TO(kScriptDataDoubleEscapeEndState); } else HTML_RECONSUME_IN(kScriptDataDoubleEscapedState); @@ -753,17 +700,12 @@ END_STATE() HTML_BEGIN_STATE(kBeforeAttributeNameState) { - if (IsTokenizerWhitespace(cc)) + if (IsTokenizerWhitespace(cc)) { HTML_ADVANCE_TO(kBeforeAttributeNameState); - else if (cc == '/') + } else if (cc == '/') { HTML_ADVANCE_TO(kSelfClosingStartTagState); - else if (cc == '>') + } else if (cc == '>') { return EmitAndResumeIn(source, HTMLTokenizer::kDataState); - else if (IsASCIIUpper(cc)) { - token_->AddNewAttribute(); - token_->BeginAttributeName(source.NumberOfCharactersConsumed()); - token_->AppendToAttributeName(ToLowerCase(cc)); - HTML_ADVANCE_TO(kAttributeNameState); } else if (cc == kEndOfFileMarker) { ParseError(); HTML_RECONSUME_IN(kDataState); @@ -772,7 +714,7 @@ ParseError(); token_->AddNewAttribute(); token_->BeginAttributeName(source.NumberOfCharactersConsumed()); - token_->AppendToAttributeName(cc); + token_->AppendToAttributeName(ToLowerCaseIfAlpha(cc)); HTML_ADVANCE_TO(kAttributeNameState); } } @@ -791,9 +733,6 @@ } else if (cc == '>') { token_->EndAttributeName(source.NumberOfCharactersConsumed()); return EmitAndResumeIn(source, HTMLTokenizer::kDataState); - } else if (IsASCIIUpper(cc)) { - token_->AppendToAttributeName(ToLowerCase(cc)); - HTML_ADVANCE_TO(kAttributeNameState); } else if (cc == kEndOfFileMarker) { ParseError(); token_->EndAttributeName(source.NumberOfCharactersConsumed()); @@ -801,26 +740,21 @@ } else { if (cc == '"' || cc == '\'' || cc == '<' || cc == '=') ParseError(); - token_->AppendToAttributeName(cc); + token_->AppendToAttributeName(ToLowerCaseIfAlpha(cc)); HTML_ADVANCE_TO(kAttributeNameState); } } END_STATE() HTML_BEGIN_STATE(kAfterAttributeNameState) { - if (IsTokenizerWhitespace(cc)) + if (IsTokenizerWhitespace(cc)) { HTML_ADVANCE_TO(kAfterAttributeNameState); - else if (cc == '/') + } else if (cc == '/') { HTML_ADVANCE_TO(kSelfClosingStartTagState); - else if (cc == '=') + } else if (cc == '=') { HTML_ADVANCE_TO(kBeforeAttributeValueState); - else if (cc == '>') + } else if (cc == '>') { return EmitAndResumeIn(source, HTMLTokenizer::kDataState); - else if (IsASCIIUpper(cc)) { - token_->AddNewAttribute(); - token_->BeginAttributeName(source.NumberOfCharactersConsumed()); - token_->AppendToAttributeName(ToLowerCase(cc)); - HTML_ADVANCE_TO(kAttributeNameState); } else if (cc == kEndOfFileMarker) { ParseError(); HTML_RECONSUME_IN(kDataState); @@ -829,7 +763,7 @@ ParseError(); token_->AddNewAttribute(); token_->BeginAttributeName(source.NumberOfCharactersConsumed()); - token_->AppendToAttributeName(cc); + token_->AppendToAttributeName(ToLowerCaseIfAlpha(cc)); HTML_ADVANCE_TO(kAttributeNameState); } } @@ -1154,11 +1088,8 @@ END_STATE() HTML_BEGIN_STATE(kBeforeDOCTYPENameState) { - if (IsTokenizerWhitespace(cc)) + if (IsTokenizerWhitespace(cc)) { HTML_ADVANCE_TO(kBeforeDOCTYPENameState); - else if (IsASCIIUpper(cc)) { - token_->BeginDOCTYPE(ToLowerCase(cc)); - HTML_ADVANCE_TO(kDOCTYPENameState); } else if (cc == '>') { ParseError(); token_->BeginDOCTYPE(); @@ -1170,26 +1101,23 @@ token_->SetForceQuirks(); return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState); } else { - token_->BeginDOCTYPE(cc); + token_->BeginDOCTYPE(ToLowerCaseIfAlpha(cc)); HTML_ADVANCE_TO(kDOCTYPENameState); } } END_STATE() HTML_BEGIN_STATE(kDOCTYPENameState) { - if (IsTokenizerWhitespace(cc)) + if (IsTokenizerWhitespace(cc)) { HTML_ADVANCE_TO(kAfterDOCTYPENameState); - else if (cc == '>') + } else if (cc == '>') { return EmitAndResumeIn(source, HTMLTokenizer::kDataState); - else if (IsASCIIUpper(cc)) { - token_->AppendToName(ToLowerCase(cc)); - HTML_ADVANCE_TO(kDOCTYPENameState); } else if (cc == kEndOfFileMarker) { ParseError(); token_->SetForceQuirks(); return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState); } else { - token_->AppendToName(cc); + token_->AppendToName(ToLowerCaseIfAlpha(cc)); HTML_ADVANCE_TO(kDOCTYPENameState); } }
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp index e183d8e5..f38296b 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp +++ b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp
@@ -4,15 +4,28 @@ #include "core/html/shadow/MediaRemotingInterstitial.h" +#include "core/dom/TaskRunnerHelper.h" #include "core/html/HTMLImageElement.h" #include "core/html/HTMLVideoElement.h" #include "core/html/shadow/MediaRemotingElements.h" +namespace { + +constexpr double kStyleChangeTransSeconds = 0.2; +constexpr double kHiddenAnimationSeconds = 0.3; + +} // namespace + namespace blink { MediaRemotingInterstitial::MediaRemotingInterstitial( HTMLVideoElement& videoElement) : HTMLDivElement(videoElement.GetDocument()), + toggle_insterstitial_timer_( + TaskRunnerHelper::Get(TaskType::kUnthrottled, + &videoElement.GetDocument()), + this, + &MediaRemotingInterstitial::ToggleInterstitialTimerFired), video_element_(&videoElement) { SetShadowPseudoId(AtomicString("-internal-media-remoting-interstitial")); background_image_ = HTMLImageElement::Create(videoElement.GetDocument()); @@ -32,13 +45,43 @@ } void MediaRemotingInterstitial::Show() { + DCHECK(!should_be_visible_); + if (toggle_insterstitial_timer_.IsActive()) + toggle_insterstitial_timer_.Stop(); + should_be_visible_ = true; RemoveInlineStyleProperty(CSSPropertyDisplay); exit_button_->OnShown(); + toggle_insterstitial_timer_.StartOneShot(kStyleChangeTransSeconds, + BLINK_FROM_HERE); } void MediaRemotingInterstitial::Hide() { - SetInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); + DCHECK(should_be_visible_); + if (toggle_insterstitial_timer_.IsActive()) + toggle_insterstitial_timer_.Stop(); + should_be_visible_ = false; + SetInlineStyleProperty(CSSPropertyOpacity, 0, + CSSPrimitiveValue::UnitType::kNumber); exit_button_->OnHidden(); + toggle_insterstitial_timer_.StartOneShot(kHiddenAnimationSeconds, + BLINK_FROM_HERE); +} + +void MediaRemotingInterstitial::ToggleInterstitialTimerFired(TimerBase*) { + toggle_insterstitial_timer_.Stop(); + if (should_be_visible_) { + SetInlineStyleProperty(CSSPropertyOpacity, 1, + CSSPrimitiveValue::UnitType::kNumber); + } else { + SetInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); + } +} + +void MediaRemotingInterstitial::DidMoveToNewDocument(Document& old_document) { + toggle_insterstitial_timer_.MoveToNewTaskRunner( + TaskRunnerHelper::Get(TaskType::kUnthrottled, &GetDocument())); + + HTMLDivElement::DidMoveToNewDocument(old_document); } void MediaRemotingInterstitial::OnPosterImageChanged() {
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.h b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.h index 0baaa2b..75a0d4d4 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.h +++ b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.h
@@ -34,6 +34,7 @@ // Show/Hide Media Remoting interstitial. void Show(); void Hide(); + void OnPosterImageChanged(); HTMLVideoElement& GetVideoElement() const { return *video_element_; } @@ -43,7 +44,15 @@ private: // Node override. bool IsMediaRemotingInterstitial() const override { return true; } + void DidMoveToNewDocument(Document&) override; + void ToggleInterstitialTimerFired(TimerBase*); + + // Indicates whether the interstitial should be visible. It is set/changed + // when SHow()/Hide() is called. + bool should_be_visible_ = false; + + TaskRunnerTimer<MediaRemotingInterstitial> toggle_insterstitial_timer_; Member<HTMLVideoElement> video_element_; Member<HTMLImageElement> background_image_; Member<MediaRemotingExitButtonElement> exit_button_;
diff --git a/third_party/WebKit/Source/core/layout/LayoutInline.cpp b/third_party/WebKit/Source/core/layout/LayoutInline.cpp index 0a4eda2..f33c3e2 100644 --- a/third_party/WebKit/Source/core/layout/LayoutInline.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
@@ -343,8 +343,18 @@ // of this inline. We take all of the children after |beforeChild| and put // them in a clone of this object. RefPtr<ComputedStyle> new_style = - ComputedStyle::CreateAnonymousStyleWithDisplay( - ContainingBlock()->StyleRef(), EDisplay::kBlock); + ComputedStyle::CreateAnonymousStyleWithDisplay(StyleRef(), + EDisplay::kBlock); + // The anon block we create here doesn't exist in the CSS spec, so + // we need to ensure that any blocks it contains inherit properly + // from its true parent. This means they must use the direction set by the + // anon block's containing block, so we need to prevent the anon block + // from inheriting direction from the inline. If there are any other + // inheritable properties that apply to block and inline elements + // but only affect the layout of children we will want to special-case + // them here too. Writing-mode would be one if it didn't create a + // formatting context of its own, removing the need for continuations. + new_style->SetDirection(ContainingBlock()->StyleRef().Direction()); // If inside an inline affected by in-flow positioning the block needs to be // affected by it too. Giving the block a layer like this allows it to
diff --git a/third_party/WebKit/Source/core/layout/line/LineBoxList.cpp b/third_party/WebKit/Source/core/layout/line/LineBoxList.cpp index 8cdb236..fedc8b7b 100644 --- a/third_party/WebKit/Source/core/layout/line/LineBoxList.cpp +++ b/third_party/WebKit/Source/core/layout/line/LineBoxList.cpp
@@ -289,18 +289,20 @@ // Try to figure out which line box we belong in. First try to find a previous // line box by examining our siblings. If we are a float inside an inline then - // check the siblings of our inline parent. If we didn't find a line box, then - // use our parent's first line box. + // check our nearest inline ancestor with siblings. If we didn't find a line + // box, then use our parent's first line box. RootInlineBox* box = nullptr; LineLayoutItem curr = child.PreviousSibling(); if (child.IsFloating() && !curr) { - LineLayoutInline outer_inline; - for (LineLayoutItem parent = child.Parent(); - parent && parent.IsLayoutInline() && !parent.PreviousSibling(); - parent = parent.Parent()) - outer_inline = LineLayoutInline(parent); - if (outer_inline) - curr = outer_inline.PreviousSibling(); + DCHECK(child.Parent()); + if (child.Parent().IsLayoutInline()) { + LineLayoutItem outer_inline = child.Parent(); + while (outer_inline && !outer_inline.PreviousSibling() && + outer_inline.Parent().IsLayoutInline()) + outer_inline = outer_inline.Parent(); + if (outer_inline) + curr = outer_inline.PreviousSibling(); + } } for (; curr; curr = curr.PreviousSibling()) {
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp index e3a8c51..c0329ed 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
@@ -467,7 +467,7 @@ fetcher_->StopFetching(); return false; } - if (GetFrameLoader().ShouldContinueForNavigationPolicy( + if (GetFrameLoader().ShouldContinueForRedirectNavigationPolicy( request_, SubstituteData(), this, kCheckContentSecurityPolicy, navigation_type_, kNavigationPolicyCurrentTab, load_type_, IsClientRedirect(), nullptr) != kNavigationPolicyCurrentTab) {
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp index aad2404..c03a3c3 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp +++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -654,11 +654,33 @@ return blocked_reason; } +ResourceRequestBlockedReason FrameFetchContext::CanFollowRedirect( + Resource::Type type, + const ResourceRequest& resource_request, + const KURL& url, + const ResourceLoaderOptions& options, + SecurityViolationReportingPolicy reporting_policy, + FetchParameters::OriginRestriction origin_restriction) const { + // CanRequestInternal checks enforced CSP, so check report-only here to ensure + // that violations are sent. + CheckCSPForRequest(resource_request, url, options, reporting_policy, + RedirectStatus::kFollowedRedirect, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly); + return CanRequest(type, resource_request, url, options, reporting_policy, + origin_restriction); +} + ResourceRequestBlockedReason FrameFetchContext::AllowResponse( Resource::Type type, const ResourceRequest& resource_request, const KURL& url, const ResourceLoaderOptions& options) const { + // canRequestInternal only checks enforced policies: check report-only here + // to ensure violations are sent. + CheckCSPForRequest(resource_request, url, options, + SecurityViolationReportingPolicy::kReport, + RedirectStatus::kFollowedRedirect, + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly); ResourceRequestBlockedReason blocked_reason = CanRequestInternal(type, resource_request, url, options, SecurityViolationReportingPolicy::kReport, @@ -732,21 +754,14 @@ break; } - // FIXME: Convert this to check the isolated world's Content Security Policy - // once webkit.org/b/104520 is solved. - bool should_bypass_main_world_csp = - GetFrame()->GetScriptController().ShouldBypassMainWorldCSP() || - options.content_security_policy_option == - kDoNotCheckContentSecurityPolicy; - - if (execution_context_) { - DCHECK(execution_context_->GetContentSecurityPolicy()); - if (!should_bypass_main_world_csp && - !execution_context_->GetContentSecurityPolicy()->AllowRequest( - resource_request.GetRequestContext(), url, - options.content_security_policy_nonce, options.integrity_metadata, - options.parser_disposition, redirect_status, reporting_policy)) - return ResourceRequestBlockedReason::CSP; + // We check the 'report-only' headers before upgrading the request (in + // populateResourceRequest). We check the enforced headers here to ensure we + // block things we ought to block. + if (CheckCSPForRequest( + resource_request, url, options, reporting_policy, redirect_status, + ContentSecurityPolicy::CheckHeaderType::kCheckEnforce) == + ResourceRequestBlockedReason::CSP) { + return ResourceRequestBlockedReason::CSP; } if (type == Resource::kScript || type == Resource::kImportResource) { @@ -834,6 +849,31 @@ return ResourceRequestBlockedReason::kNone; } +ResourceRequestBlockedReason FrameFetchContext::CheckCSPForRequest( + const ResourceRequest& resource_request, + const KURL& url, + const ResourceLoaderOptions& options, + SecurityViolationReportingPolicy reporting_policy, + ResourceRequest::RedirectStatus redirect_status, + ContentSecurityPolicy::CheckHeaderType check_header_type) const { + if (GetFrame()->GetScriptController().ShouldBypassMainWorldCSP() || + options.content_security_policy_option == + kDoNotCheckContentSecurityPolicy) { + return ResourceRequestBlockedReason::kNone; + } + + if (execution_context_) { + DCHECK(execution_context_->GetContentSecurityPolicy()); + if (!execution_context_->GetContentSecurityPolicy()->AllowRequest( + resource_request.GetRequestContext(), url, + options.content_security_policy_nonce, options.integrity_metadata, + options.parser_disposition, redirect_status, reporting_policy, + check_header_type)) + return ResourceRequestBlockedReason::CSP; + } + return ResourceRequestBlockedReason::kNone; +} + bool FrameFetchContext::IsControlledByServiceWorker() const { DCHECK(MasterDocumentLoader()); @@ -960,11 +1000,22 @@ } void FrameFetchContext::PopulateResourceRequest( + const KURL& url, Resource::Type type, const ClientHintsPreferences& hints_preferences, const FetchParameters::ResourceWidth& resource_width, + const ResourceLoaderOptions& options, + SecurityViolationReportingPolicy reporting_policy, ResourceRequest& request) { SetFirstPartyCookieAndRequestorOrigin(request); + + // Before modifying the request for CSP, evaluate report-only headers. This + // allows site owners to learn about requests that are being modified + // (e.g. mixed content that is being upgraded by upgrade-insecure-requests). + CheckCSPForRequest(request, url, options, reporting_policy, + request.GetRedirectStatus(), + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly); + ModifyRequestForCSP(request); AddClientHintsIfNecessary(hints_preferences, resource_width, request); AddCSPHeaderIfNecessary(type, request);
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.h b/third_party/WebKit/Source/core/loader/FrameFetchContext.h index 1bf5355a..6f43e8b 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContext.h +++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.h
@@ -32,11 +32,13 @@ #define FrameFetchContext_h #include "core/CoreExport.h" +#include "core/frame/csp/ContentSecurityPolicy.h" #include "core/loader/BaseFetchContext.h" #include "platform/heap/Handle.h" #include "platform/loader/fetch/FetchParameters.h" #include "platform/loader/fetch/ResourceFetcher.h" #include "platform/loader/fetch/ResourceRequest.h" +#include "platform/network/ContentSecurityPolicyParsers.h" #include "platform/wtf/Forward.h" namespace blink { @@ -123,6 +125,13 @@ const ResourceLoaderOptions&, SecurityViolationReportingPolicy, FetchParameters::OriginRestriction) const override; + ResourceRequestBlockedReason CanFollowRedirect( + Resource::Type, + const ResourceRequest&, + const KURL&, + const ResourceLoaderOptions&, + SecurityViolationReportingPolicy, + FetchParameters::OriginRestriction) const override; ResourceRequestBlockedReason AllowResponse( Resource::Type, const ResourceRequest&, @@ -141,9 +150,12 @@ void AddConsoleMessage(const String&, LogMessageType = kLogErrorMessage) const override; - void PopulateResourceRequest(Resource::Type, + void PopulateResourceRequest(const KURL&, + Resource::Type, const ClientHintsPreferences&, const FetchParameters::ResourceWidth&, + const ResourceLoaderOptions&, + SecurityViolationReportingPolicy, ResourceRequest&) override; void SetFirstPartyCookieAndRequestorOrigin(ResourceRequest&) override; @@ -188,6 +200,14 @@ FetchParameters::OriginRestriction, ResourceRequest::RedirectStatus) const; + ResourceRequestBlockedReason CheckCSPForRequest( + const ResourceRequest&, + const KURL&, + const ResourceLoaderOptions&, + SecurityViolationReportingPolicy, + ResourceRequest::RedirectStatus, + ContentSecurityPolicy::CheckHeaderType) const; + Member<DocumentLoader> document_loader_; };
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp index 3de3325..3381bf4e 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp +++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -469,6 +469,69 @@ } } +// Tests that CanFollowRedirect() checks both report-only and enforced CSP +// headers. +TEST_F(FrameFetchContextTest, RedirectChecksReportedAndEnforcedCSP) { + ContentSecurityPolicy* policy = document->GetContentSecurityPolicy(); + policy->DidReceiveHeader("script-src https://foo.test", + kContentSecurityPolicyHeaderTypeEnforce, + kContentSecurityPolicyHeaderSourceHTTP); + policy->DidReceiveHeader("script-src https://bar.test", + kContentSecurityPolicyHeaderTypeReport, + kContentSecurityPolicyHeaderSourceHTTP); + KURL url(KURL(), "http://baz.test"); + ResourceRequest resource_request(url); + resource_request.SetRequestContext(WebURLRequest::kRequestContextScript); + EXPECT_EQ( + ResourceRequestBlockedReason::CSP, + fetch_context->CanFollowRedirect( + Resource::kScript, resource_request, url, ResourceLoaderOptions(), + SecurityViolationReportingPolicy::kReport, + FetchParameters::kUseDefaultOriginRestrictionForType)); + EXPECT_EQ(2u, policy->violation_reports_sent_.size()); +} + +// Tests that AllowResponse() checks both report-only and enforced CSP headers. +TEST_F(FrameFetchContextTest, AllowResponseChecksReportedAndEnforcedCSP) { + ContentSecurityPolicy* policy = document->GetContentSecurityPolicy(); + policy->DidReceiveHeader("script-src https://foo.test", + kContentSecurityPolicyHeaderTypeEnforce, + kContentSecurityPolicyHeaderSourceHTTP); + policy->DidReceiveHeader("script-src https://bar.test", + kContentSecurityPolicyHeaderTypeReport, + kContentSecurityPolicyHeaderSourceHTTP); + KURL url(KURL(), "http://baz.test"); + ResourceRequest resource_request(url); + resource_request.SetRequestContext(WebURLRequest::kRequestContextScript); + EXPECT_EQ(ResourceRequestBlockedReason::CSP, + fetch_context->AllowResponse(Resource::kScript, resource_request, + url, ResourceLoaderOptions())); + EXPECT_EQ(2u, policy->violation_reports_sent_.size()); +} + +// Tests that PopulateResourceRequest() checks report-only CSP headers, so that +// any violations are reported before the request is modified. +TEST_F(FrameFetchContextTest, PopulateResourceRequestChecksReportOnlyCSP) { + ContentSecurityPolicy* policy = document->GetContentSecurityPolicy(); + policy->DidReceiveHeader( + "upgrade-insecure-requests; script-src https://foo.test", + kContentSecurityPolicyHeaderTypeEnforce, + kContentSecurityPolicyHeaderSourceHTTP); + policy->DidReceiveHeader("script-src https://bar.test", + kContentSecurityPolicyHeaderTypeReport, + kContentSecurityPolicyHeaderSourceHTTP); + KURL url(KURL(), "http://baz.test"); + ResourceRequest resource_request(url); + resource_request.SetRequestContext(WebURLRequest::kRequestContextScript); + fetch_context->PopulateResourceRequest( + url, Resource::kScript, ClientHintsPreferences(), + FetchParameters::ResourceWidth(), ResourceLoaderOptions(), + SecurityViolationReportingPolicy::kReport, resource_request); + EXPECT_EQ(1u, policy->violation_reports_sent_.size()); + // Check that the resource was upgraded to a secure URL. + EXPECT_EQ(KURL(KURL(), "https://baz.test"), resource_request.Url()); +} + class FrameFetchContextHintsTest : public FrameFetchContextTest { public: FrameFetchContextHintsTest() {}
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp index 8cd77648..79b097f 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -139,6 +139,63 @@ document, UseCounter::kLegacyProtocolEmbeddedAsSubresource); } +static NavigationPolicy MaybeCheckCSP( + const ResourceRequest& request, + NavigationType type, + LocalFrame* frame, + NavigationPolicy policy, + bool should_check_main_world_content_security_policy, + bool browser_side_navigation_enabled, + ContentSecurityPolicy::CheckHeaderType check_header_type) { + // If we're loading content into |frame| (NavigationPolicyCurrentTab), check + // against the parent's Content Security Policy and kill the load if that + // check fails, unless we should bypass the main world's CSP. + if (policy == kNavigationPolicyCurrentTab && + should_check_main_world_content_security_policy && + // TODO(arthursonzogni): 'frame-src' check is disabled on the + // renderer side with browser-side-navigation, but is enforced on the + // browser side. See http://crbug.com/692595 for understanding why it + // can't be enforced on both sides instead. + !browser_side_navigation_enabled) { + Frame* parent_frame = frame->Tree().Parent(); + if (parent_frame) { + ContentSecurityPolicy* parent_policy = + parent_frame->GetSecurityContext()->GetContentSecurityPolicy(); + if (!parent_policy->AllowFrameFromSource( + request.Url(), request.GetRedirectStatus(), + SecurityViolationReportingPolicy::kReport, check_header_type)) { + // Fire a load event, as timing attacks would otherwise reveal that the + // frame was blocked. This way, it looks like every other cross-origin + // page load. + frame->GetDocument()->EnforceSandboxFlags(kSandboxOrigin); + frame->Owner()->DispatchLoad(); + return kNavigationPolicyIgnore; + } + } + } + + bool is_form_submission = type == kNavigationTypeFormSubmitted || + type == kNavigationTypeFormResubmitted; + if (is_form_submission && + // 'form-action' check in the frame that is navigating is disabled on the + // renderer side when PlzNavigate is enabled, but is enforced on the + // browser side instead. + // N.B. check in the frame that initiates the navigation stills occurs in + // blink and is not enforced on the browser-side. + // TODO(arthursonzogni) The 'form-action' check should be fully disabled + // in blink when browser side navigation is enabled, except when the form + // submission doesn't trigger a navigation(i.e. javascript urls). Please + // see https://crbug.com/701749 + !browser_side_navigation_enabled && + !frame->GetDocument()->GetContentSecurityPolicy()->AllowFormAction( + request.Url(), request.GetRedirectStatus(), + SecurityViolationReportingPolicy::kReport, check_header_type)) { + return kNavigationPolicyIgnore; + } + + return policy; +} + ResourceRequest FrameLoader::ResourceRequestForReload( FrameLoadType frame_load_type, const KURL& override_url, @@ -1370,51 +1427,12 @@ return kNavigationPolicyCurrentTab; Settings* settings = frame_->GetSettings(); - bool browser_side_navigation_enabled = - settings && settings->GetBrowserSideNavigationEnabled(); - - // If we're loading content into |m_frame| (NavigationPolicyCurrentTab), check - // against the parent's Content Security Policy and kill the load if that - // check fails, unless we should bypass the main world's CSP. - if (policy == kNavigationPolicyCurrentTab && - should_check_main_world_content_security_policy == - kCheckContentSecurityPolicy && - // TODO(arthursonzogni): 'frame-src' check is disabled on the - // renderer side with browser-side-navigation, but is enforced on the - // browser side. See http://crbug.com/692595 for understanding why it - // can't be enforced on both sides instead. - !browser_side_navigation_enabled) { - Frame* parent_frame = frame_->Tree().Parent(); - if (parent_frame) { - ContentSecurityPolicy* parent_policy = - parent_frame->GetSecurityContext()->GetContentSecurityPolicy(); - if (!parent_policy->AllowFrameFromSource(request.Url(), - request.GetRedirectStatus())) { - // Fire a load event, as timing attacks would otherwise reveal that the - // frame was blocked. This way, it looks like every other cross-origin - // page load. - frame_->GetDocument()->EnforceSandboxFlags(kSandboxOrigin); - frame_->Owner()->DispatchLoad(); - return kNavigationPolicyIgnore; - } - } - } - - bool is_form_submission = type == kNavigationTypeFormSubmitted || - type == kNavigationTypeFormResubmitted; - if (is_form_submission && - // 'form-action' check in the frame that is navigating is disabled on the - // renderer side when PlzNavigate is enabled, but is enforced on the - // browser side instead. - // N.B. check in the frame that initiates the navigation stills occurs in - // blink and is not enforced on the browser-side. - // TODO(arthursonzogni) The 'form-action' check should be fully disabled - // in blink when browser side navigation is enabled, except when the form - // submission doesn't trigger a navigation(i.e. javascript urls). Please - // see https://crbug.com/701749 - !browser_side_navigation_enabled && - !frame_->GetDocument()->GetContentSecurityPolicy()->AllowFormAction( - request.Url(), request.GetRedirectStatus())) { + if (MaybeCheckCSP(request, type, frame_, policy, + should_check_main_world_content_security_policy == + kCheckContentSecurityPolicy, + settings && settings->GetBrowserSideNavigationEnabled(), + ContentSecurityPolicy::CheckHeaderType::kCheckEnforce) == + kNavigationPolicyIgnore) { return kNavigationPolicyIgnore; } @@ -1439,6 +1457,31 @@ return kNavigationPolicyIgnore; } +NavigationPolicy FrameLoader::ShouldContinueForRedirectNavigationPolicy( + const ResourceRequest& request, + const SubstituteData& substitute_data, + DocumentLoader* loader, + ContentSecurityPolicyDisposition + should_check_main_world_content_security_policy, + NavigationType type, + NavigationPolicy policy, + FrameLoadType frame_load_type, + bool is_client_redirect, + HTMLFormElement* form) { + Settings* settings = frame_->GetSettings(); + // Check report-only CSP policies, which are not checked by + // ShouldContinueForNavigationPolicy. + MaybeCheckCSP(request, type, frame_, policy, + should_check_main_world_content_security_policy == + kCheckContentSecurityPolicy, + settings && settings->GetBrowserSideNavigationEnabled(), + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly); + return ShouldContinueForNavigationPolicy( + request, substitute_data, loader, + should_check_main_world_content_security_policy, type, policy, + frame_load_type, is_client_redirect, form); +} + NavigationPolicy FrameLoader::CheckLoadCanStart( FrameLoadRequest& frame_load_request, FrameLoadType type, @@ -1453,6 +1496,20 @@ // request. ResourceRequest& resource_request = frame_load_request.GetResourceRequest(); RecordLatestRequiredCSP(); + // Before modifying the request, check report-only CSP headers to give the + // site owner a chance to learn about requests that need to be modified. + // + // TODO(estark): this doesn't work with --enable-browser-side-navigation, + // wherein 'frame-src' is checked in the browser process. Figure out what to + // do; maybe with browser-side navigation the upgrade should be happening in + // the browser process too. See also https://crbug.com/692595 + Settings* settings = frame_->GetSettings(); + MaybeCheckCSP( + resource_request, navigation_type, frame_, navigation_policy, + frame_load_request.ShouldCheckMainWorldContentSecurityPolicy() == + kCheckContentSecurityPolicy, + settings && settings->GetBrowserSideNavigationEnabled(), + ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly); ModifyRequestForCSP(resource_request, nullptr); return ShouldContinueForNavigationPolicy(
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.h b/third_party/WebKit/Source/core/loader/FrameLoader.h index 7d7a0f3a..7ea22eb 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoader.h +++ b/third_party/WebKit/Source/core/loader/FrameLoader.h
@@ -202,6 +202,19 @@ bool is_client_redirect, HTMLFormElement*); + // Like ShouldContinueForNavigationPolicy, but should be used when following + // redirects. + NavigationPolicy ShouldContinueForRedirectNavigationPolicy( + const ResourceRequest&, + const SubstituteData&, + DocumentLoader*, + ContentSecurityPolicyDisposition, + NavigationType, + NavigationPolicy, + FrameLoadType, + bool is_client_redirect, + HTMLFormElement*); + // Note: When a PlzNavigtate navigation is handled by the client, we will // have created a dummy provisional DocumentLoader, so this will return true // while the client handles the navigation.
diff --git a/third_party/WebKit/Source/core/page/FocusController.cpp b/third_party/WebKit/Source/core/page/FocusController.cpp index dcf0fbf..cbb6f52 100644 --- a/third_party/WebKit/Source/core/page/FocusController.cpp +++ b/third_party/WebKit/Source/core/page/FocusController.cpp
@@ -933,7 +933,11 @@ start = ToHTMLFrameOwnerElement(from->Owner()); } - return AdvanceFocusInDocumentOrder(to, start, type, false, + // If we're coming from a parent frame, we need to restart from the first or + // last focusable element. + bool initial_focus = to->Tree().Parent() == from; + + return AdvanceFocusInDocumentOrder(to, start, type, initial_focus, source_capabilities); } @@ -998,7 +1002,11 @@ } if (element == document->FocusedElement()) { - // Focus wrapped around to the same element. + // Focus is either coming from a remote frame or has wrapped around. + if (FocusedFrame() != document->GetFrame()) { + SetFocusedFrame(document->GetFrame()); + DispatchFocusEvent(*document, *element); + } return true; } @@ -1012,14 +1020,17 @@ return false; document->ClearFocusedElement(); - SetFocusedFrame(owner->ContentFrame()); - // If contentFrame is remote, continue the search for focusable - // elements in that frame's process. - // clearFocusedElement() fires events that might detach the - // contentFrame, hence the need to null-check it again. + // If ContentFrame is remote, continue the search for focusable elements in + // that frame's process. The target ContentFrame's process will grab focus + // from inside AdvanceFocusInDocumentOrder(). + // + // ClearFocusedElement() fires events that might detach the contentFrame, + // hence the need to null-check it again. if (owner->ContentFrame() && owner->ContentFrame()->IsRemoteFrame()) ToRemoteFrame(owner->ContentFrame())->AdvanceFocus(type, frame); + else + SetFocusedFrame(owner->ContentFrame()); return true; }
diff --git a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp index 184f9ae..80a7b90 100644 --- a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp +++ b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
@@ -216,26 +216,39 @@ control_point_distance += adjustment; } +// Holds text decoration painting values to be computed once and subsequently +// use multiple times to handle decoration paint order correctly. See also +// https://www.w3.org/TR/css-text-decor-3/#painting-order +struct DecorationInfo final { + STACK_ALLOCATED(); + + LayoutUnit width; + FloatPoint local_origin; + bool antialias; + float baseline; + const ComputedStyle* style; + const SimpleFontData* font_data; + float thickness; + float double_offset; +}; + class AppliedDecorationPainter final { STACK_ALLOCATED(); public: AppliedDecorationPainter(GraphicsContext& context, - FloatPoint start_point, - float width, + const DecorationInfo& decoration_info, + float start_point_y_offset, const AppliedTextDecoration& decoration, - float thickness, float double_offset, - int wavy_offset_factor, - bool antialias_decoration) + int wavy_offset_factor) : context_(context), - start_point_(start_point), - width_(width), + start_point_(decoration_info.local_origin + + FloatPoint(0, start_point_y_offset)), + decoration_info_(decoration_info), decoration_(decoration), - thickness_(thickness), double_offset_(double_offset), - wavy_offset_factor_(wavy_offset_factor), - should_antialias_(antialias_decoration){}; + wavy_offset_factor_(wavy_offset_factor){}; void Paint(); FloatRect DecorationBounds(); @@ -247,24 +260,24 @@ Path PrepareDottedDashedStrokePath(); GraphicsContext& context_; - FloatPoint start_point_; - float width_; + const FloatPoint start_point_; + const DecorationInfo& decoration_info_; const AppliedTextDecoration& decoration_; - float thickness_; const float double_offset_; const int wavy_offset_factor_; - bool should_antialias_; }; Path AppliedDecorationPainter::PrepareDottedDashedStrokePath() { // These coordinate transforms need to match what's happening in // GraphicsContext's drawLineForText and drawLine. - int y = floorf(start_point_.Y() + std::max<float>(thickness_ / 2.0f, 0.5f)); + int y = floorf(start_point_.Y() + + std::max<float>(decoration_info_.thickness / 2.0f, 0.5f)); Path stroke_path; FloatPoint rounded_start_point(start_point_.X(), y); - FloatPoint rounded_end_point(rounded_start_point + FloatPoint(width_, 0)); + FloatPoint rounded_end_point(rounded_start_point + + FloatPoint(decoration_info_.width, 0)); context_.AdjustLineToPixelBoundaries(rounded_start_point, rounded_end_point, - roundf(thickness_), + roundf(decoration_info_.thickness), context_.GetStrokeStyle()); stroke_path.MoveTo(rounded_start_point); stroke_path.AddLineTo(rounded_end_point); @@ -273,7 +286,7 @@ FloatRect AppliedDecorationPainter::DecorationBounds() { StrokeData stroke_data; - stroke_data.SetThickness(thickness_); + stroke_data.SetThickness(decoration_info_.thickness); switch (decoration_.Style()) { case kTextDecorationStyleDotted: @@ -289,14 +302,17 @@ break; case kTextDecorationStyleDouble: if (double_offset_ > 0) { - return FloatRect(start_point_.X(), start_point_.Y(), width_, - double_offset_ + thickness_); + return FloatRect(start_point_.X(), start_point_.Y(), + decoration_info_.width, + double_offset_ + decoration_info_.thickness); } return FloatRect(start_point_.X(), start_point_.Y() + double_offset_, - width_, -double_offset_ + thickness_); + decoration_info_.width, + -double_offset_ + decoration_info_.thickness); break; case kTextDecorationStyleSolid: - return FloatRect(start_point_.X(), start_point_.Y(), width_, thickness_); + return FloatRect(start_point_.X(), start_point_.Y(), + decoration_info_.width, decoration_info_.thickness); default: break; } @@ -315,14 +331,14 @@ break; case kTextDecorationStyleDotted: case kTextDecorationStyleDashed: - context_.SetShouldAntialias(should_antialias_); + context_.SetShouldAntialias(decoration_info_.antialias); // Fall through default: - context_.DrawLineForText(start_point_, width_); + context_.DrawLineForText(start_point_, decoration_info_.width); if (decoration_.Style() == kTextDecorationStyleDouble) { context_.DrawLineForText(start_point_ + FloatPoint(0, double_offset_), - width_); + decoration_info_.width); } } } @@ -362,10 +378,11 @@ Path AppliedDecorationPainter::PrepareWavyStrokePath() { FloatPoint p1(start_point_ + FloatPoint(0, double_offset_ * wavy_offset_factor_)); - FloatPoint p2(start_point_ + - FloatPoint(width_, double_offset_ * wavy_offset_factor_)); + FloatPoint p2( + start_point_ + + FloatPoint(decoration_info_.width, double_offset_ * wavy_offset_factor_)); - context_.AdjustLineToPixelBoundaries(p1, p2, thickness_, + context_.AdjustLineToPixelBoundaries(p1, p2, decoration_info_.thickness, context_.GetStrokeStyle()); Path path; @@ -379,12 +396,13 @@ // The minimum height of the curve is also approximately 3 pixels. Increases // the curve's height // as strockThickness increases to make the curve looks better. - float control_point_distance = 3 * std::max<float>(2, thickness_); + float control_point_distance = + 3 * std::max<float>(2, decoration_info_.thickness); // Increment used to form the diamond shape between start point (p1), control // points and end point (p2) along the axis of the decoration. Makes the // curve wider as strockThickness increases to make the curve looks better. - float step = 2 * std::max<float>(2, thickness_); + float step = 2 * std::max<float>(2, decoration_info_.thickness); bool is_vertical_line = (p1.X() == p2.X()); @@ -467,6 +485,177 @@ .size() > 0; } +static void PrepareContextForDecoration(GraphicsContext& context, + GraphicsContextStateSaver& state_saver, + bool is_horizontal, + const TextPainter::Style& text_style, + const LayoutTextCombine* combined_text, + const LayoutRect& box_rect) { + TextPainter::UpdateGraphicsContext(context, text_style, is_horizontal, + state_saver); + if (combined_text) + context.ConcatCTM(TextPainter::Rotation(box_rect, TextPainter::kClockwise)); +} + +static void RestoreContextFromDecoration(GraphicsContext& context, + const LayoutTextCombine* combined_text, + const LayoutRect& box_rect) { + if (combined_text) { + context.ConcatCTM( + TextPainter::Rotation(box_rect, TextPainter::kCounterclockwise)); + } +} + +static void ComputeDecorationInfo( + DecorationInfo& decoration_info, + const InlineTextBox& box, + const LayoutPoint& box_origin, + const Vector<AppliedTextDecoration>& decorations) { + LayoutPoint local_origin = LayoutPoint(box_origin); + LayoutUnit width = box.LogicalWidth(); + if (box.Truncation() != kCNoTruncation) { + bool ltr = box.IsLeftToRightDirection(); + bool flow_is_ltr = + box.GetLineLayoutItem().Style()->IsLeftToRightDirection(); + width = LayoutUnit(box.GetLineLayoutItem().Width( + ltr == flow_is_ltr ? box.Start() : box.Start() + box.Truncation(), + ltr == flow_is_ltr ? box.Truncation() : box.Len() - box.Truncation(), + box.TextPos(), flow_is_ltr ? TextDirection::kLtr : TextDirection::kRtl, + box.IsFirstLineStyle())); + if (!flow_is_ltr) { + local_origin.Move(box.LogicalWidth() - width, LayoutUnit()); + } + } + decoration_info.width = width; + decoration_info.local_origin = FloatPoint(local_origin); + + decoration_info.antialias = ShouldSetDecorationAntialias(decorations); + + decoration_info.style = + LineLayoutAPIShim::LayoutObjectFrom(box.GetLineLayoutItem()) + ->Style(box.IsFirstLineStyle()); + decoration_info.font_data = decoration_info.style->GetFont().PrimaryFont(); + DCHECK(decoration_info.font_data); + decoration_info.baseline = + decoration_info.font_data + ? decoration_info.font_data->GetFontMetrics().FloatAscent() + : 0; + + // Set the thick of the line to be 10% (or something else ?)of the computed + // font size and not less than 1px. Using computedFontSize should take care + // of zoom as well. + + // Update Underline thickness, in case we have Faulty Font Metrics calculating + // underline thickness by old method. + float text_decoration_thickness = 0.0; + int font_height_int = 0; + if (decoration_info.font_data) { + text_decoration_thickness = + decoration_info.font_data->GetFontMetrics().UnderlineThickness(); + font_height_int = + (int)(decoration_info.font_data->GetFontMetrics().FloatHeight() + 0.5); + } + if ((text_decoration_thickness == 0.f) || + (text_decoration_thickness >= (font_height_int >> 1))) { + text_decoration_thickness = + std::max(1.f, decoration_info.style->ComputedFontSize() / 10.f); + } + decoration_info.thickness = text_decoration_thickness; + + // Offset between lines - always non-zero, so lines never cross each other. + decoration_info.double_offset = text_decoration_thickness + 1.f; +} + +static void PaintDecorationsExceptLineThrough( + TextPainter& text_painter, + bool& has_line_through_decoration, + const InlineTextBox& box, + const DecorationInfo& decoration_info, + const PaintInfo& paint_info, + const Vector<AppliedTextDecoration>& decorations) { + GraphicsContext& context = paint_info.context; + GraphicsContextStateSaver state_saver(context); + context.SetStrokeThickness(decoration_info.thickness); + bool skip_intercepts = + decoration_info.style->GetTextDecorationSkip() & kTextDecorationSkipInk; + + // text-underline-position may flip underline and overline. + ResolvedUnderlinePosition underline_position = + ResolveUnderlinePosition(*decoration_info.style, &box); + bool flip_underline_and_overline = false; + if (underline_position == ResolvedUnderlinePosition::kOver) { + flip_underline_and_overline = true; + underline_position = ResolvedUnderlinePosition::kUnder; + } + + for (const AppliedTextDecoration& decoration : decorations) { + TextDecoration lines = decoration.Lines(); + if (flip_underline_and_overline) { + lines = static_cast<TextDecoration>( + lines ^ (kTextDecorationUnderline | kTextDecorationOverline)); + } + if ((lines & kTextDecorationUnderline) && decoration_info.font_data) { + const int underline_offset = + ComputeUnderlineOffset(underline_position, *decoration_info.style, + decoration_info.font_data->GetFontMetrics(), + &box, decoration_info.thickness); + AppliedDecorationPainter decoration_painter( + context, decoration_info, underline_offset, decoration, + decoration_info.double_offset, 1); + if (skip_intercepts) { + text_painter.ClipDecorationsStripe( + -decoration_info.baseline + + decoration_painter.DecorationBounds().Y() - + decoration_info.local_origin.Y(), + decoration_painter.DecorationBounds().Height(), + decoration_info.thickness); + } + decoration_painter.Paint(); + } + if (lines & kTextDecorationOverline) { + const int overline_offset = + ComputeOverlineOffset(*decoration_info.style, &box); + AppliedDecorationPainter decoration_painter( + context, decoration_info, overline_offset, decoration, + -decoration_info.double_offset, 1); + if (skip_intercepts) { + text_painter.ClipDecorationsStripe( + -decoration_info.baseline + + decoration_painter.DecorationBounds().Y() - + decoration_info.local_origin.Y(), + decoration_painter.DecorationBounds().Height(), + decoration_info.thickness); + } + decoration_painter.Paint(); + } + // We could instead build a vector of the TextDecoration instances needing + // line-through but this is a rare case so better to avoid vector overhead. + has_line_through_decoration |= ((lines & kTextDecorationLineThrough) != 0); + } +} + +static void PaintDecorationsOnlyLineThrough( + TextPainter& text_painter, + const DecorationInfo& decoration_info, + const PaintInfo& paint_info, + const Vector<AppliedTextDecoration>& decorations) { + GraphicsContext& context = paint_info.context; + GraphicsContextStateSaver state_saver(context); + context.SetStrokeThickness(decoration_info.thickness); + for (const AppliedTextDecoration& decoration : decorations) { + TextDecoration lines = decoration.Lines(); + if (lines & kTextDecorationLineThrough) { + const float line_through_offset = 2 * decoration_info.baseline / 3; + AppliedDecorationPainter decoration_painter( + context, decoration_info, line_through_offset, decoration, + decoration_info.double_offset, 0); + // No skip: ink for line-through, + // compare https://github.com/w3c/csswg-drafts/issues/711 + decoration_painter.Paint(); + } + } +} + void InlineTextBoxPainter::Paint(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { if (!ShouldPaintTextBox(paint_info)) @@ -668,6 +857,23 @@ text_painter.SetEllipsisOffset(inline_text_box_.Truncation()); if (!paint_selected_text_only) { + // Paint text decorations except line-through. + DecorationInfo decoration_info; + bool has_line_through_decoration = false; + if (style_to_use.TextDecorationsInEffect() != kTextDecorationNone && + inline_text_box_.Truncation() != kCFullTruncation) { + ComputeDecorationInfo(decoration_info, inline_text_box_, box_origin, + style_to_use.AppliedTextDecorations()); + GraphicsContextStateSaver state_saver(context, false); + PrepareContextForDecoration(context, state_saver, + inline_text_box_.IsHorizontal(), text_style, + combined_text, box_rect); + PaintDecorationsExceptLineThrough( + text_painter, has_line_through_decoration, inline_text_box_, + decoration_info, paint_info, style_to_use.AppliedTextDecorations()); + RestoreContextFromDecoration(context, combined_text, box_rect); + } + int start_offset = 0; int end_offset = length; // Where the text and its flow have opposite directions then our offset into @@ -684,6 +890,17 @@ } text_painter.Paint(start_offset, end_offset, length, text_style); + + // Paint line-through decoration if needed. + if (has_line_through_decoration) { + GraphicsContextStateSaver state_saver(context, false); + PrepareContextForDecoration(context, state_saver, + inline_text_box_.IsHorizontal(), text_style, + combined_text, box_rect); + PaintDecorationsOnlyLineThrough(text_painter, decoration_info, paint_info, + style_to_use.AppliedTextDecorations()); + RestoreContextFromDecoration(context, combined_text, box_rect); + } } if ((paint_selected_text_only || paint_selected_text_separately) && @@ -692,24 +909,6 @@ text_painter.Paint(selection_start, selection_end, length, selection_style); } - // Paint decorations - if (style_to_use.TextDecorationsInEffect() != kTextDecorationNone && - !paint_selected_text_only) { - GraphicsContextStateSaver state_saver(context, false); - - TextPainter::UpdateGraphicsContext( - context, text_style, inline_text_box_.IsHorizontal(), state_saver); - - if (combined_text) - context.ConcatCTM( - TextPainter::Rotation(box_rect, TextPainter::kClockwise)); - PaintDecorations(text_painter, paint_info, box_origin, - style_to_use.AppliedTextDecorations()); - if (combined_text) - context.ConcatCTM( - TextPainter::Rotation(box_rect, TextPainter::kCounterclockwise)); - } - if (paint_info.phase == kPaintPhaseForeground) PaintDocumentMarkers(paint_info, box_origin, style_to_use, font, DocumentMarkerPaintPhase::kForeground); @@ -1106,135 +1305,6 @@ rect.Expand(outsets); } -void InlineTextBoxPainter::PaintDecorations( - TextPainter& text_painter, - const PaintInfo& paint_info, - const LayoutPoint& box_origin, - const Vector<AppliedTextDecoration>& decorations) { - if (inline_text_box_.Truncation() == kCFullTruncation) - return; - - GraphicsContext& context = paint_info.context; - GraphicsContextStateSaver state_saver(context); - - LayoutPoint local_origin(box_origin); - - LayoutUnit width = inline_text_box_.LogicalWidth(); - if (inline_text_box_.Truncation() != kCNoTruncation) { - bool ltr = inline_text_box_.IsLeftToRightDirection(); - bool flow_is_ltr = - inline_text_box_.GetLineLayoutItem().Style()->IsLeftToRightDirection(); - width = LayoutUnit(inline_text_box_.GetLineLayoutItem().Width( - ltr == flow_is_ltr - ? inline_text_box_.Start() - : inline_text_box_.Start() + inline_text_box_.Truncation(), - ltr == flow_is_ltr - ? inline_text_box_.Truncation() - : inline_text_box_.Len() - inline_text_box_.Truncation(), - inline_text_box_.TextPos(), - flow_is_ltr ? TextDirection::kLtr : TextDirection::kRtl, - inline_text_box_.IsFirstLineStyle())); - if (!flow_is_ltr) - local_origin.Move(inline_text_box_.LogicalWidth() - width, LayoutUnit()); - } - - LayoutObject& text_box_layout_object = InlineLayoutObject(); - - const ComputedStyle& style_to_use = - text_box_layout_object.StyleRef(inline_text_box_.IsFirstLineStyle()); - const SimpleFontData* font_data = style_to_use.GetFont().PrimaryFont(); - DCHECK(font_data); - float baseline = font_data ? font_data->GetFontMetrics().FloatAscent() : 0; - - // Set the thick of the line to be 10% (or something else ?)of the computed - // font size and not less than 1px. Using computedFontSize should take care - // of zoom as well. - - // Update Underline thickness, in case we have Faulty Font Metrics calculating - // underline thickness by old method. - float text_decoration_thickness = 0.0; - int font_height_int = 0; - if (font_data) { - text_decoration_thickness = - font_data->GetFontMetrics().UnderlineThickness(); - font_height_int = (int)(font_data->GetFontMetrics().FloatHeight() + 0.5); - } - if ((text_decoration_thickness == 0.f) || - (text_decoration_thickness >= (font_height_int >> 1))) - text_decoration_thickness = - std::max(1.f, style_to_use.ComputedFontSize() / 10.f); - - context.SetStrokeThickness(text_decoration_thickness); - - bool antialias_decoration = ShouldSetDecorationAntialias(decorations); - - // Offset between lines - always non-zero, so lines never cross each other. - float double_offset = text_decoration_thickness + 1.f; - bool skip_intercepts = - style_to_use.GetTextDecorationSkip() & kTextDecorationSkipInk; - - // text-underline-position may flip underline and overline. - ResolvedUnderlinePosition underline_position = - ResolveUnderlinePosition(style_to_use, &inline_text_box_); - bool flip_underline_and_overline = false; - if (underline_position == ResolvedUnderlinePosition::kOver) { - flip_underline_and_overline = true; - underline_position = ResolvedUnderlinePosition::kUnder; - } - - for (const AppliedTextDecoration& decoration : decorations) { - TextDecoration lines = decoration.Lines(); - if (flip_underline_and_overline) { - lines = static_cast<TextDecoration>( - lines ^ (kTextDecorationUnderline | kTextDecorationOverline)); - } - if ((lines & kTextDecorationUnderline) && font_data) { - const int underline_offset = ComputeUnderlineOffset( - underline_position, style_to_use, font_data->GetFontMetrics(), - &inline_text_box_, text_decoration_thickness); - AppliedDecorationPainter decoration_painter( - context, FloatPoint(local_origin) + FloatPoint(0, underline_offset), - width.ToFloat(), decoration, text_decoration_thickness, double_offset, - 1, antialias_decoration); - if (skip_intercepts) { - text_painter.ClipDecorationsStripe( - -baseline + decoration_painter.DecorationBounds().Y() - - FloatPoint(local_origin).Y(), - decoration_painter.DecorationBounds().Height(), - text_decoration_thickness); - } - decoration_painter.Paint(); - } - if (lines & kTextDecorationOverline) { - const int overline_offset = - ComputeOverlineOffset(style_to_use, &inline_text_box_); - AppliedDecorationPainter decoration_painter( - context, FloatPoint(local_origin) + FloatPoint(0, overline_offset), - width.ToFloat(), decoration, text_decoration_thickness, - -double_offset, 1, antialias_decoration); - if (skip_intercepts) { - text_painter.ClipDecorationsStripe( - -baseline + decoration_painter.DecorationBounds().Y() - - FloatPoint(local_origin).Y(), - decoration_painter.DecorationBounds().Height(), - text_decoration_thickness); - } - decoration_painter.Paint(); - } - if (lines & kTextDecorationLineThrough) { - const float line_through_offset = 2 * baseline / 3; - AppliedDecorationPainter decoration_painter( - context, - FloatPoint(local_origin) + FloatPoint(0, line_through_offset), - width.ToFloat(), decoration, text_decoration_thickness, double_offset, - 0, antialias_decoration); - // No skip: ink for line-through, - // compare https://github.com/w3c/csswg-drafts/issues/711 - decoration_painter.Paint(); - } - } -} - void InlineTextBoxPainter::PaintCompositionUnderline( GraphicsContext& context, const LayoutPoint& box_origin,
diff --git a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.h b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.h index f2092eba..b6560c1 100644 --- a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.h +++ b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.h
@@ -13,7 +13,6 @@ struct PaintInfo; -class AppliedTextDecoration; class Color; class CompositionUnderline; class ComputedStyle; @@ -24,7 +23,6 @@ class LayoutObject; class LayoutPoint; class LayoutTextCombine; -class TextPainter; enum class DocumentMarkerPaintPhase { kForeground, kBackground }; @@ -82,10 +80,7 @@ const Font&, Color text_color, LayoutTextCombine* = nullptr); - void PaintDecorations(TextPainter&, - const PaintInfo&, - const LayoutPoint& box_origin, - const Vector<AppliedTextDecoration>&); + void PaintCompositionUnderline(GraphicsContext&, const LayoutPoint& box_origin, const CompositionUnderline&);
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp index 8fea14f..4bb9d3da 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
@@ -48,29 +48,31 @@ bool AXARIAGrid::AddTableRowChild(AXObject* child, HeapHashSet<Member<AXObject>>& appended_rows, unsigned& column_count) { - if (!child || !child->IsTableRow() || child->RoleValue() != kRowRole) + if (!child || child->RoleValue() != kRowRole) return false; - AXTableRow* row = ToAXTableRow(child); - if (appended_rows.Contains(row)) + if (appended_rows.Contains(child)) return false; // store the maximum number of columns - unsigned row_cell_count = row->Children().size(); + const unsigned row_cell_count = child->Children().size(); if (row_cell_count > column_count) column_count = row_cell_count; - row->SetRowIndex((int)rows_.size()); - rows_.push_back(row); + AXTableRow* row = child->IsTableRow() ? ToAXTableRow(child) : 0; + if (row) { + row->SetRowIndex((int)rows_.size()); + } + rows_.push_back(child); // Try adding the row if it's not ignoring accessibility, // otherwise add its children (the cells) as the grid's children. - if (!row->AccessibilityIsIgnored()) - children_.push_back(row); + if (!child->AccessibilityIsIgnored()) + children_.push_back(child); else - children_.AppendVector(row->Children()); + children_.AppendVector(child->Children()); - appended_rows.insert(row); + appended_rows.insert(child); return true; }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h index ccd3b7f9..f21c07cc 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h
@@ -48,6 +48,10 @@ bool IsAriaTable() const override { return true; } + AccessibilityRole RoleValue() const final { + return AXLayoutObject::RoleValue(); + } // Use ARIA role + void AddChildren() override; private:
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp index ba43089..ac90d6f2 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -1486,8 +1486,6 @@ return orientation; case kRadioGroupRole: case kTreeGridRole: - // TODO(nektar): Fix bug 532670 and remove table role. - case kTableRole: return orientation; default: return AXObject::Orientation();
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTable.h b/third_party/WebKit/Source/modules/accessibility/AXTable.h index db12ecfd..f9c9024 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXTable.h +++ b/third_party/WebKit/Source/modules/accessibility/AXTable.h
@@ -54,7 +54,7 @@ bool IsAXTable() const final; bool IsDataTable() const final; - AccessibilityRole RoleValue() const final; + AccessibilityRole RoleValue() const; void AddChildren() override; void ClearChildren() final;
diff --git a/third_party/WebKit/Source/modules/canvas2d/BUILD.gn b/third_party/WebKit/Source/modules/canvas2d/BUILD.gn index 095ceca..8944957 100644 --- a/third_party/WebKit/Source/modules/canvas2d/BUILD.gn +++ b/third_party/WebKit/Source/modules/canvas2d/BUILD.gn
@@ -10,8 +10,8 @@ "BaseRenderingContext2D.h", "CanvasGradient.cpp", "CanvasGradient.h", - "CanvasPathMethods.cpp", - "CanvasPathMethods.h", + "CanvasPath.cpp", + "CanvasPath.h", "CanvasPattern.cpp", "CanvasPattern.h", "CanvasRenderingContext2D.cpp",
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h index 3b2703f..be6a723 100644 --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
@@ -10,7 +10,7 @@ #include "core/html/ImageData.h" #include "modules/ModulesExport.h" #include "modules/canvas2d/CanvasGradient.h" -#include "modules/canvas2d/CanvasPathMethods.h" +#include "modules/canvas2d/CanvasPath.h" #include "modules/canvas2d/CanvasRenderingContext2DState.h" #include "modules/canvas2d/CanvasStyle.h" #include "platform/graphics/ColorBehavior.h" @@ -31,7 +31,7 @@ CanvasImageSourceUnion; class MODULES_EXPORT BaseRenderingContext2D : public GarbageCollectedMixin, - public CanvasPathMethods { + public CanvasPath { WTF_MAKE_NONCOPYABLE(BaseRenderingContext2D); public:
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasPath.cpp similarity index 77% rename from third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.cpp rename to third_party/WebKit/Source/modules/canvas2d/CanvasPath.cpp index d01801b..51de15d 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.cpp +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasPath.cpp
@@ -33,7 +33,7 @@ * SUCH DAMAGE. */ -#include "modules/canvas2d/CanvasPathMethods.h" +#include "modules/canvas2d/CanvasPath.h" #include "bindings/core/v8/ExceptionState.h" #include "core/dom/ExceptionCode.h" @@ -43,7 +43,7 @@ namespace blink { -void CanvasPathMethods::closePath() { +void CanvasPath::closePath() { if (path_.IsEmpty()) return; @@ -52,7 +52,7 @@ path_.CloseSubpath(); } -void CanvasPathMethods::moveTo(float x, float y) { +void CanvasPath::moveTo(float x, float y) { if (!std::isfinite(x) || !std::isfinite(y)) return; if (!IsTransformInvertible()) @@ -60,7 +60,7 @@ path_.MoveTo(FloatPoint(x, y)); } -void CanvasPathMethods::lineTo(float x, float y) { +void CanvasPath::lineTo(float x, float y) { if (!std::isfinite(x) || !std::isfinite(y)) return; if (!IsTransformInvertible()) @@ -73,10 +73,7 @@ path_.AddLineTo(p1); } -void CanvasPathMethods::quadraticCurveTo(float cpx, - float cpy, - float x, - float y) { +void CanvasPath::quadraticCurveTo(float cpx, float cpy, float x, float y) { if (!std::isfinite(cpx) || !std::isfinite(cpy) || !std::isfinite(x) || !std::isfinite(y)) return; @@ -91,12 +88,12 @@ path_.AddQuadCurveTo(cp, p1); } -void CanvasPathMethods::bezierCurveTo(float cp1x, - float cp1y, - float cp2x, - float cp2y, - float x, - float y) { +void CanvasPath::bezierCurveTo(float cp1x, + float cp1y, + float cp2x, + float cp2y, + float x, + float y) { if (!std::isfinite(cp1x) || !std::isfinite(cp1y) || !std::isfinite(cp2x) || !std::isfinite(cp2y) || !std::isfinite(x) || !std::isfinite(y)) return; @@ -112,12 +109,12 @@ path_.AddBezierCurveTo(cp1, cp2, p1); } -void CanvasPathMethods::arcTo(float x1, - float y1, - float x2, - float y2, - float r, - ExceptionState& exception_state) { +void CanvasPath::arcTo(float x1, + float y1, + float x2, + float y2, + float r, + ExceptionState& exception_state) { if (!std::isfinite(x1) || !std::isfinite(y1) || !std::isfinite(x2) || !std::isfinite(y2) || !std::isfinite(r)) return; @@ -157,36 +154,37 @@ * from the ellipse's semi-major axis, acts as both the start point and the * end point. */ - if (!anticlockwise && end_angle - start_angle >= twoPiFloat) + if (!anticlockwise && end_angle - start_angle >= twoPiFloat) { new_end_angle = start_angle + twoPiFloat; - else if (anticlockwise && start_angle - end_angle >= twoPiFloat) + } else if (anticlockwise && start_angle - end_angle >= twoPiFloat) { new_end_angle = start_angle - twoPiFloat; - /* - * Otherwise, the arc is the path along the circumference of this ellipse - * from the start point to the end point, going anti-clockwise if the - * anticlockwise argument is true, and clockwise otherwise. - * Since the points are on the ellipse, as opposed to being simply angles - * from zero, the arc can never cover an angle greater than 2pi radians. - */ - /* NOTE: When startAngle = 0, endAngle = 2Pi and anticlockwise = true, the - * spec does not indicate clearly. - * We draw the entire circle, because some web sites use arc(x, y, r, 0, - * 2*Math.PI, true) to draw circle. - * We preserve backward-compatibility. - */ - else if (!anticlockwise && start_angle > end_angle) + /* + * Otherwise, the arc is the path along the circumference of this ellipse + * from the start point to the end point, going anti-clockwise if the + * anticlockwise argument is true, and clockwise otherwise. + * Since the points are on the ellipse, as opposed to being simply angles + * from zero, the arc can never cover an angle greater than 2pi radians. + */ + /* NOTE: When startAngle = 0, endAngle = 2Pi and anticlockwise = true, the + * spec does not indicate clearly. + * We draw the entire circle, because some web sites use arc(x, y, r, 0, + * 2*Math.PI, true) to draw circle. + * We preserve backward-compatibility. + */ + } else if (!anticlockwise && start_angle > end_angle) { new_end_angle = start_angle + (twoPiFloat - fmodf(start_angle - end_angle, twoPiFloat)); - else if (anticlockwise && start_angle < end_angle) + } else if (anticlockwise && start_angle < end_angle) { new_end_angle = start_angle - (twoPiFloat - fmodf(end_angle - start_angle, twoPiFloat)); + } - ASSERT(EllipseIsRenderable(start_angle, new_end_angle)); + DCHECK(EllipseIsRenderable(start_angle, new_end_angle)); return new_end_angle; } -inline void LineToFloatPoint(CanvasPathMethods* path, const FloatPoint& p) { +inline void LineToFloatPoint(CanvasPath* path, const FloatPoint& p) { path->lineTo(p.X(), p.Y()); } @@ -212,7 +210,7 @@ *start_angle = new_start_angle; *end_angle = *end_angle + delta; - ASSERT(new_start_angle >= 0 && new_start_angle < twoPiFloat); + DCHECK(new_start_angle >= 0 && new_start_angle < twoPiFloat); } /* @@ -248,7 +246,7 @@ * NOTE: Before ellipse() calls this function, adjustEndAngle() is called, so * endAngle - startAngle must be equal to or less than 2Pi. */ -void DegenerateEllipse(CanvasPathMethods* path, +void DegenerateEllipse(CanvasPath* path, float x, float y, float radius_x, @@ -257,9 +255,9 @@ float start_angle, float end_angle, bool anticlockwise) { - ASSERT(EllipseIsRenderable(start_angle, end_angle)); - ASSERT(start_angle >= 0 && start_angle < twoPiFloat); - ASSERT((anticlockwise && (start_angle - end_angle) >= 0) || + DCHECK(EllipseIsRenderable(start_angle, end_angle)); + DCHECK(start_angle >= 0 && start_angle < twoPiFloat); + DCHECK((anticlockwise && (start_angle - end_angle) >= 0) || (!anticlockwise && (end_angle - start_angle) >= 0)); FloatPoint center(x, y); @@ -279,16 +277,18 @@ // the clockwise direction. for (float angle = start_angle - fmodf(start_angle, piOverTwoFloat) + piOverTwoFloat; - angle < end_angle; angle += piOverTwoFloat) + angle < end_angle; angle += piOverTwoFloat) { LineToFloatPoint( path, center + rotation_matrix.MapPoint( GetPointOnEllipse(radius_x, radius_y, angle))); + } } else { for (float angle = start_angle - fmodf(start_angle, piOverTwoFloat); - angle > end_angle; angle -= piOverTwoFloat) + angle > end_angle; angle -= piOverTwoFloat) { LineToFloatPoint( path, center + rotation_matrix.MapPoint( GetPointOnEllipse(radius_x, radius_y, angle))); + } } LineToFloatPoint(path, center + rotation_matrix.MapPoint(GetPointOnEllipse( @@ -297,13 +297,13 @@ } // namespace -void CanvasPathMethods::arc(float x, - float y, - float radius, - float start_angle, - float end_angle, - bool anticlockwise, - ExceptionState& exception_state) { +void CanvasPath::arc(float x, + float y, + float radius, + float start_angle, + float end_angle, + bool anticlockwise, + ExceptionState& exception_state) { if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radius) || !std::isfinite(start_angle) || !std::isfinite(end_angle)) return; @@ -331,15 +331,15 @@ anticlockwise); } -void CanvasPathMethods::ellipse(float x, - float y, - float radius_x, - float radius_y, - float rotation, - float start_angle, - float end_angle, - bool anticlockwise, - ExceptionState& exception_state) { +void CanvasPath::ellipse(float x, + float y, + float radius_x, + float radius_y, + float rotation, + float start_angle, + float end_angle, + bool anticlockwise, + ExceptionState& exception_state) { if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radius_x) || !std::isfinite(radius_y) || !std::isfinite(rotation) || !std::isfinite(start_angle) || !std::isfinite(end_angle)) @@ -376,7 +376,7 @@ adjusted_end_angle, anticlockwise); } -void CanvasPathMethods::rect(float x, float y, float width, float height) { +void CanvasPath::rect(float x, float y, float width, float height) { if (!IsTransformInvertible()) return;
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.h b/third_party/WebKit/Source/modules/canvas2d/CanvasPath.h similarity index 90% rename from third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.h rename to third_party/WebKit/Source/modules/canvas2d/CanvasPath.h index 192e7b64..1c881719 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.h +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasPath.h
@@ -27,8 +27,8 @@ * SUCH DAMAGE. */ -#ifndef CanvasPathMethods_h -#define CanvasPathMethods_h +#ifndef CanvasPath_h +#define CanvasPath_h #include "modules/ModulesExport.h" #include "platform/graphics/Path.h" @@ -37,9 +37,9 @@ class ExceptionState; -class MODULES_EXPORT CanvasPathMethods { +class MODULES_EXPORT CanvasPath { public: - virtual ~CanvasPathMethods() {} + virtual ~CanvasPath() {} void closePath(); void moveTo(float x, float y); @@ -78,10 +78,8 @@ virtual bool IsTransformInvertible() const { return true; } protected: - CanvasPathMethods() { path_.SetIsVolatile(true); } - CanvasPathMethods(const Path& path) : path_(path) { - path_.SetIsVolatile(true); - } + CanvasPath() { path_.SetIsVolatile(true); } + CanvasPath(const Path& path) : path_(path) { path_.SetIsVolatile(true); } Path path_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.idl b/third_party/WebKit/Source/modules/canvas2d/CanvasPath.idl similarity index 91% rename from third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.idl rename to third_party/WebKit/Source/modules/canvas2d/CanvasPath.idl index 2c37810c..8b15e14 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasPathMethods.idl +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasPath.idl
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvaspathmethods +// https://html.spec.whatwg.org/multipage/scripting.html#canvaspath [ NoInterfaceObject, // Always used on target of 'implements' -] interface CanvasPathMethods { +] interface CanvasPath { // shared path API methods void closePath(); void moveTo(unrestricted float x, unrestricted float y);
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.idl b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.idl index 9fa38ca..6ab34b38 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.idl +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.idl
@@ -90,7 +90,7 @@ void fillRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height); void strokeRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height); - // path API (see also CanvasPathMethods) + // path API (see also CanvasPath) void beginPath(); void fill(optional CanvasFillRule winding); void fill(Path2D path, optional CanvasFillRule winding); @@ -156,4 +156,4 @@ }; -CanvasRenderingContext2D implements CanvasPathMethods; +CanvasRenderingContext2D implements CanvasPath;
diff --git a/third_party/WebKit/Source/modules/canvas2d/Path2D.h b/third_party/WebKit/Source/modules/canvas2d/Path2D.h index 9ab76b4..19bdef5 100644 --- a/third_party/WebKit/Source/modules/canvas2d/Path2D.h +++ b/third_party/WebKit/Source/modules/canvas2d/Path2D.h
@@ -31,14 +31,14 @@ #include "bindings/core/v8/ScriptWrappable.h" #include "core/svg/SVGMatrixTearOff.h" #include "core/svg/SVGPathUtilities.h" -#include "modules/canvas2d/CanvasPathMethods.h" +#include "modules/canvas2d/CanvasPath.h" #include "platform/heap/Handle.h" #include "platform/transforms/AffineTransform.h" namespace blink { class MODULES_EXPORT Path2D final : public GarbageCollectedFinalized<Path2D>, - public CanvasPathMethods, + public CanvasPath, public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); WTF_MAKE_NONCOPYABLE(Path2D); @@ -65,13 +65,13 @@ DEFINE_INLINE_TRACE() {} private: - Path2D() : CanvasPathMethods() {} + Path2D() : CanvasPath() {} - Path2D(const Path& path) : CanvasPathMethods(path) {} + Path2D(const Path& path) : CanvasPath(path) {} - Path2D(Path2D* path) : CanvasPathMethods(path->GetPath()) {} + Path2D(Path2D* path) : CanvasPath(path->GetPath()) {} - Path2D(const String& path_data) : CanvasPathMethods() { + Path2D(const String& path_data) : CanvasPath() { BuildPathFromString(path_data, path_); } };
diff --git a/third_party/WebKit/Source/modules/canvas2d/Path2D.idl b/third_party/WebKit/Source/modules/canvas2d/Path2D.idl index 7e3ad98..c76f745 100644 --- a/third_party/WebKit/Source/modules/canvas2d/Path2D.idl +++ b/third_party/WebKit/Source/modules/canvas2d/Path2D.idl
@@ -38,4 +38,4 @@ [RuntimeEnabled=ExperimentalCanvasFeatures] void addPath(Path2D path, optional SVGMatrix? transform); }; -Path2D implements CanvasPathMethods; +Path2D implements CanvasPath;
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.idl b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.idl index 9e54f95..27228cb 100644 --- a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.idl +++ b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.idl
@@ -47,7 +47,7 @@ void fillRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height); void strokeRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height); - // path API (see also CanvasPathMethods) + // path API (see also CanvasPath) void beginPath(); void fill(optional CanvasFillRule winding); void fill(Path2D path, optional CanvasFillRule winding); @@ -78,4 +78,4 @@ sequence<unrestricted double> getLineDash(); attribute unrestricted double lineDashOffset; }; -PaintRenderingContext2D implements CanvasPathMethods; +PaintRenderingContext2D implements CanvasPath;
diff --git a/third_party/WebKit/Source/modules/modules_idl_files.gni b/third_party/WebKit/Source/modules/modules_idl_files.gni index c919feb..c68f3ec 100644 --- a/third_party/WebKit/Source/modules/modules_idl_files.gni +++ b/third_party/WebKit/Source/modules/modules_idl_files.gni
@@ -591,7 +591,7 @@ "cachestorage/WindowCacheStorage.idl", "cachestorage/WorkerCacheStorage.idl", "canvas/HTMLCanvasElementModule.idl", - "canvas2d/CanvasPathMethods.idl", + "canvas2d/CanvasPath.idl", "compositorworker/WindowAnimationWorklet.idl", "credentialmanager/NavigatorCredentials.idl", "crypto/WindowCrypto.idl",
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl index f1afd438..016eb1d 100644 --- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl +++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl
@@ -89,4 +89,4 @@ attribute unrestricted double lineDashOffset; }; -OffscreenCanvasRenderingContext2D implements CanvasPathMethods; +OffscreenCanvasRenderingContext2D implements CanvasPath;
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp index e517e71e..980e474a 100644 --- a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp +++ b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp
@@ -45,19 +45,23 @@ #include "public/platform/Platform.h" #include "public/platform/WebTraceLocation.h" -using payments::mojom::blink::CanMakePaymentQueryResult; -using payments::mojom::blink::PaymentAddressPtr; -using payments::mojom::blink::PaymentCurrencyAmount; -using payments::mojom::blink::PaymentCurrencyAmountPtr; -using payments::mojom::blink::PaymentDetailsModifierPtr; -using payments::mojom::blink::PaymentDetailsPtr; -using payments::mojom::blink::PaymentErrorReason; -using payments::mojom::blink::PaymentItemPtr; -using payments::mojom::blink::PaymentMethodDataPtr; -using payments::mojom::blink::PaymentOptionsPtr; -using payments::mojom::blink::PaymentResponsePtr; -using payments::mojom::blink::PaymentShippingOptionPtr; -using payments::mojom::blink::PaymentShippingType; +namespace { + +using ::payments::mojom::blink::CanMakePaymentQueryResult; +using ::payments::mojom::blink::PaymentAddressPtr; +using ::payments::mojom::blink::PaymentCurrencyAmount; +using ::payments::mojom::blink::PaymentCurrencyAmountPtr; +using ::payments::mojom::blink::PaymentDetailsModifierPtr; +using ::payments::mojom::blink::PaymentDetailsPtr; +using ::payments::mojom::blink::PaymentErrorReason; +using ::payments::mojom::blink::PaymentItemPtr; +using ::payments::mojom::blink::PaymentMethodDataPtr; +using ::payments::mojom::blink::PaymentOptionsPtr; +using ::payments::mojom::blink::PaymentResponsePtr; +using ::payments::mojom::blink::PaymentShippingOptionPtr; +using ::payments::mojom::blink::PaymentShippingType; + +} // namespace namespace mojo { @@ -186,6 +190,7 @@ void ValidateAndConvertShippingOptions( const HeapVector<PaymentShippingOption>& input, Vector<PaymentShippingOptionPtr>& output, + ExecutionContext& execution_context, ExceptionState& exception_state) { HashSet<String> unique_ids; for (const PaymentShippingOption& option : input) { @@ -195,6 +200,10 @@ } if (unique_ids.Contains(option.id())) { + execution_context.AddConsoleMessage(ConsoleMessage::Create( + kJSMessageSource, kWarningMessageLevel, + "Duplicate shipping option identifier '" + option.id() + + "' is treated as an invalid address indicator.")); // Clear |output| instead of throwing an exception. output.clear(); return; @@ -255,7 +264,7 @@ } if (android_pay.hasAllowedCardNetworks()) { - using payments::mojom::blink::AndroidPayCardNetwork; + using ::payments::mojom::blink::AndroidPayCardNetwork; const struct { const AndroidPayCardNetwork code; @@ -282,7 +291,7 @@ output->tokenization_type = payments::mojom::blink::AndroidPayTokenization::UNSPECIFIED; if (tokenization.hasTokenizationType()) { - using payments::mojom::blink::AndroidPayTokenization; + using ::payments::mojom::blink::AndroidPayTokenization; const struct { const AndroidPayTokenization code; @@ -330,7 +339,7 @@ return; if (basic_card.hasSupportedNetworks()) { - using payments::mojom::blink::BasicCardNetwork; + using ::payments::mojom::blink::BasicCardNetwork; const struct { const BasicCardNetwork code; @@ -355,7 +364,7 @@ } if (basic_card.hasSupportedTypes()) { - using payments::mojom::blink::BasicCardType; + using ::payments::mojom::blink::BasicCardType; const struct { const BasicCardType code; @@ -492,8 +501,9 @@ } if (input.hasShippingOptions() && request_shipping) { - ValidateAndConvertShippingOptions( - input.shippingOptions(), output->shipping_options, exception_state); + ValidateAndConvertShippingOptions(input.shippingOptions(), + output->shipping_options, + execution_context, exception_state); if (exception_state.HadException()) return; } @@ -1040,12 +1050,14 @@ DCHECK(show_resolver_); if (!aborted_successfully) { - abort_resolver_->Reject(DOMException::Create(kInvalidStateError)); + abort_resolver_->Reject(DOMException::Create( + kInvalidStateError, "Unable to abort the payment")); abort_resolver_.Clear(); return; } - show_resolver_->Reject(DOMException::Create(kAbortError)); + show_resolver_->Reject( + DOMException::Create(kAbortError, "The website has aborted the payment")); abort_resolver_->Resolve(); ClearResolversAndCloseMojoConnection(); } @@ -1070,6 +1082,9 @@ } void PaymentRequest::OnCompleteTimeout(TimerBase*) { + GetExecutionContext()->AddConsoleMessage(ConsoleMessage::Create( + kJSMessageSource, kErrorMessageLevel, + "Timed out waiting for a PaymentResponse.complete() call.")); payment_provider_->Complete(payments::mojom::blink::PaymentComplete(kFail)); ClearResolversAndCloseMojoConnection(); }
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.cpp index 33c95a2..a2df6aa 100644 --- a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.cpp +++ b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.cpp
@@ -123,12 +123,28 @@ stopPropagation(); stopImmediatePropagation(); wait_for_update_ = true; - abort_timer_.Stop(); promise.Then( - UpdatePaymentDetailsFunction::CreateFunction(script_state, updater_), - UpdatePaymentDetailsErrorFunction::CreateFunction(script_state, - updater_)); + UpdatePaymentDetailsFunction::CreateFunction(script_state, this), + UpdatePaymentDetailsErrorFunction::CreateFunction(script_state, this)); +} + +void PaymentRequestUpdateEvent::OnUpdatePaymentDetails( + const ScriptValue& details_script_value) { + if (!updater_) + return; + abort_timer_.Stop(); + updater_->OnUpdatePaymentDetails(details_script_value); + updater_ = nullptr; +} + +void PaymentRequestUpdateEvent::OnUpdatePaymentDetailsFailure( + const String& error) { + if (!updater_) + return; + abort_timer_.Stop(); + updater_->OnUpdatePaymentDetailsFailure(error); + updater_ = nullptr; } DEFINE_TRACE(PaymentRequestUpdateEvent) { @@ -137,15 +153,7 @@ } void PaymentRequestUpdateEvent::OnUpdateEventTimeoutForTesting() { - OnUpdateEventTimeout(0); -} - -void PaymentRequestUpdateEvent::OnUpdateEventTimeout(TimerBase*) { - if (!updater_) - return; - - updater_->OnUpdatePaymentDetailsFailure( - "Timed out as the page didn't resolve the promise from change event"); + OnUpdateEventTimeout(nullptr); } PaymentRequestUpdateEvent::PaymentRequestUpdateEvent( @@ -159,4 +167,9 @@ this, &PaymentRequestUpdateEvent::OnUpdateEventTimeout) {} +void PaymentRequestUpdateEvent::OnUpdateEventTimeout(TimerBase*) { + OnUpdatePaymentDetailsFailure("Timed out waiting for a response to a '" + + type() + "' event"); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.h b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.h index 53a945b..6ebb57f 100644 --- a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.h +++ b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEvent.h
@@ -10,6 +10,7 @@ #include "core/events/Event.h" #include "modules/ModulesExport.h" #include "modules/payments/PaymentRequestUpdateEventInit.h" +#include "modules/payments/PaymentUpdater.h" #include "platform/Timer.h" #include "platform/heap/Handle.h" @@ -17,11 +18,12 @@ class ExceptionState; class ExecutionContext; -class PaymentUpdater; class ScriptState; -class MODULES_EXPORT PaymentRequestUpdateEvent final : public Event { +class MODULES_EXPORT PaymentRequestUpdateEvent final : public Event, + public PaymentUpdater { DEFINE_WRAPPERTYPEINFO(); + USING_GARBAGE_COLLECTED_MIXIN(PaymentRequestUpdateEvent) public: ~PaymentRequestUpdateEvent() override; @@ -35,6 +37,10 @@ void updateWith(ScriptState*, ScriptPromise, ExceptionState&); + // PaymentUpdater: + void OnUpdatePaymentDetails(const ScriptValue& details_script_value) override; + void OnUpdatePaymentDetailsFailure(const String& error) override; + DECLARE_VIRTUAL_TRACE(); void OnUpdateEventTimeoutForTesting();
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp index c5bc819..e8c707dd 100644 --- a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp +++ b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp
@@ -121,7 +121,7 @@ EXPECT_FALSE(scope.GetExceptionState().HadException()); } -TEST(PaymentRequestUpdateEventTest, OnUpdatePaymentDetailsTimeout) { +TEST(PaymentRequestUpdateEventTest, AddressChangeUpdateWithTimeout) { V8TestingScope scope; PaymentRequestMockFunctionScope funcs(scope.GetScriptState()); MakePaymentRequestOriginSecure(scope.GetDocument()); @@ -141,9 +141,112 @@ v8::MicrotasksScope::PerformCheckpoint(scope.GetScriptState()->GetIsolate()); EXPECT_EQ( - "AbortError: Timed out as the page didn't resolve the promise from " - "change event", + "AbortError: Timed out waiting for a response to a " + "'shippingaddresschange' event", error_message); + + event->updateWith( + scope.GetScriptState(), + ScriptPromiseResolver::Create(scope.GetScriptState())->Promise(), + scope.GetExceptionState()); + + EXPECT_FALSE(scope.GetExceptionState().HadException()); +} + +TEST(PaymentRequestUpdateEventTest, OptionChangeUpdateWithTimeout) { + V8TestingScope scope; + PaymentRequestMockFunctionScope funcs(scope.GetScriptState()); + MakePaymentRequestOriginSecure(scope.GetDocument()); + PaymentRequest* request = PaymentRequest::Create( + scope.GetExecutionContext(), BuildPaymentMethodDataForTest(), + BuildPaymentDetailsInitForTest(), scope.GetExceptionState()); + PaymentRequestUpdateEvent* event = PaymentRequestUpdateEvent::Create( + scope.GetExecutionContext(), EventTypeNames::shippingoptionchange); + event->SetPaymentDetailsUpdater(request); + EXPECT_FALSE(scope.GetExceptionState().HadException()); + + String error_message; + request->show(scope.GetScriptState()) + .Then(funcs.ExpectNoCall(), funcs.ExpectCall(&error_message)); + + event->OnUpdateEventTimeoutForTesting(); + + v8::MicrotasksScope::PerformCheckpoint(scope.GetScriptState()->GetIsolate()); + EXPECT_EQ( + "AbortError: Timed out waiting for a response to a " + "'shippingoptionchange' event", + error_message); + + event->updateWith( + scope.GetScriptState(), + ScriptPromiseResolver::Create(scope.GetScriptState())->Promise(), + scope.GetExceptionState()); + + EXPECT_FALSE(scope.GetExceptionState().HadException()); +} + +TEST(PaymentRequestUpdateEventTest, AddressChangePromiseTimeout) { + V8TestingScope scope; + PaymentRequestMockFunctionScope funcs(scope.GetScriptState()); + MakePaymentRequestOriginSecure(scope.GetDocument()); + PaymentRequest* request = PaymentRequest::Create( + scope.GetExecutionContext(), BuildPaymentMethodDataForTest(), + BuildPaymentDetailsInitForTest(), scope.GetExceptionState()); + EXPECT_FALSE(scope.GetExceptionState().HadException()); + PaymentRequestUpdateEvent* event = PaymentRequestUpdateEvent::Create( + scope.GetExecutionContext(), EventTypeNames::shippingaddresschange); + event->SetPaymentDetailsUpdater(request); + event->SetEventPhase(Event::kCapturingPhase); + ScriptPromiseResolver* payment_details = + ScriptPromiseResolver::Create(scope.GetScriptState()); + String error_message; + request->show(scope.GetScriptState()) + .Then(funcs.ExpectNoCall(), funcs.ExpectCall(&error_message)); + event->updateWith(scope.GetScriptState(), payment_details->Promise(), + scope.GetExceptionState()); + EXPECT_FALSE(scope.GetExceptionState().HadException()); + + event->OnUpdateEventTimeoutForTesting(); + + v8::MicrotasksScope::PerformCheckpoint(scope.GetScriptState()->GetIsolate()); + EXPECT_EQ( + "AbortError: Timed out waiting for a response to a " + "'shippingaddresschange' event", + error_message); + + payment_details->Resolve("foo"); +} + +TEST(PaymentRequestUpdateEventTest, OptionChangePromiseTimeout) { + V8TestingScope scope; + PaymentRequestMockFunctionScope funcs(scope.GetScriptState()); + MakePaymentRequestOriginSecure(scope.GetDocument()); + PaymentRequest* request = PaymentRequest::Create( + scope.GetExecutionContext(), BuildPaymentMethodDataForTest(), + BuildPaymentDetailsInitForTest(), scope.GetExceptionState()); + EXPECT_FALSE(scope.GetExceptionState().HadException()); + PaymentRequestUpdateEvent* event = PaymentRequestUpdateEvent::Create( + scope.GetExecutionContext(), EventTypeNames::shippingoptionchange); + event->SetPaymentDetailsUpdater(request); + event->SetEventPhase(Event::kCapturingPhase); + ScriptPromiseResolver* payment_details = + ScriptPromiseResolver::Create(scope.GetScriptState()); + String error_message; + request->show(scope.GetScriptState()) + .Then(funcs.ExpectNoCall(), funcs.ExpectCall(&error_message)); + event->updateWith(scope.GetScriptState(), payment_details->Promise(), + scope.GetExceptionState()); + EXPECT_FALSE(scope.GetExceptionState().HadException()); + + event->OnUpdateEventTimeoutForTesting(); + + v8::MicrotasksScope::PerformCheckpoint(scope.GetScriptState()->GetIsolate()); + EXPECT_EQ( + "AbortError: Timed out waiting for a response to a " + "'shippingoptionchange' event", + error_message); + + payment_details->Resolve("foo"); } } // namespace
diff --git a/third_party/WebKit/Source/platform/graphics/Path.cpp b/third_party/WebKit/Source/platform/graphics/Path.cpp index a47b4cfd..372a1d5 100644 --- a/third_party/WebKit/Source/platform/graphics/Path.cpp +++ b/third_party/WebKit/Source/platform/graphics/Path.cpp
@@ -364,9 +364,7 @@ float start_angle, float end_angle, bool anticlockwise) { -#if DCHECK_IS_ON() DCHECK(EllipseIsRenderable(start_angle, end_angle)); -#endif DCHECK_GE(start_angle, 0); DCHECK_LT(start_angle, twoPiFloat); DCHECK((anticlockwise && (start_angle - end_angle) >= 0) || @@ -428,9 +426,7 @@ float start_angle, float end_angle, bool anticlockwise) { -#if DCHECK_IS_ON() DCHECK(EllipseIsRenderable(start_angle, end_angle)); -#endif DCHECK_GE(start_angle, 0); DCHECK_LT(start_angle, twoPiFloat); DCHECK((anticlockwise && (start_angle - end_angle) >= 0) || @@ -551,11 +547,9 @@ return Op(path_, other.path_, kIntersect_SkPathOp, &path_); } -#if DCHECK_IS_ON() bool EllipseIsRenderable(float start_angle, float end_angle) { return (std::abs(end_angle - start_angle) < twoPiFloat) || WebCoreFloatNearlyEqual(std::abs(end_angle - start_angle), twoPiFloat); } -#endif } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/Path.h b/third_party/WebKit/Source/platform/graphics/Path.h index 650cdf6..b9e1463 100644 --- a/third_party/WebKit/Source/platform/graphics/Path.h +++ b/third_party/WebKit/Source/platform/graphics/Path.h
@@ -202,9 +202,8 @@ SkPath path_; }; -#if DCHECK_IS_ON() +// Only used for DCHECKs PLATFORM_EXPORT bool EllipseIsRenderable(float start_angle, float end_angle); -#endif } // namespace blink
diff --git a/third_party/WebKit/Source/platform/loader/fetch/FetchContext.cpp b/third_party/WebKit/Source/platform/loader/fetch/FetchContext.cpp index 1bdddf44..c612edb 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/FetchContext.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/FetchContext.cpp
@@ -115,9 +115,12 @@ FetchContext::LogMessageType) const {} void FetchContext::PopulateResourceRequest( + const KURL&, Resource::Type, const ClientHintsPreferences&, const FetchParameters::ResourceWidth&, + const ResourceLoaderOptions&, + SecurityViolationReportingPolicy, ResourceRequest&) {} void FetchContext::SetFirstPartyCookieAndRequestorOrigin(ResourceRequest&) {}
diff --git a/third_party/WebKit/Source/platform/loader/fetch/FetchContext.h b/third_party/WebKit/Source/platform/loader/fetch/FetchContext.h index d302289..6fbe7a9c 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/FetchContext.h +++ b/third_party/WebKit/Source/platform/loader/fetch/FetchContext.h
@@ -38,6 +38,7 @@ #include "platform/loader/fetch/Resource.h" #include "platform/loader/fetch/ResourceLoadPriority.h" #include "platform/loader/fetch/ResourceRequest.h" +#include "platform/network/ContentSecurityPolicyParsers.h" #include "platform/weborigin/SecurityViolationReportingPolicy.h" #include "platform/wtf/Forward.h" #include "platform/wtf/Noncopyable.h" @@ -154,6 +155,15 @@ FetchParameters::OriginRestriction) const { return ResourceRequestBlockedReason::kOther; } + virtual ResourceRequestBlockedReason CanFollowRedirect( + Resource::Type, + const ResourceRequest&, + const KURL&, + const ResourceLoaderOptions&, + SecurityViolationReportingPolicy, + FetchParameters::OriginRestriction) const { + return ResourceRequestBlockedReason::kOther; + } virtual ResourceRequestBlockedReason AllowResponse( Resource::Type, const ResourceRequest&, @@ -180,9 +190,12 @@ // Populates the ResourceRequest using the given values and information // stored in the FetchContext implementation. Used by ResourceFetcher to // prepare a ResourceRequest instance at the start of resource loading. - virtual void PopulateResourceRequest(Resource::Type, + virtual void PopulateResourceRequest(const KURL&, + Resource::Type, const ClientHintsPreferences&, const FetchParameters::ResourceWidth&, + const ResourceLoaderOptions&, + SecurityViolationReportingPolicy, ResourceRequest&); // Sets the first party for cookies and requestor origin using information // stored in the FetchContext implementation.
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp index 1816f8d..b1de832 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
@@ -500,9 +500,15 @@ factory.GetType() == Resource::kRaw || factory.GetType() == Resource::kXSLStyleSheet); + SecurityViolationReportingPolicy reporting_policy = + params.IsSpeculativePreload() + ? SecurityViolationReportingPolicy::kSuppressReporting + : SecurityViolationReportingPolicy::kReport; Context().PopulateResourceRequest( + MemoryCache::RemoveFragmentIdentifierIfNeeded(params.Url()), factory.GetType(), params.GetClientHintsPreferences(), - params.GetResourceWidth(), resource_request); + params.GetResourceWidth(), params.Options(), reporting_policy, + resource_request); if (!params.Url().IsValid()) return kAbort; @@ -521,10 +527,7 @@ MemoryCache::RemoveFragmentIdentifierIfNeeded(params.Url()), params.Options(), /* Don't send security violation reports for speculative preloads */ - params.IsSpeculativePreload() - ? SecurityViolationReportingPolicy::kSuppressReporting - : SecurityViolationReportingPolicy::kReport, - params.GetOriginRestriction()); + reporting_policy, params.GetOriginRestriction()); if (blocked_reason != ResourceRequestBlockedReason::kNone) { DCHECK(!substitute_data.ForceSynchronousLoad()); return kBlock;
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp index e1b2553..6a6cf8b 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp
@@ -171,7 +171,7 @@ const KURL original_url = new_request.Url(); if (!IsManualRedirectFetchRequest(resource_->GetResourceRequest())) { - ResourceRequestBlockedReason blocked_reason = Context().CanRequest( + ResourceRequestBlockedReason blocked_reason = Context().CanFollowRedirect( resource_->GetType(), new_request, new_request.Url(), resource_->Options(), /* Don't send security violation reports for unused preloads */
diff --git a/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h b/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h index 205ece8..1e92508 100644 --- a/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h +++ b/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h
@@ -54,6 +54,16 @@ FetchParameters::OriginRestriction) const override { return ResourceRequestBlockedReason::kNone; } + ResourceRequestBlockedReason CanFollowRedirect( + Resource::Type type, + const ResourceRequest& request, + const KURL& url, + const ResourceLoaderOptions& options, + SecurityViolationReportingPolicy reporting_policy, + FetchParameters::OriginRestriction origin_restriction) const override { + return CanRequest(type, request, url, options, reporting_policy, + origin_restriction); + } bool ShouldLoadNewResource(Resource::Type) const override { return load_policy_ == kShouldLoadNewResource; }
diff --git a/third_party/boringssl/BUILD.generated.gni b/third_party/boringssl/BUILD.generated.gni index e3b69b19..982aa13 100644 --- a/third_party/boringssl/BUILD.generated.gni +++ b/third_party/boringssl/BUILD.generated.gni
@@ -6,10 +6,6 @@ crypto_sources = [ "err_data.c", - "src/crypto/aes/aes.c", - "src/crypto/aes/internal.h", - "src/crypto/aes/key_wrap.c", - "src/crypto/aes/mode_wrappers.c", "src/crypto/asn1/a_bitstr.c", "src/crypto/asn1/a_bool.c", "src/crypto/asn1/a_d2i_fp.c", @@ -184,6 +180,9 @@ "src/crypto/pem/pem_pkey.c", "src/crypto/pem/pem_x509.c", "src/crypto/pem/pem_xaux.c", + "src/crypto/pkcs7/internal.h", + "src/crypto/pkcs7/pkcs7.c", + "src/crypto/pkcs7/pkcs7_x509.c", "src/crypto/pkcs8/internal.h", "src/crypto/pkcs8/p5_pbev2.c", "src/crypto/pkcs8/pkcs8.c", @@ -227,7 +226,6 @@ "src/crypto/x509/charmap.h", "src/crypto/x509/i2d_pr.c", "src/crypto/x509/internal.h", - "src/crypto/x509/pkcs7.c", "src/crypto/x509/rsa_pss.c", "src/crypto/x509/t_crl.c", "src/crypto/x509/t_req.c", @@ -419,9 +417,9 @@ ] crypto_sources_linux_aarch64 = [ - "linux-aarch64/crypto/aes/aesv8-armx64.S", "linux-aarch64/crypto/bn/armv8-mont.S", "linux-aarch64/crypto/chacha/chacha-armv8.S", + "linux-aarch64/crypto/fipsmodule/aesv8-armx64.S", "linux-aarch64/crypto/fipsmodule/sha1-armv8.S", "linux-aarch64/crypto/fipsmodule/sha256-armv8.S", "linux-aarch64/crypto/fipsmodule/sha512-armv8.S", @@ -429,11 +427,11 @@ ] crypto_sources_linux_arm = [ - "linux-arm/crypto/aes/aes-armv4.S", - "linux-arm/crypto/aes/aesv8-armx32.S", - "linux-arm/crypto/aes/bsaes-armv7.S", "linux-arm/crypto/bn/armv4-mont.S", "linux-arm/crypto/chacha/chacha-armv4.S", + "linux-arm/crypto/fipsmodule/aes-armv4.S", + "linux-arm/crypto/fipsmodule/aesv8-armx32.S", + "linux-arm/crypto/fipsmodule/bsaes-armv7.S", "linux-arm/crypto/fipsmodule/sha1-armv4-large.S", "linux-arm/crypto/fipsmodule/sha256-armv4.S", "linux-arm/crypto/fipsmodule/sha512-armv4.S", @@ -444,40 +442,40 @@ ] crypto_sources_linux_ppc64le = [ - "linux-ppc64le/crypto/aes/aesp8-ppc.S", + "linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S", "linux-ppc64le/crypto/modes/ghashp8-ppc.S", ] crypto_sources_linux_x86 = [ - "linux-x86/crypto/aes/aes-586.S", - "linux-x86/crypto/aes/aesni-x86.S", - "linux-x86/crypto/aes/vpaes-x86.S", "linux-x86/crypto/bn/bn-586.S", "linux-x86/crypto/bn/co-586.S", "linux-x86/crypto/bn/x86-mont.S", "linux-x86/crypto/chacha/chacha-x86.S", + "linux-x86/crypto/fipsmodule/aes-586.S", + "linux-x86/crypto/fipsmodule/aesni-x86.S", "linux-x86/crypto/fipsmodule/md5-586.S", "linux-x86/crypto/fipsmodule/sha1-586.S", "linux-x86/crypto/fipsmodule/sha256-586.S", "linux-x86/crypto/fipsmodule/sha512-586.S", + "linux-x86/crypto/fipsmodule/vpaes-x86.S", "linux-x86/crypto/modes/ghash-x86.S", ] crypto_sources_linux_x86_64 = [ - "linux-x86_64/crypto/aes/aes-x86_64.S", - "linux-x86_64/crypto/aes/aesni-x86_64.S", - "linux-x86_64/crypto/aes/bsaes-x86_64.S", - "linux-x86_64/crypto/aes/vpaes-x86_64.S", "linux-x86_64/crypto/bn/rsaz-avx2.S", "linux-x86_64/crypto/bn/x86_64-mont.S", "linux-x86_64/crypto/bn/x86_64-mont5.S", "linux-x86_64/crypto/chacha/chacha-x86_64.S", "linux-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S", "linux-x86_64/crypto/ec/p256-x86_64-asm.S", + "linux-x86_64/crypto/fipsmodule/aes-x86_64.S", + "linux-x86_64/crypto/fipsmodule/aesni-x86_64.S", + "linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S", "linux-x86_64/crypto/fipsmodule/md5-x86_64.S", "linux-x86_64/crypto/fipsmodule/sha1-x86_64.S", "linux-x86_64/crypto/fipsmodule/sha256-x86_64.S", "linux-x86_64/crypto/fipsmodule/sha512-x86_64.S", + "linux-x86_64/crypto/fipsmodule/vpaes-x86_64.S", "linux-x86_64/crypto/modes/aesni-gcm-x86_64.S", "linux-x86_64/crypto/modes/ghash-x86_64.S", "linux-x86_64/crypto/rand/rdrand-x86_64.S", @@ -485,35 +483,35 @@ ] crypto_sources_mac_x86 = [ - "mac-x86/crypto/aes/aes-586.S", - "mac-x86/crypto/aes/aesni-x86.S", - "mac-x86/crypto/aes/vpaes-x86.S", "mac-x86/crypto/bn/bn-586.S", "mac-x86/crypto/bn/co-586.S", "mac-x86/crypto/bn/x86-mont.S", "mac-x86/crypto/chacha/chacha-x86.S", + "mac-x86/crypto/fipsmodule/aes-586.S", + "mac-x86/crypto/fipsmodule/aesni-x86.S", "mac-x86/crypto/fipsmodule/md5-586.S", "mac-x86/crypto/fipsmodule/sha1-586.S", "mac-x86/crypto/fipsmodule/sha256-586.S", "mac-x86/crypto/fipsmodule/sha512-586.S", + "mac-x86/crypto/fipsmodule/vpaes-x86.S", "mac-x86/crypto/modes/ghash-x86.S", ] crypto_sources_mac_x86_64 = [ - "mac-x86_64/crypto/aes/aes-x86_64.S", - "mac-x86_64/crypto/aes/aesni-x86_64.S", - "mac-x86_64/crypto/aes/bsaes-x86_64.S", - "mac-x86_64/crypto/aes/vpaes-x86_64.S", "mac-x86_64/crypto/bn/rsaz-avx2.S", "mac-x86_64/crypto/bn/x86_64-mont.S", "mac-x86_64/crypto/bn/x86_64-mont5.S", "mac-x86_64/crypto/chacha/chacha-x86_64.S", "mac-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S", "mac-x86_64/crypto/ec/p256-x86_64-asm.S", + "mac-x86_64/crypto/fipsmodule/aes-x86_64.S", + "mac-x86_64/crypto/fipsmodule/aesni-x86_64.S", + "mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S", "mac-x86_64/crypto/fipsmodule/md5-x86_64.S", "mac-x86_64/crypto/fipsmodule/sha1-x86_64.S", "mac-x86_64/crypto/fipsmodule/sha256-x86_64.S", "mac-x86_64/crypto/fipsmodule/sha512-x86_64.S", + "mac-x86_64/crypto/fipsmodule/vpaes-x86_64.S", "mac-x86_64/crypto/modes/aesni-gcm-x86_64.S", "mac-x86_64/crypto/modes/ghash-x86_64.S", "mac-x86_64/crypto/rand/rdrand-x86_64.S", @@ -521,35 +519,35 @@ ] crypto_sources_win_x86 = [ - "win-x86/crypto/aes/aes-586.asm", - "win-x86/crypto/aes/aesni-x86.asm", - "win-x86/crypto/aes/vpaes-x86.asm", "win-x86/crypto/bn/bn-586.asm", "win-x86/crypto/bn/co-586.asm", "win-x86/crypto/bn/x86-mont.asm", "win-x86/crypto/chacha/chacha-x86.asm", + "win-x86/crypto/fipsmodule/aes-586.asm", + "win-x86/crypto/fipsmodule/aesni-x86.asm", "win-x86/crypto/fipsmodule/md5-586.asm", "win-x86/crypto/fipsmodule/sha1-586.asm", "win-x86/crypto/fipsmodule/sha256-586.asm", "win-x86/crypto/fipsmodule/sha512-586.asm", + "win-x86/crypto/fipsmodule/vpaes-x86.asm", "win-x86/crypto/modes/ghash-x86.asm", ] crypto_sources_win_x86_64 = [ - "win-x86_64/crypto/aes/aes-x86_64.asm", - "win-x86_64/crypto/aes/aesni-x86_64.asm", - "win-x86_64/crypto/aes/bsaes-x86_64.asm", - "win-x86_64/crypto/aes/vpaes-x86_64.asm", "win-x86_64/crypto/bn/rsaz-avx2.asm", "win-x86_64/crypto/bn/x86_64-mont.asm", "win-x86_64/crypto/bn/x86_64-mont5.asm", "win-x86_64/crypto/chacha/chacha-x86_64.asm", "win-x86_64/crypto/cipher/chacha20_poly1305_x86_64.asm", "win-x86_64/crypto/ec/p256-x86_64-asm.asm", + "win-x86_64/crypto/fipsmodule/aes-x86_64.asm", + "win-x86_64/crypto/fipsmodule/aesni-x86_64.asm", + "win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm", "win-x86_64/crypto/fipsmodule/md5-x86_64.asm", "win-x86_64/crypto/fipsmodule/sha1-x86_64.asm", "win-x86_64/crypto/fipsmodule/sha256-x86_64.asm", "win-x86_64/crypto/fipsmodule/sha512-x86_64.asm", + "win-x86_64/crypto/fipsmodule/vpaes-x86_64.asm", "win-x86_64/crypto/modes/aesni-gcm-x86_64.asm", "win-x86_64/crypto/modes/ghash-x86_64.asm", "win-x86_64/crypto/rand/rdrand-x86_64.asm",
diff --git a/third_party/boringssl/BUILD.generated_tests.gni b/third_party/boringssl/BUILD.generated_tests.gni index 71931bb..4197e37 100644 --- a/third_party/boringssl/BUILD.generated_tests.gni +++ b/third_party/boringssl/BUILD.generated_tests.gni
@@ -17,7 +17,9 @@ crypto_test_sources = [ "src/crypto/asn1/asn1_test.cc", + "src/crypto/base64/base64_test.cc", "src/crypto/bio/bio_test.cc", + "src/crypto/bytestring/bytestring_test.cc", "src/crypto/chacha/chacha_test.cc", "src/crypto/constant_time_test.cc", "src/crypto/curve25519/x25519_test.cc", @@ -37,30 +39,6 @@ ] template("create_tests") { - executable("boringssl_aes_test") { - sources = [ - "src/crypto/aes/aes_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps - } - - executable("boringssl_base64_test") { - sources = [ - "src/crypto/base64/base64_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps - } - executable("boringssl_bn_test") { sources = [ "src/crypto/bn/bn_test.cc", @@ -73,18 +51,6 @@ deps = invoker.deps } - executable("boringssl_bytestring_test") { - sources = [ - "src/crypto/bytestring/bytestring_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps - } - executable("boringssl_aead_test") { sources = [ "src/crypto/cipher/aead_test.cc", @@ -253,6 +219,18 @@ deps = invoker.deps } + executable("boringssl_aes_test") { + sources = [ + "src/crypto/fipsmodule/aes/aes_test.cc", + ] + sources += test_support_sources + if (defined(invoker.configs_exclude)) { + configs -= invoker.configs_exclude + } + configs += invoker.configs + deps = invoker.deps + } + executable("boringssl_hkdf_test") { sources = [ "src/crypto/hkdf/hkdf_test.cc", @@ -313,6 +291,18 @@ deps = invoker.deps } + executable("boringssl_pkcs7_test") { + sources = [ + "src/crypto/pkcs7/pkcs7_test.c", + ] + sources += test_support_sources + if (defined(invoker.configs_exclude)) { + configs -= invoker.configs_exclude + } + configs += invoker.configs + deps = invoker.deps + } + executable("boringssl_pkcs12_test") { sources = [ "src/crypto/pkcs8/pkcs12_test.cc", @@ -397,18 +387,6 @@ deps = invoker.deps } - executable("boringssl_pkcs7_test") { - sources = [ - "src/crypto/x509/pkcs7_test.c", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps - } - executable("boringssl_x509_test") { sources = [ "src/crypto/x509/x509_test.cc", @@ -449,9 +427,7 @@ deps = [ ":boringssl_aead_test", ":boringssl_aes_test", - ":boringssl_base64_test", ":boringssl_bn_test", - ":boringssl_bytestring_test", ":boringssl_cipher_test", ":boringssl_cmac_test", ":boringssl_ctrdrbg_vector_test",
diff --git a/third_party/boringssl/err_data.c b/third_party/boringssl/err_data.c index fbc962bd..a420f72 100644 --- a/third_party/boringssl/err_data.c +++ b/third_party/boringssl/err_data.c
@@ -74,51 +74,51 @@ 0xc3a8845, 0xc3b00ea, 0x10320845, - 0x1032947c, - 0x10331488, - 0x103394a1, - 0x103414b4, + 0x103294ce, + 0x103314da, + 0x103394f3, + 0x10341506, 0x10348ed1, 0x10350c42, - 0x103594c7, - 0x103614dc, - 0x103694ef, - 0x1037150e, - 0x10379527, - 0x1038153c, - 0x1038955a, - 0x10391569, - 0x10399585, - 0x103a15a0, - 0x103a95af, - 0x103b15cb, - 0x103b95e6, - 0x103c15fd, + 0x10359519, + 0x1036152e, + 0x10369541, + 0x10371560, + 0x10379579, + 0x1038158e, + 0x103895ac, + 0x103915bb, + 0x103995d7, + 0x103a15f2, + 0x103a9601, + 0x103b161d, + 0x103b9638, + 0x103c164f, 0x103c80ea, - 0x103d160e, - 0x103d9622, - 0x103e1641, - 0x103e9650, - 0x103f1667, - 0x103f967a, + 0x103d1660, + 0x103d9674, + 0x103e1693, + 0x103e96a2, + 0x103f16b9, + 0x103f96cc, 0x10400c06, - 0x1040968d, - 0x104116ab, - 0x104196be, - 0x104216d8, - 0x104296e8, - 0x104316fc, - 0x10439712, - 0x1044172a, - 0x1044973f, - 0x10451753, - 0x10459765, + 0x104096df, + 0x104116fd, + 0x10419710, + 0x1042172a, + 0x1042973a, + 0x1043174e, + 0x10439764, + 0x1044177c, + 0x10449791, + 0x104517a5, + 0x104597b7, 0x104605fb, 0x1046893f, - 0x1047177a, - 0x10479791, - 0x104817a6, - 0x104897b4, + 0x104717cc, + 0x104797e3, + 0x104817f8, + 0x10489806, 0x10490e33, 0x14320be9, 0x14328bf7, @@ -181,43 +181,43 @@ 0x28340c42, 0x283480ac, 0x283500ea, - 0x2c322b50, - 0x2c32ab5e, - 0x2c332b70, - 0x2c33ab82, - 0x2c342b96, - 0x2c34aba8, - 0x2c352bc3, - 0x2c35abd5, - 0x2c362be8, + 0x2c322bbb, + 0x2c32923e, + 0x2c332bc9, + 0x2c33abdb, + 0x2c342bef, + 0x2c34ac01, + 0x2c352c1c, + 0x2c35ac2e, + 0x2c362c41, 0x2c36832d, - 0x2c372bf5, - 0x2c37ac07, - 0x2c382c2c, - 0x2c38ac43, - 0x2c392c51, - 0x2c39ac61, - 0x2c3a2c73, - 0x2c3aac87, - 0x2c3b2c98, - 0x2c3bacb7, - 0x2c3c2ccb, - 0x2c3cace1, - 0x2c3d2cfa, - 0x2c3dad17, - 0x2c3e2d28, - 0x2c3ead36, - 0x2c3f2d4e, - 0x2c3fad66, - 0x2c402d73, + 0x2c372c4e, + 0x2c37ac60, + 0x2c382c85, + 0x2c38ac9c, + 0x2c392caa, + 0x2c39acba, + 0x2c3a2ccc, + 0x2c3aace0, + 0x2c3b2cf1, + 0x2c3bad10, + 0x2c3c1250, + 0x2c3c9266, + 0x2c3d2d24, + 0x2c3d927f, + 0x2c3e2d41, + 0x2c3ead4f, + 0x2c3f2d67, + 0x2c3fad7f, + 0x2c402d8c, 0x2c409151, - 0x2c412d84, - 0x2c41ad97, + 0x2c412d9d, + 0x2c41adb0, 0x2c42112a, - 0x2c42ada8, + 0x2c42adc1, 0x2c430720, - 0x2c43aca9, - 0x2c442c1a, + 0x2c43ad02, + 0x2c442c73, 0x30320000, 0x30328015, 0x3033001f, @@ -350,218 +350,219 @@ 0x3c410cf7, 0x3c418d36, 0x3c420e33, - 0x403217e7, - 0x403297fd, - 0x4033182b, - 0x40339835, - 0x4034184c, - 0x4034986a, - 0x4035187a, - 0x4035988c, - 0x40361899, - 0x403698a5, - 0x403718ba, - 0x403798cc, - 0x403818d7, - 0x403898e9, + 0x40321839, + 0x4032984f, + 0x4033187d, + 0x40339887, + 0x4034189e, + 0x403498bc, + 0x403518cc, + 0x403598de, + 0x403618eb, + 0x403698f7, + 0x4037190c, + 0x4037991e, + 0x40381929, + 0x4038993b, 0x40390ed1, - 0x403998f9, - 0x403a190c, - 0x403a992d, - 0x403b193e, - 0x403b994e, + 0x4039994b, + 0x403a195e, + 0x403a997f, + 0x403b1990, + 0x403b99a0, 0x403c0064, 0x403c8083, - 0x403d19d2, - 0x403d99e8, - 0x403e19f7, - 0x403e9a2f, - 0x403f1a49, - 0x403f9a57, - 0x40401a6c, - 0x40409a99, - 0x40411ab6, - 0x40419ad1, - 0x40421aea, - 0x40429afd, - 0x40431b11, - 0x40439b29, - 0x40441b40, + 0x403d1a24, + 0x403d9a3a, + 0x403e1a49, + 0x403e9a81, + 0x403f1a9b, + 0x403f9aa9, + 0x40401abe, + 0x40409aeb, + 0x40411b08, + 0x40419b23, + 0x40421b3c, + 0x40429b4f, + 0x40431b63, + 0x40439b7b, + 0x40441b92, 0x404480ac, - 0x40451b55, - 0x40459b67, - 0x40461b8b, - 0x40469bab, - 0x40471bb9, - 0x40479be0, - 0x40481c1d, - 0x40489c36, - 0x40491c4d, - 0x40499c67, - 0x404a1c7e, - 0x404a9c9c, - 0x404b1cb4, - 0x404b9ccb, - 0x404c1ce1, - 0x404c9cf3, - 0x404d1d14, - 0x404d9d36, - 0x404e1d4a, - 0x404e9d57, - 0x404f1d84, - 0x404f9dad, - 0x40501de8, - 0x40509dfc, - 0x40511e17, - 0x40521e27, - 0x40529e4b, - 0x40531e63, - 0x40539e76, - 0x40541e8b, - 0x40549eae, - 0x40551ebc, - 0x40559ed9, - 0x40561ee6, - 0x40569eff, - 0x40571f17, - 0x40579f2a, - 0x40581f3f, - 0x40589f66, - 0x40591f95, - 0x40599fc2, - 0x405a1fd6, - 0x405a9fe6, - 0x405b1ffe, - 0x405ba00f, - 0x405c2022, - 0x405ca061, - 0x405d206e, - 0x405da085, - 0x405e20c3, + 0x40451ba7, + 0x40459bb9, + 0x40461bdd, + 0x40469bfd, + 0x40471c0b, + 0x40479c32, + 0x40481c6f, + 0x40489c88, + 0x40491c9f, + 0x40499cb9, + 0x404a1cd0, + 0x404a9cee, + 0x404b1d06, + 0x404b9d1d, + 0x404c1d33, + 0x404c9d45, + 0x404d1d66, + 0x404d9d88, + 0x404e1d9c, + 0x404e9da9, + 0x404f1dd6, + 0x404f9dff, + 0x40501e3a, + 0x40509e4e, + 0x40511e69, + 0x40521e79, + 0x40529e9d, + 0x40531eb5, + 0x40539ec8, + 0x40541edd, + 0x40549f00, + 0x40551f0e, + 0x40559f2b, + 0x40561f38, + 0x40569f51, + 0x40571f69, + 0x40579f7c, + 0x40581f91, + 0x40589fb8, + 0x40591fe7, + 0x4059a014, + 0x405a2028, + 0x405aa038, + 0x405b2050, + 0x405ba061, + 0x405c2074, + 0x405ca0b3, + 0x405d20c0, + 0x405da0d7, + 0x405e2115, 0x405e8a95, - 0x405f20e4, - 0x405fa0f1, - 0x406020ff, - 0x4060a121, - 0x40612165, - 0x4061a19d, - 0x406221b4, - 0x4062a1c5, - 0x406321d6, - 0x4063a1eb, - 0x40642202, - 0x4064a22e, - 0x40652249, - 0x4065a260, - 0x40662278, - 0x4066a2a2, - 0x406722cd, - 0x4067a2ee, - 0x40682315, - 0x4068a336, - 0x40692368, - 0x4069a396, - 0x406a23b7, - 0x406aa3d7, - 0x406b255f, - 0x406ba582, - 0x406c2598, - 0x406ca813, - 0x406d2842, - 0x406da86a, - 0x406e2898, - 0x406ea8cc, - 0x406f28eb, - 0x406fa900, - 0x40702913, - 0x4070a930, + 0x405f2136, + 0x405fa143, + 0x40602151, + 0x4060a173, + 0x406121b7, + 0x4061a1ef, + 0x40622206, + 0x4062a217, + 0x40632228, + 0x4063a23d, + 0x40642254, + 0x4064a280, + 0x4065229b, + 0x4065a2b2, + 0x406622ca, + 0x4066a2f4, + 0x4067231f, + 0x4067a340, + 0x40682367, + 0x4068a388, + 0x406923ba, + 0x4069a3e8, + 0x406a2409, + 0x406aa429, + 0x406b25b1, + 0x406ba5d4, + 0x406c25ea, + 0x406ca865, + 0x406d2894, + 0x406da8bc, + 0x406e28ea, + 0x406ea91e, + 0x406f293d, + 0x406fa952, + 0x40702965, + 0x4070a982, 0x40710800, - 0x4071a942, - 0x40722955, - 0x4072a96e, - 0x40732986, - 0x407393eb, - 0x4074299a, - 0x4074a9b4, - 0x407529c5, - 0x4075a9d9, - 0x407629e7, + 0x4071a994, + 0x407229a7, + 0x4072a9c0, + 0x407329d8, + 0x4073943d, + 0x407429ec, + 0x4074aa06, + 0x40752a17, + 0x4075aa2b, + 0x40762a39, 0x40769214, - 0x40772a0c, - 0x4077aa2e, - 0x40782a49, - 0x4078aa82, - 0x40792a99, - 0x4079aaaf, - 0x407a2abb, - 0x407aaace, - 0x407b2ae3, - 0x407baaf5, - 0x407c2b26, - 0x407cab2f, - 0x407d2351, - 0x407d9dbd, - 0x407e2a5e, - 0x407e9f76, - 0x407f1bcd, - 0x407f9974, - 0x40801d94, - 0x40809bf5, - 0x40811e39, - 0x40819d6e, - 0x40822883, - 0x4082995a, - 0x40831f51, - 0x4083a213, - 0x40841c09, - 0x40849fae, - 0x40852033, - 0x4085a149, - 0x408620a5, - 0x40869dd7, - 0x408728b0, - 0x4087a17a, - 0x408819bb, - 0x4088a301, - 0x40891a0a, - 0x40899997, - 0x408a25b8, - 0x408a97cb, - 0x408b2b0a, - 0x408b9a80, - 0x408c2043, - 0x41f4248a, - 0x41f9251c, - 0x41fe240f, - 0x41fea604, - 0x41ff26f5, - 0x420324a3, - 0x420824c5, - 0x4208a501, - 0x420923f3, - 0x4209a53b, - 0x420a244a, - 0x420aa42a, - 0x420b246a, - 0x420ba4e3, - 0x420c2711, - 0x420ca5d1, - 0x420d25eb, - 0x420da622, - 0x4212263c, - 0x421726d8, - 0x4217a67e, - 0x421c26a0, - 0x421f265b, - 0x42212728, - 0x422626bb, - 0x422b27f7, - 0x422ba7a5, - 0x422c27df, - 0x422ca764, - 0x422d2743, - 0x422da7c4, - 0x422e278a, + 0x40772a5e, + 0x4077aa80, + 0x40782a9b, + 0x4078aad4, + 0x40792aeb, + 0x4079ab01, + 0x407a2b0d, + 0x407aab20, + 0x407b2b35, + 0x407bab47, + 0x407c2b78, + 0x407cab81, + 0x407d23a3, + 0x407d9e0f, + 0x407e2ab0, + 0x407e9fc8, + 0x407f1c1f, + 0x407f99c6, + 0x40801de6, + 0x40809c47, + 0x40811e8b, + 0x40819dc0, + 0x408228d5, + 0x408299ac, + 0x40831fa3, + 0x4083a265, + 0x40841c5b, + 0x4084a000, + 0x40852085, + 0x4085a19b, + 0x408620f7, + 0x40869e29, + 0x40872902, + 0x4087a1cc, + 0x40881a0d, + 0x4088a353, + 0x40891a5c, + 0x408999e9, + 0x408a260a, + 0x408a981d, + 0x408b2b5c, + 0x408b9ad2, + 0x408c2095, + 0x41f424dc, + 0x41f9256e, + 0x41fe2461, + 0x41fea656, + 0x41ff2747, + 0x420324f5, + 0x42082517, + 0x4208a553, + 0x42092445, + 0x4209a58d, + 0x420a249c, + 0x420aa47c, + 0x420b24bc, + 0x420ba535, + 0x420c2763, + 0x420ca623, + 0x420d263d, + 0x420da674, + 0x4212268e, + 0x4217272a, + 0x4217a6d0, + 0x421c26f2, + 0x421f26ad, + 0x4221277a, + 0x4226270d, + 0x422b2849, + 0x422ba7f7, + 0x422c2831, + 0x422ca7b6, + 0x422d2795, + 0x422da816, + 0x422e27dc, + 0x422eaba2, 0x4432072b, 0x4432873a, 0x44330746, @@ -579,100 +580,104 @@ 0x44390800, 0x4439880e, 0x443a0821, - 0x4c321252, - 0x4c329262, - 0x4c331275, - 0x4c339295, + 0x4832123e, + 0x48329250, + 0x48331266, + 0x4833927f, + 0x4c3212a4, + 0x4c3292b4, + 0x4c3312c7, + 0x4c3392e7, 0x4c3400ac, 0x4c3480ea, - 0x4c3512a1, - 0x4c3592af, - 0x4c3612cb, - 0x4c3692de, - 0x4c3712ed, - 0x4c3792fb, - 0x4c381310, - 0x4c38931c, - 0x4c39133c, - 0x4c399366, - 0x4c3a137f, - 0x4c3a9398, + 0x4c3512f3, + 0x4c359301, + 0x4c36131d, + 0x4c369330, + 0x4c37133f, + 0x4c37934d, + 0x4c381362, + 0x4c38936e, + 0x4c39138e, + 0x4c3993b8, + 0x4c3a13d1, + 0x4c3a93ea, 0x4c3b05fb, - 0x4c3b93b1, - 0x4c3c13c3, - 0x4c3c93d2, - 0x4c3d13eb, + 0x4c3b9403, + 0x4c3c1415, + 0x4c3c9424, + 0x4c3d143d, 0x4c3d8c29, - 0x4c3e1444, - 0x4c3e93fa, - 0x4c3f1466, + 0x4c3e1496, + 0x4c3e944c, + 0x4c3f14b8, 0x4c3f9214, - 0x4c401410, - 0x4c40923e, - 0x4c411434, - 0x50322dba, - 0x5032adc9, - 0x50332dd4, - 0x5033ade4, - 0x50342dfd, - 0x5034ae17, - 0x50352e25, - 0x5035ae3b, - 0x50362e4d, - 0x5036ae63, - 0x50372e7c, - 0x5037ae8f, - 0x50382ea7, - 0x5038aeb8, - 0x50392ecd, - 0x5039aee1, - 0x503a2f01, - 0x503aaf17, - 0x503b2f2f, - 0x503baf41, - 0x503c2f5d, - 0x503caf74, - 0x503d2f8d, - 0x503dafa3, - 0x503e2fb0, - 0x503eafc6, - 0x503f2fd8, + 0x4c401462, + 0x4c409290, + 0x4c411486, + 0x50322dd3, + 0x5032ade2, + 0x50332ded, + 0x5033adfd, + 0x50342e16, + 0x5034ae30, + 0x50352e3e, + 0x5035ae54, + 0x50362e66, + 0x5036ae7c, + 0x50372e95, + 0x5037aea8, + 0x50382ec0, + 0x5038aed1, + 0x50392ee6, + 0x5039aefa, + 0x503a2f1a, + 0x503aaf30, + 0x503b2f48, + 0x503baf5a, + 0x503c2f76, + 0x503caf8d, + 0x503d2fa6, + 0x503dafbc, + 0x503e2fc9, + 0x503eafdf, + 0x503f2ff1, 0x503f8382, - 0x50402feb, - 0x5040affb, - 0x50413015, - 0x5041b024, - 0x5042303e, - 0x5042b05b, - 0x5043306b, - 0x5043b07b, - 0x5044308a, + 0x50403004, + 0x5040b014, + 0x5041302e, + 0x5041b03d, + 0x50423057, + 0x5042b074, + 0x50433084, + 0x5043b094, + 0x504430a3, 0x5044843f, - 0x5045309e, - 0x5045b0bc, - 0x504630cf, - 0x5046b0e5, - 0x504730f7, - 0x5047b10c, - 0x50483132, - 0x5048b140, - 0x50493153, - 0x5049b168, - 0x504a317e, - 0x504ab18e, - 0x504b31ae, - 0x504bb1c1, - 0x504c31e4, - 0x504cb212, - 0x504d3224, - 0x504db241, - 0x504e325c, - 0x504eb278, - 0x504f328a, - 0x504fb2a1, - 0x505032b0, + 0x504530b7, + 0x5045b0d5, + 0x504630e8, + 0x5046b0fe, + 0x50473110, + 0x5047b125, + 0x5048314b, + 0x5048b159, + 0x5049316c, + 0x5049b181, + 0x504a3197, + 0x504ab1a7, + 0x504b31c7, + 0x504bb1da, + 0x504c31fd, + 0x504cb22b, + 0x504d323d, + 0x504db25a, + 0x504e3275, + 0x504eb291, + 0x504f32a3, + 0x504fb2ba, + 0x505032c9, 0x505086ef, - 0x505132c3, + 0x505132dc, 0x58320f0f, 0x68320ed1, 0x68328c4e, @@ -960,6 +965,10 @@ "SHORT_HEADER\0" "UNSUPPORTED_CIPHER\0" "UNSUPPORTED_ENCRYPTION\0" + "BAD_PKCS7_VERSION\0" + "NOT_PKCS7_SIGNED_DATA\0" + "NO_CERTIFICATES_INCLUDED\0" + "NO_CRLS_INCLUDED\0" "BAD_ITERATION_COUNT\0" "BAD_PKCS12_DATA\0" "BAD_PKCS12_VERSION\0" @@ -1229,8 +1238,8 @@ "WRONG_VERSION_ON_EARLY_DATA\0" "X509_LIB\0" "X509_VERIFICATION_SETUP_PROBLEMS\0" + "TOO_MUCH_READ_EARLY_DATA\0" "AKID_MISMATCH\0" - "BAD_PKCS7_VERSION\0" "BAD_X509_FILETYPE\0" "BASE64_DECODE_ERROR\0" "CANT_CHECK_DH_KEY\0" @@ -1250,10 +1259,7 @@ "LOADING_DEFAULTS\0" "NAME_TOO_LONG\0" "NEWER_CRL_NOT_NEWER\0" - "NOT_PKCS7_SIGNED_DATA\0" - "NO_CERTIFICATES_INCLUDED\0" "NO_CERT_SET_FOR_US_TO_VERIFY\0" - "NO_CRLS_INCLUDED\0" "NO_CRL_NUMBER\0" "PUBLIC_KEY_DECODE_ERROR\0" "PUBLIC_KEY_ENCODE_ERROR\0"
diff --git a/third_party/boringssl/linux-aarch64/crypto/aes/aesv8-armx64.S b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S similarity index 100% rename from third_party/boringssl/linux-aarch64/crypto/aes/aesv8-armx64.S rename to third_party/boringssl/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S
diff --git a/third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/aes-armv4.S similarity index 100% rename from third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S rename to third_party/boringssl/linux-arm/crypto/fipsmodule/aes-armv4.S
diff --git a/third_party/boringssl/linux-arm/crypto/aes/aesv8-armx32.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S similarity index 100% rename from third_party/boringssl/linux-arm/crypto/aes/aesv8-armx32.S rename to third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S
diff --git a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/bsaes-armv7.S similarity index 100% rename from third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S rename to third_party/boringssl/linux-arm/crypto/fipsmodule/bsaes-armv7.S
diff --git a/third_party/boringssl/linux-ppc64le/crypto/aes/aesp8-ppc.S b/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S similarity index 100% rename from third_party/boringssl/linux-ppc64le/crypto/aes/aesp8-ppc.S rename to third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S
diff --git a/third_party/boringssl/linux-x86/crypto/aes/aes-586.S b/third_party/boringssl/linux-x86/crypto/fipsmodule/aes-586.S similarity index 100% rename from third_party/boringssl/linux-x86/crypto/aes/aes-586.S rename to third_party/boringssl/linux-x86/crypto/fipsmodule/aes-586.S
diff --git a/third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S b/third_party/boringssl/linux-x86/crypto/fipsmodule/aesni-x86.S similarity index 99% rename from third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S rename to third_party/boringssl/linux-x86/crypto/fipsmodule/aesni-x86.S index aec110d..4a1c225 100644 --- a/third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S +++ b/third_party/boringssl/linux-x86/crypto/fipsmodule/aesni-x86.S
@@ -1,5 +1,5 @@ #if defined(__i386__) -.file "src/crypto/aes/asm/aesni-x86.S" +.file "src/crypto/fipsmodule/aes/asm/aesni-x86.S" .text .globl aesni_encrypt .hidden aesni_encrypt
diff --git a/third_party/boringssl/linux-x86/crypto/aes/vpaes-x86.S b/third_party/boringssl/linux-x86/crypto/fipsmodule/vpaes-x86.S similarity index 100% rename from third_party/boringssl/linux-x86/crypto/aes/vpaes-x86.S rename to third_party/boringssl/linux-x86/crypto/fipsmodule/vpaes-x86.S
diff --git a/third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S b/third_party/boringssl/linux-x86_64/crypto/fipsmodule/aes-x86_64.S similarity index 99% rename from third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S rename to third_party/boringssl/linux-x86_64/crypto/fipsmodule/aes-x86_64.S index 1a0a5124..0063c89 100644 --- a/third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S +++ b/third_party/boringssl/linux-x86_64/crypto/fipsmodule/aes-x86_64.S
@@ -1294,8 +1294,8 @@ .globl asm_AES_cbc_encrypt .hidden asm_AES_cbc_encrypt .type asm_AES_cbc_encrypt,@function -.extern OPENSSL_ia32cap_P -.hidden OPENSSL_ia32cap_P +.extern OPENSSL_ia32cap_addr +.hidden OPENSSL_ia32cap_addr .hidden asm_AES_cbc_encrypt asm_AES_cbc_encrypt: cmpq $0,%rdx @@ -1317,7 +1317,8 @@ cmpq $0,%r9 cmoveq %r10,%r14 - movl OPENSSL_ia32cap_P(%rip),%r10d + movq OPENSSL_ia32cap_addr(%rip),%r10 + movl (%r10),%r10d cmpq $512,%rdx jb .Lcbc_slow_prologue testq $15,%rdx
diff --git a/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S b/third_party/boringssl/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S similarity index 99% rename from third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S rename to third_party/boringssl/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S index 2890ccff..b5056f2 100644 --- a/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S +++ b/third_party/boringssl/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S
@@ -1,7 +1,7 @@ #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) .text -.extern OPENSSL_ia32cap_P -.hidden OPENSSL_ia32cap_P +.extern OPENSSL_ia32cap_addr +.hidden OPENSSL_ia32cap_addr .globl aesni_encrypt .hidden aesni_encrypt .type aesni_encrypt,@function @@ -1087,7 +1087,8 @@ leaq 7(%r8),%r9 movl %r10d,96+12(%rsp) bswapl %r9d - movl OPENSSL_ia32cap_P+4(%rip),%r10d + movq OPENSSL_ia32cap_addr(%rip),%r10 + movl 4(%r10),%r10d xorl %ebp,%r9d andl $71303168,%r10d movl %r9d,112+12(%rsp) @@ -3473,7 +3474,8 @@ movdqa %xmm5,%xmm14 movdqu 80(%rdi),%xmm7 movdqa %xmm6,%xmm15 - movl OPENSSL_ia32cap_P+4(%rip),%r9d + movq OPENSSL_ia32cap_addr(%rip),%r9 + movl 4(%r9),%r9d cmpq $0x70,%rdx jbe .Lcbc_dec_six_or_seven @@ -3994,10 +3996,11 @@ testq %rdx,%rdx jz .Lenc_key_ret - movl $268437504,%r10d movups (%rdi),%xmm0 xorps %xmm4,%xmm4 - andl OPENSSL_ia32cap_P+4(%rip),%r10d + movq OPENSSL_ia32cap_addr(%rip),%r10 + movl 4(%r10),%r10d + andl $268437504,%r10d leaq 16(%rdx),%rax cmpl $256,%esi je .L14rounds
diff --git a/third_party/boringssl/linux-x86_64/crypto/aes/bsaes-x86_64.S b/third_party/boringssl/linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S similarity index 100% rename from third_party/boringssl/linux-x86_64/crypto/aes/bsaes-x86_64.S rename to third_party/boringssl/linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S
diff --git a/third_party/boringssl/linux-x86_64/crypto/aes/vpaes-x86_64.S b/third_party/boringssl/linux-x86_64/crypto/fipsmodule/vpaes-x86_64.S similarity index 100% rename from third_party/boringssl/linux-x86_64/crypto/aes/vpaes-x86_64.S rename to third_party/boringssl/linux-x86_64/crypto/fipsmodule/vpaes-x86_64.S
diff --git a/third_party/boringssl/mac-x86/crypto/aes/aes-586.S b/third_party/boringssl/mac-x86/crypto/fipsmodule/aes-586.S similarity index 100% rename from third_party/boringssl/mac-x86/crypto/aes/aes-586.S rename to third_party/boringssl/mac-x86/crypto/fipsmodule/aes-586.S
diff --git a/third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S b/third_party/boringssl/mac-x86/crypto/fipsmodule/aesni-x86.S similarity index 99% rename from third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S rename to third_party/boringssl/mac-x86/crypto/fipsmodule/aesni-x86.S index 07719ba..07c7e1f 100644 --- a/third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S +++ b/third_party/boringssl/mac-x86/crypto/fipsmodule/aesni-x86.S
@@ -1,5 +1,5 @@ #if defined(__i386__) -.file "src/crypto/aes/asm/aesni-x86.S" +.file "src/crypto/fipsmodule/aes/asm/aesni-x86.S" .text .globl _aesni_encrypt .private_extern _aesni_encrypt
diff --git a/third_party/boringssl/mac-x86/crypto/aes/vpaes-x86.S b/third_party/boringssl/mac-x86/crypto/fipsmodule/vpaes-x86.S similarity index 100% rename from third_party/boringssl/mac-x86/crypto/aes/vpaes-x86.S rename to third_party/boringssl/mac-x86/crypto/fipsmodule/vpaes-x86.S
diff --git a/third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S b/third_party/boringssl/mac-x86_64/crypto/fipsmodule/aes-x86_64.S similarity index 99% rename from third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S rename to third_party/boringssl/mac-x86_64/crypto/fipsmodule/aes-x86_64.S index d60757b..891861c 100644 --- a/third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S +++ b/third_party/boringssl/mac-x86_64/crypto/fipsmodule/aes-x86_64.S
@@ -1316,7 +1316,8 @@ cmpq $0,%r9 cmoveq %r10,%r14 - movl _OPENSSL_ia32cap_P(%rip),%r10d + movq _OPENSSL_ia32cap_addr(%rip),%r10 + movl (%r10),%r10d cmpq $512,%rdx jb L$cbc_slow_prologue testq $15,%rdx
diff --git a/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S b/third_party/boringssl/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S similarity index 99% rename from third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S rename to third_party/boringssl/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S index fd62bc8..f77b955 100644 --- a/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S +++ b/third_party/boringssl/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S
@@ -1086,7 +1086,8 @@ leaq 7(%r8),%r9 movl %r10d,96+12(%rsp) bswapl %r9d - movl _OPENSSL_ia32cap_P+4(%rip),%r10d + movq _OPENSSL_ia32cap_addr(%rip),%r10 + movl 4(%r10),%r10d xorl %ebp,%r9d andl $71303168,%r10d movl %r9d,112+12(%rsp) @@ -3472,7 +3473,8 @@ movdqa %xmm5,%xmm14 movdqu 80(%rdi),%xmm7 movdqa %xmm6,%xmm15 - movl _OPENSSL_ia32cap_P+4(%rip),%r9d + movq _OPENSSL_ia32cap_addr(%rip),%r9 + movl 4(%r9),%r9d cmpq $0x70,%rdx jbe L$cbc_dec_six_or_seven @@ -3993,10 +3995,11 @@ testq %rdx,%rdx jz L$enc_key_ret - movl $268437504,%r10d movups (%rdi),%xmm0 xorps %xmm4,%xmm4 - andl _OPENSSL_ia32cap_P+4(%rip),%r10d + movq _OPENSSL_ia32cap_addr(%rip),%r10 + movl 4(%r10),%r10d + andl $268437504,%r10d leaq 16(%rdx),%rax cmpl $256,%esi je L$14rounds
diff --git a/third_party/boringssl/mac-x86_64/crypto/aes/bsaes-x86_64.S b/third_party/boringssl/mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S similarity index 100% rename from third_party/boringssl/mac-x86_64/crypto/aes/bsaes-x86_64.S rename to third_party/boringssl/mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S
diff --git a/third_party/boringssl/mac-x86_64/crypto/aes/vpaes-x86_64.S b/third_party/boringssl/mac-x86_64/crypto/fipsmodule/vpaes-x86_64.S similarity index 100% rename from third_party/boringssl/mac-x86_64/crypto/aes/vpaes-x86_64.S rename to third_party/boringssl/mac-x86_64/crypto/fipsmodule/vpaes-x86_64.S
diff --git a/third_party/boringssl/win-x86/crypto/aes/aes-586.asm b/third_party/boringssl/win-x86/crypto/fipsmodule/aes-586.asm similarity index 100% rename from third_party/boringssl/win-x86/crypto/aes/aes-586.asm rename to third_party/boringssl/win-x86/crypto/fipsmodule/aes-586.asm
diff --git a/third_party/boringssl/win-x86/crypto/aes/aesni-x86.asm b/third_party/boringssl/win-x86/crypto/fipsmodule/aesni-x86.asm similarity index 100% rename from third_party/boringssl/win-x86/crypto/aes/aesni-x86.asm rename to third_party/boringssl/win-x86/crypto/fipsmodule/aesni-x86.asm
diff --git a/third_party/boringssl/win-x86/crypto/aes/vpaes-x86.asm b/third_party/boringssl/win-x86/crypto/fipsmodule/vpaes-x86.asm similarity index 100% rename from third_party/boringssl/win-x86/crypto/aes/vpaes-x86.asm rename to third_party/boringssl/win-x86/crypto/fipsmodule/vpaes-x86.asm
diff --git a/third_party/boringssl/win-x86_64/crypto/aes/aes-x86_64.asm b/third_party/boringssl/win-x86_64/crypto/fipsmodule/aes-x86_64.asm similarity index 99% rename from third_party/boringssl/win-x86_64/crypto/aes/aes-x86_64.asm rename to third_party/boringssl/win-x86_64/crypto/fipsmodule/aes-x86_64.asm index 3db1846..f40c0fe 100644 --- a/third_party/boringssl/win-x86_64/crypto/aes/aes-x86_64.asm +++ b/third_party/boringssl/win-x86_64/crypto/fipsmodule/aes-x86_64.asm
@@ -1337,7 +1337,7 @@ ALIGN 16 global asm_AES_cbc_encrypt -EXTERN OPENSSL_ia32cap_P +EXTERN OPENSSL_ia32cap_addr asm_AES_cbc_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue @@ -1371,7 +1371,8 @@ cmp r9,0 cmove r14,r10 - mov r10d,DWORD[OPENSSL_ia32cap_P] + mov r10,QWORD[OPENSSL_ia32cap_addr] + mov r10d,DWORD[r10] cmp rdx,512 jb NEAR $L$cbc_slow_prologue test rdx,15
diff --git a/third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm b/third_party/boringssl/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm similarity index 99% rename from third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm rename to third_party/boringssl/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm index d5d454d..ef8ef26 100644 --- a/third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm +++ b/third_party/boringssl/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm
@@ -4,7 +4,7 @@ %define ZMMWORD section .text code align=64 -EXTERN OPENSSL_ia32cap_P +EXTERN OPENSSL_ia32cap_addr global aesni_encrypt ALIGN 16 @@ -1195,7 +1195,8 @@ lea r9,[7+r8] mov DWORD[((96+12))+rsp],r10d bswap r9d - mov r10d,DWORD[((OPENSSL_ia32cap_P+4))] + mov r10,QWORD[OPENSSL_ia32cap_addr] + mov r10d,DWORD[4+r10] xor r9d,ebp and r10d,71303168 mov DWORD[((112+12))+rsp],r9d @@ -3755,7 +3756,8 @@ movdqa xmm14,xmm5 movdqu xmm7,XMMWORD[80+rdi] movdqa xmm15,xmm6 - mov r9d,DWORD[((OPENSSL_ia32cap_P+4))] + mov r9,QWORD[OPENSSL_ia32cap_addr] + mov r9d,DWORD[4+r9] cmp rdx,0x70 jbe NEAR $L$cbc_dec_six_or_seven @@ -4292,10 +4294,11 @@ test r8,r8 jz NEAR $L$enc_key_ret - mov r10d,268437504 movups xmm0,XMMWORD[rcx] xorps xmm4,xmm4 - and r10d,DWORD[((OPENSSL_ia32cap_P+4))] + mov r10,QWORD[OPENSSL_ia32cap_addr] + mov r10d,DWORD[4+r10] + and r10d,268437504 lea rax,[16+r8] cmp edx,256 je NEAR $L$14rounds
diff --git a/third_party/boringssl/win-x86_64/crypto/aes/bsaes-x86_64.asm b/third_party/boringssl/win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm similarity index 100% rename from third_party/boringssl/win-x86_64/crypto/aes/bsaes-x86_64.asm rename to third_party/boringssl/win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm
diff --git a/third_party/boringssl/win-x86_64/crypto/aes/vpaes-x86_64.asm b/third_party/boringssl/win-x86_64/crypto/fipsmodule/vpaes-x86_64.asm similarity index 100% rename from third_party/boringssl/win-x86_64/crypto/aes/vpaes-x86_64.asm rename to third_party/boringssl/win-x86_64/crypto/fipsmodule/vpaes-x86_64.asm
diff --git a/third_party/closure_compiler/externs/networking_private.js b/third_party/closure_compiler/externs/networking_private.js index a1ec4ea..ecdd915 100644 --- a/third_party/closure_compiler/externs/networking_private.js +++ b/third_party/closure_compiler/externs/networking_private.js
@@ -78,6 +78,7 @@ ALL: 'All', CELLULAR: 'Cellular', ETHERNET: 'Ethernet', + TETHER: 'Tether', VPN: 'VPN', WIRELESS: 'Wireless', WI_FI: 'WiFi', @@ -762,6 +763,26 @@ /** * @typedef {{ + * BatteryPercentage: (number|undefined), + * Carrier: (string|undefined), + * SignalStrength: (number|undefined) + * }} + * @see https://developer.chrome.com/extensions/networkingPrivate#type-TetherProperties + */ +chrome.networkingPrivate.TetherProperties; + +/** + * @typedef {{ + * BatteryPercentage: (!chrome.networkingPrivate.ManagedLong|undefined), + * Carrier: (!chrome.networkingPrivate.ManagedDOMString|undefined), + * SignalStrength: (!chrome.networkingPrivate.ManagedLong|undefined) + * }} + * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedTetherProperties + */ +chrome.networkingPrivate.ManagedTetherProperties; + +/** + * @typedef {{ * AutoConnect: (boolean|undefined), * Host: (string|undefined), * IPsec: (!chrome.networkingPrivate.IPSecProperties|undefined), @@ -916,6 +937,7 @@ * StaticIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined), * SavedIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined), * Source: (string|undefined), + * Tether: (!chrome.networkingPrivate.TetherProperties|undefined), * Type: !chrome.networkingPrivate.NetworkType, * VPN: (!chrome.networkingPrivate.VPNProperties|undefined), * WiFi: (!chrome.networkingPrivate.WiFiProperties|undefined), @@ -944,6 +966,7 @@ * StaticIPConfig: (!chrome.networkingPrivate.ManagedIPConfigProperties|undefined), * SavedIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined), * Source: (string|undefined), + * Tether: (!chrome.networkingPrivate.ManagedTetherProperties|undefined), * Type: !chrome.networkingPrivate.NetworkType, * VPN: (!chrome.networkingPrivate.ManagedVPNProperties|undefined), * WiFi: (!chrome.networkingPrivate.ManagedWiFiProperties|undefined), @@ -964,6 +987,7 @@ * Name: (string|undefined), * Priority: (number|undefined), * Source: (string|undefined), + * Tether: (!chrome.networkingPrivate.TetherProperties|undefined), * Type: !chrome.networkingPrivate.NetworkType, * VPN: (!chrome.networkingPrivate.VPNStateProperties|undefined), * WiFi: (!chrome.networkingPrivate.WiFiStateProperties|undefined),
diff --git a/third_party/crashpad/README.chromium b/third_party/crashpad/README.chromium index 087a8e4e..0957a61 100644 --- a/third_party/crashpad/README.chromium +++ b/third_party/crashpad/README.chromium
@@ -2,7 +2,7 @@ Short Name: crashpad URL: https://crashpad.chromium.org/ Version: unknown -Revision: b8aaa22905308cc400f880006a84dddac834bd6b +Revision: f487da4ff2c47a129e2f8f3a7e0c769b54e4585f License: Apache 2.0 License File: crashpad/LICENSE Security Critical: yes
diff --git a/third_party/crashpad/crashpad/client/crashpad_client_win.cc b/third_party/crashpad/crashpad/client/crashpad_client_win.cc index 7a3d004..1a183c8a 100644 --- a/third_party/crashpad/crashpad/client/crashpad_client_win.cc +++ b/third_party/crashpad/crashpad/client/crashpad_client_win.cc
@@ -42,6 +42,7 @@ #include "util/win/ntstatus_logging.h" #include "util/win/process_info.h" #include "util/win/registration_protocol_win.h" +#include "util/win/safe_terminate_process.h" #include "util/win/scoped_process_suspend.h" #include "util/win/termination_codes.h" #include "util/win/xp_compat.h" @@ -126,7 +127,7 @@ // here, rather than trying to signal to a handler that will never arrive, // and then sleeping unnecessarily. LOG(ERROR) << "crash server failed to launch, self-terminating"; - TerminateProcess(GetCurrentProcess(), kTerminationCodeCrashNoDump); + SafeTerminateProcess(GetCurrentProcess(), kTerminationCodeCrashNoDump); return EXCEPTION_CONTINUE_SEARCH; } @@ -171,7 +172,7 @@ LOG(ERROR) << "crash server did not respond, self-terminating"; - TerminateProcess(GetCurrentProcess(), kTerminationCodeCrashNoDump); + SafeTerminateProcess(GetCurrentProcess(), kTerminationCodeCrashNoDump); return EXCEPTION_CONTINUE_SEARCH; } @@ -733,8 +734,8 @@ // Win32 APIs, so just use regular locking here in case of multiple threads // calling this function. If a crash occurs while we're in here, the worst // that can happen is that the server captures a partial dump for this path - // because on the other thread gathering a crash dump, it TerminateProcess()d, - // causing this one to abort. + // because another thread’s crash processing finished and the process was + // terminated before this thread’s non-crash processing could be completed. base::AutoLock lock(*g_non_crash_dump_lock); // Create a fake EXCEPTION_POINTERS to give the handler something to work @@ -777,8 +778,8 @@ void CrashpadClient::DumpAndCrash(EXCEPTION_POINTERS* exception_pointers) { if (g_signal_exception == INVALID_HANDLE_VALUE) { LOG(ERROR) << "not connected"; - TerminateProcess(GetCurrentProcess(), - kTerminationCodeNotConnectedToHandler); + SafeTerminateProcess(GetCurrentProcess(), + kTerminationCodeNotConnectedToHandler); return; }
diff --git a/third_party/crashpad/crashpad/handler/handler.gyp b/third_party/crashpad/crashpad/handler/handler.gyp index 50479828..aefd4de 100644 --- a/third_party/crashpad/crashpad/handler/handler.gyp +++ b/third_party/crashpad/crashpad/handler/handler.gyp
@@ -112,118 +112,7 @@ }, ], }, - { - 'target_name': 'crashy_program', - 'type': 'executable', - 'dependencies': [ - '../client/client.gyp:crashpad_client', - '../third_party/mini_chromium/mini_chromium.gyp:base', - '../util/util.gyp:crashpad_util', - ], - 'include_dirs': [ - '..', - ], - 'sources': [ - 'win/crashy_test_program.cc', - ], - }, - { - 'target_name': 'crashy_signal', - 'type': 'executable', - 'dependencies': [ - '../client/client.gyp:crashpad_client', - '../third_party/mini_chromium/mini_chromium.gyp:base', - ], - 'include_dirs': [ - '..', - ], - 'sources': [ - 'win/crashy_signal.cc', - ], - }, - { - 'target_name': 'crash_other_program', - 'type': 'executable', - 'dependencies': [ - '../client/client.gyp:crashpad_client', - '../test/test.gyp:crashpad_test', - '../third_party/mini_chromium/mini_chromium.gyp:base', - '../util/util.gyp:crashpad_util', - ], - 'sources': [ - 'win/crash_other_program.cc', - ], - }, - { - 'target_name': 'fake_handler_that_crashes_at_startup', - 'type': 'executable', - 'sources': [ - 'win/fake_handler_that_crashes_at_startup.cc', - ], - }, - { - 'target_name': 'hanging_program', - 'type': 'executable', - 'dependencies': [ - '../client/client.gyp:crashpad_client', - '../third_party/mini_chromium/mini_chromium.gyp:base', - ], - 'sources': [ - 'win/hanging_program.cc', - ], - }, - { - 'target_name': 'loader_lock_dll', - 'type': 'loadable_module', - 'sources': [ - 'win/loader_lock_dll.cc', - ], - 'msvs_settings': { - 'NoImportLibrary': 'true', - }, - }, - { - 'target_name': 'self_destroying_program', - 'type': 'executable', - 'dependencies': [ - '../client/client.gyp:crashpad_client', - '../compat/compat.gyp:crashpad_compat', - '../snapshot/snapshot.gyp:crashpad_snapshot', - '../third_party/mini_chromium/mini_chromium.gyp:base', - '../util/util.gyp:crashpad_util', - ], - 'include_dirs': [ - '..', - ], - 'sources': [ - 'win/self_destroying_test_program.cc', - ], - }, ], - 'conditions': [ - # Cannot create an x64 DLL with embedded debug info. - ['target_arch=="ia32"', { - 'targets': [ - { - 'target_name': 'crashy_z7_loader', - 'type': 'executable', - 'dependencies': [ - '../client/client.gyp:crashpad_client', - '../test/test.gyp:crashpad_test', - '../third_party/mini_chromium/mini_chromium.gyp:base', - ], - 'include_dirs': [ - '..', - ], - 'sources': [ - 'win/crashy_test_z7_loader.cc', - ], - }, - ], - }], - ], - }, { - 'targets': [], }], ], }
diff --git a/third_party/crashpad/crashpad/handler/handler_test.gyp b/third_party/crashpad/crashpad/handler/handler_test.gyp index e526418..588305f 100644 --- a/third_party/crashpad/crashpad/handler/handler_test.gyp +++ b/third_party/crashpad/crashpad/handler/handler_test.gyp
@@ -37,28 +37,140 @@ ], 'conditions': [ ['OS=="win"', { - 'targets': [{ - # The handler is only tested on Windows for now. - 'target_name': 'crashpad_handler_test', - 'type': 'executable', - 'dependencies': [ - 'crashpad_handler_test_extended_handler', - 'handler.gyp:crashpad_handler_lib', - '../client/client.gyp:crashpad_client', - '../compat/compat.gyp:crashpad_compat', - '../test/test.gyp:crashpad_gtest_main', - '../test/test.gyp:crashpad_test', - '../third_party/gtest/gtest.gyp:gtest', - '../third_party/mini_chromium/mini_chromium.gyp:base', - '../util/util.gyp:crashpad_util', - ], - 'include_dirs': [ - '..', - ], - 'sources': [ - 'crashpad_handler_test.cc', - ], - }], + 'targets': [ + { + 'target_name': 'crash_other_program', + 'type': 'executable', + 'dependencies': [ + '../client/client.gyp:crashpad_client', + '../test/test.gyp:crashpad_test', + '../third_party/gtest/gtest.gyp:gtest', + '../third_party/mini_chromium/mini_chromium.gyp:base', + '../util/util.gyp:crashpad_util', + ], + 'sources': [ + 'win/crash_other_program.cc', + ], + }, + { + # The handler is only tested on Windows for now. + 'target_name': 'crashpad_handler_test', + 'type': 'executable', + 'dependencies': [ + 'crashpad_handler_test_extended_handler', + 'handler.gyp:crashpad_handler_lib', + '../client/client.gyp:crashpad_client', + '../compat/compat.gyp:crashpad_compat', + '../test/test.gyp:crashpad_gtest_main', + '../test/test.gyp:crashpad_test', + '../third_party/gtest/gtest.gyp:gtest', + '../third_party/mini_chromium/mini_chromium.gyp:base', + '../util/util.gyp:crashpad_util', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'crashpad_handler_test.cc', + ], + }, + { + 'target_name': 'crashy_program', + 'type': 'executable', + 'dependencies': [ + '../client/client.gyp:crashpad_client', + '../third_party/mini_chromium/mini_chromium.gyp:base', + '../util/util.gyp:crashpad_util', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'win/crashy_test_program.cc', + ], + }, + { + 'target_name': 'crashy_signal', + 'type': 'executable', + 'dependencies': [ + '../client/client.gyp:crashpad_client', + '../third_party/mini_chromium/mini_chromium.gyp:base', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'win/crashy_signal.cc', + ], + }, + { + 'target_name': 'fake_handler_that_crashes_at_startup', + 'type': 'executable', + 'sources': [ + 'win/fake_handler_that_crashes_at_startup.cc', + ], + }, + { + 'target_name': 'hanging_program', + 'type': 'executable', + 'dependencies': [ + '../client/client.gyp:crashpad_client', + '../third_party/mini_chromium/mini_chromium.gyp:base', + ], + 'sources': [ + 'win/hanging_program.cc', + ], + }, + { + 'target_name': 'loader_lock_dll', + 'type': 'loadable_module', + 'sources': [ + 'win/loader_lock_dll.cc', + ], + 'msvs_settings': { + 'NoImportLibrary': 'true', + }, + }, + { + 'target_name': 'self_destroying_program', + 'type': 'executable', + 'dependencies': [ + '../client/client.gyp:crashpad_client', + '../compat/compat.gyp:crashpad_compat', + '../snapshot/snapshot.gyp:crashpad_snapshot', + '../third_party/mini_chromium/mini_chromium.gyp:base', + '../util/util.gyp:crashpad_util', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'win/self_destroying_test_program.cc', + ], + }, + ], + 'conditions': [ + # Cannot create an x64 DLL with embedded debug info. + ['target_arch=="ia32"', { + 'targets': [ + { + 'target_name': 'crashy_z7_loader', + 'type': 'executable', + 'dependencies': [ + '../client/client.gyp:crashpad_client', + '../test/test.gyp:crashpad_test', + '../third_party/mini_chromium/mini_chromium.gyp:base', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'win/crashy_test_z7_loader.cc', + ], + }, + ], + }], + ], }], ], }
diff --git a/third_party/crashpad/crashpad/handler/win/crash_other_program.cc b/third_party/crashpad/crashpad/handler/win/crash_other_program.cc index 389aee1..93a3a07 100644 --- a/third_party/crashpad/crashpad/handler/win/crash_other_program.cc +++ b/third_party/crashpad/crashpad/handler/win/crash_other_program.cc
@@ -20,6 +20,7 @@ #include "base/logging.h" #include "base/strings/stringprintf.h" #include "client/crashpad_client.h" +#include "gtest/gtest.h" #include "test/test_paths.h" #include "test/win/child_launcher.h" #include "util/file/file_io.h" @@ -93,6 +94,10 @@ test_executable.DirName().Append(L"hanging_program.exe").value(); ChildLauncher child(child_test_executable, argv[1]); child.Start(); + if (testing::Test::HasFatalFailure()) { + LOG(ERROR) << "failed to start child"; + return EXIT_FAILURE; + } // Wait until it's ready. char c;
diff --git a/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win_test.cc b/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win_test.cc index e2776964..286e7a6 100644 --- a/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win_test.cc +++ b/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win_test.cc
@@ -148,7 +148,7 @@ L"_crashing_child.exe") .value(); ChildLauncher child(child_test_executable, pipe_name); - child.Start(); + ASSERT_NO_FATAL_FAILURE(child.Start()); // The child tells us (approximately) where it will crash. WinVMAddress break_near_address; @@ -256,7 +256,7 @@ L"_dump_without_crashing.exe") .value(); ChildLauncher child(child_test_executable, pipe_name); - child.Start(); + ASSERT_NO_FATAL_FAILURE(child.Start()); // The child tells us (approximately) where it will capture a dump. WinVMAddress dump_near_address;
diff --git a/third_party/crashpad/crashpad/snapshot/win/extra_memory_ranges_test.cc b/third_party/crashpad/crashpad/snapshot/win/extra_memory_ranges_test.cc index 49d835f0..a012027b 100644 --- a/third_party/crashpad/crashpad/snapshot/win/extra_memory_ranges_test.cc +++ b/third_party/crashpad/crashpad/snapshot/win/extra_memory_ranges_test.cc
@@ -53,7 +53,7 @@ L"_extra_memory_ranges.exe") .value(); ChildLauncher child(child_test_executable, L""); - child.Start(); + ASSERT_NO_FATAL_FAILURE(child.Start()); // Wait for the child process to indicate that it's done setting up its // annotations via the CrashpadInfo interface.
diff --git a/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader_test.cc b/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader_test.cc index 02a6123..a20e986 100644 --- a/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader_test.cc +++ b/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader_test.cc
@@ -57,7 +57,7 @@ L"_simple_annotations.exe") .value(); ChildLauncher child(child_test_executable, L""); - child.Start(); + ASSERT_NO_FATAL_FAILURE(child.Start()); // Wait for the child process to indicate that it's done setting up its // annotations via the CrashpadInfo interface.
diff --git a/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc b/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc index 75e6e70..a0e5cef4 100644 --- a/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc +++ b/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc
@@ -46,7 +46,7 @@ L"_image_reader.exe") .value(); ChildLauncher child(child_test_executable, done_uuid.ToString16()); - child.Start(); + ASSERT_NO_FATAL_FAILURE(child.Start()); char c; ASSERT_TRUE(
diff --git a/third_party/crashpad/crashpad/test/win/child_launcher.h b/third_party/crashpad/crashpad/test/win/child_launcher.h index 22463fa..6674efe 100644 --- a/third_party/crashpad/crashpad/test/win/child_launcher.h +++ b/third_party/crashpad/crashpad/test/win/child_launcher.h
@@ -39,6 +39,9 @@ //! \brief Starts the child process, after which the handle functions below //! will be valid. + //! + //! Errors are signaled via gtest assertions. This method may be invoked via + //! `ASSERT_NO_FATAL_FAILURE()` to assert that it succeeds. void Start(); //! \brief Waits for the child process to exit.
diff --git a/third_party/crashpad/crashpad/util/net/http_multipart_builder.cc b/third_party/crashpad/crashpad/util/net/http_multipart_builder.cc index 640d540..91105be 100644 --- a/third_party/crashpad/crashpad/util/net/http_multipart_builder.cc +++ b/third_party/crashpad/crashpad/util/net/http_multipart_builder.cc
@@ -40,8 +40,8 @@ // characters from the set “'()+_,-./:=? ”, and not ending in a space. // However, some servers have been observed as dealing poorly with certain // nonalphanumeric characters. See - // blink/Source/platform/network/FormDataBuilder.cpp - // blink::FormDataBuilder::generateUniqueBoundaryString(). + // blink/Source/platform/network/FormDataEncoder.cpp + // blink::FormDataEncoder::GenerateUniqueBoundaryString(). // // This implementation produces a 56-character string with over 190 bits of // randomness (62^32 > 2^190). @@ -60,17 +60,12 @@ // Escapes the specified name to be suitable for the name field of a // form-data part. std::string EncodeMIMEField(const std::string& name) { - // RFC 2388 §3 says to encode non-ASCII field names according to RFC 2047, but - // no browsers implement that behavior. Instead, they send field names in the - // page hosting the form’s encoding. However, some form of escaping is needed. // This URL-escapes the quote character and newline characters, per Blink. See - // blink/Source/platform/network/FormDataBuilder.cpp - // blink::appendQuotedString(). - // - // TODO(mark): This encoding is not necessarily correct, and the same code in - // Blink is marked with a FIXME. Blink does not escape the '%' character, - // that’s a local addition, but it seems appropriate to be able to decode the - // string properly. + // blink/Source/platform/network/FormDataEncoder.cpp + // blink::AppendQuotedString(). %-encoding is endorsed by RFC 7578 §2, with + // approval for otherwise unencoded UTF-8 given by RFC 7578 §5.1. Blink does + // not escape the '%' character, but it seems appropriate to do so in order to + // be able to decode the string properly. std::string encoded; for (char character : name) { switch (character) {
diff --git a/third_party/crashpad/crashpad/util/util.gyp b/third_party/crashpad/crashpad/util/util.gyp index 5bc4de6..74613f93 100644 --- a/third_party/crashpad/crashpad/util/util.gyp +++ b/third_party/crashpad/crashpad/util/util.gyp
@@ -212,6 +212,8 @@ 'win/process_structs.h', 'win/registration_protocol_win.cc', 'win/registration_protocol_win.h', + 'win/safe_terminate_process.asm', + 'win/safe_terminate_process.h', 'win/scoped_handle.cc', 'win/scoped_handle.h', 'win/scoped_local_alloc.cc', @@ -316,6 +318,7 @@ }, { # else: OS!="win" 'sources!': [ 'win/capture_context.asm', + 'win/safe_terminate_process.asm', ], }], ['OS=="linux"', {
diff --git a/third_party/crashpad/crashpad/util/util_test.gyp b/third_party/crashpad/crashpad/util/util_test.gyp index 95dac08..20e0c95 100644 --- a/third_party/crashpad/crashpad/util/util_test.gyp +++ b/third_party/crashpad/crashpad/util/util_test.gyp
@@ -102,6 +102,7 @@ 'win/initial_client_data_test.cc', 'win/process_info_test.cc', 'win/registration_protocol_win_test.cc', + 'win/safe_terminate_process_test.cc', 'win/scoped_process_suspend_test.cc', 'win/session_end_watcher_test.cc', 'win/time_test.cc', @@ -117,6 +118,7 @@ ['OS=="win"', { 'dependencies': [ 'crashpad_util_test_process_info_test_child', + 'crashpad_util_test_safe_terminate_process_test_child', ], 'link_settings': { 'libraries': [ @@ -171,6 +173,13 @@ }, }, }, + { + 'target_name': 'crashpad_util_test_safe_terminate_process_test_child', + 'type': 'executable', + 'sources': [ + 'win/safe_terminate_process_test_child.cc', + ], + }, ] }], ],
diff --git a/third_party/crashpad/crashpad/util/win/capture_context.asm b/third_party/crashpad/crashpad/util/win/capture_context.asm index 56efec7f..b0093ba 100644 --- a/third_party/crashpad/crashpad/util/win/capture_context.asm +++ b/third_party/crashpad/crashpad/util/win/capture_context.asm
@@ -21,7 +21,7 @@ ifdef _M_IX86 .586 -.XMM +.xmm .model flat endif @@ -212,7 +212,7 @@ endif ; namespace crashpad { -; void CaptureContext(CONTEXT* context) +; void CaptureContext(CONTEXT* context); ; } // namespace crashpad ifdef _M_IX86 CAPTURECONTEXT_SYMBOL equ ?CaptureContext@crashpad@@YAXPAU_CONTEXT@@@Z
diff --git a/third_party/crashpad/crashpad/util/win/exception_handler_server.cc b/third_party/crashpad/crashpad/util/win/exception_handler_server.cc index fdc159c..6642665 100644 --- a/third_party/crashpad/crashpad/util/win/exception_handler_server.cc +++ b/third_party/crashpad/crashpad/util/win/exception_handler_server.cc
@@ -34,6 +34,7 @@ #include "util/win/get_function.h" #include "util/win/handle.h" #include "util/win/registration_protocol_win.h" +#include "util/win/safe_terminate_process.h" #include "util/win/xp_compat.h" namespace crashpad { @@ -546,7 +547,7 @@ client->crash_exception_information_address(), client->debug_critical_section_address()); - TerminateProcess(client->process(), exit_code); + SafeTerminateProcess(client->process(), exit_code); } // static
diff --git a/third_party/crashpad/crashpad/util/win/process_info_test.cc b/third_party/crashpad/crashpad/util/win/process_info_test.cc index 5445942..322a987 100644 --- a/third_party/crashpad/crashpad/util/win/process_info_test.cc +++ b/third_party/crashpad/crashpad/util/win/process_info_test.cc
@@ -151,7 +151,7 @@ AppendCommandLineArgument(done_uuid.ToString16(), &args); ChildLauncher child(child_test_executable, args); - child.Start(); + ASSERT_NO_FATAL_FAILURE(child.Start()); // The child sends us a code address we can look up in the memory map. WinVMAddress code_address;
diff --git a/third_party/crashpad/crashpad/util/win/safe_terminate_process.asm b/third_party/crashpad/crashpad/util/win/safe_terminate_process.asm new file mode 100644 index 0000000..b219a9e6 --- /dev/null +++ b/third_party/crashpad/crashpad/util/win/safe_terminate_process.asm
@@ -0,0 +1,74 @@ +; Copyright 2017 The Crashpad Authors. All rights reserved. +; +; Licensed under the Apache License, Version 2.0 (the "License"); +; you may not use this file except in compliance with the License. +; You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. + +; Detect ml64 assembling for x86_64 by checking for rax. +ifdef rax +_M_X64 equ 1 +else +_M_IX86 equ 1 +endif + +ifdef _M_IX86 +.586 +.xmm +.model flat + +includelib kernel32.lib + +extern __imp__TerminateProcess@8:proc + +; namespace crashpad { +; bool SafeTerminateProcess(HANDLE process, UINT exit_code); +; } // namespace crashpad +SAFETERMINATEPROCESS_SYMBOL equ ?SafeTerminateProcess@crashpad@@YA_NPAXI@Z + +_TEXT segment +public SAFETERMINATEPROCESS_SYMBOL + +SAFETERMINATEPROCESS_SYMBOL proc + + ; This function is written in assembler source because it’s important for it + ; to not be inlined, for it to allocate a stack frame, and most critically, + ; for it to not trust esp on return from TerminateProcess(). + ; __declspec(noinline) can prevent inlining and #pragma optimize("y", off) can + ; disable frame pointer omission, but there’s no way to force a C compiler to + ; distrust esp, and even if there was a way, it’d probably be fragile. + + push ebp + mov ebp, esp + + push [ebp+12] + push [ebp+8] + call dword ptr [__imp__TerminateProcess@8] + + ; Convert from BOOL to bool. + test eax, eax + setne al + + ; TerminateProcess() is supposed to be stdcall (callee clean-up), and esp and + ; ebp are expected to already be equal. But if it’s been patched badly by + ; something that’s cdecl (caller clean-up), this next move will get things + ; back on track. + mov esp, ebp + pop ebp + + ret + +SAFETERMINATEPROCESS_SYMBOL endp + +_TEXT ends + +endif + +end
diff --git a/third_party/crashpad/crashpad/util/win/safe_terminate_process.h b/third_party/crashpad/crashpad/util/win/safe_terminate_process.h new file mode 100644 index 0000000..7079eb2 --- /dev/null +++ b/third_party/crashpad/crashpad/util/win/safe_terminate_process.h
@@ -0,0 +1,55 @@ +// Copyright 2017 The Crashpad Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef CRASHPAD_UTIL_WIN_SAFE_TERMINATE_PROCESS_H_ +#define CRASHPAD_UTIL_WIN_SAFE_TERMINATE_PROCESS_H_ + +#include <windows.h> + +#include "build/build_config.h" + +namespace crashpad { + +//! \brief Calls `TerminateProcess()`. +//! +//! `TerminateProcess()` has been observed in the wild as being patched badly on +//! 32-bit x86: it’s patched with code adhering to the `cdecl` (caller clean-up) +//! convention, although it’s supposed to be `stdcall` (callee clean-up). The +//! mix-up means that neither caller nor callee perform parameter clean-up from +//! the stack, causing the stack pointer to have an unexpected value on return +//! from the patched function. This typically results in a crash shortly +//! thereafter. See <a href="https://crashpad.chromium.org/bug/179">Crashpad bug +//! 179</a>. +//! +//! On 32-bit x86, this replacement function calls `TerminateProcess()` without +//! making any assumptions about the stack pointer on its return. As such, it’s +//! compatible with the badly patched `cdecl` version as well as the native +//! `stdcall` version (and other less badly patched versions). +//! +//! Elsewhere, this function calls `TerminateProcess()` directly without any +//! additional fanfare. +//! +//! Call this function instead of `TerminateProcess()` anywhere that +//! `TerminateProcess()` would normally be called. +bool SafeTerminateProcess(HANDLE process, UINT exit_code); + +#if !defined(ARCH_CPU_X86) +inline bool SafeTerminateProcess(HANDLE process, UINT exit_code) { + return TerminateProcess(process, exit_code) != FALSE; +} +#endif // !ARCH_CPU_X86 + +} // namespace crashpad + +#endif // CRASHPAD_UTIL_WIN_SAFE_TERMINATE_PROCESS_H_
diff --git a/third_party/crashpad/crashpad/util/win/safe_terminate_process_test.cc b/third_party/crashpad/crashpad/util/win/safe_terminate_process_test.cc new file mode 100644 index 0000000..2fbc8483 --- /dev/null +++ b/third_party/crashpad/crashpad/util/win/safe_terminate_process_test.cc
@@ -0,0 +1,185 @@ +// Copyright 2017 The Crashpad Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "util/win/safe_terminate_process.h" + +#include <string.h> + +#include <string> +#include <memory> + +#include "base/files/file_path.h" +#include "base/logging.h" +#include "base/macros.h" +#include "build/build_config.h" +#include "gtest/gtest.h" +#include "test/errors.h" +#include "test/test_paths.h" +#include "test/win/child_launcher.h" +#include "util/win/scoped_handle.h" + +namespace crashpad { +namespace test { +namespace { + +// Patches executable code, saving a copy of the original code so that it can be +// restored on destruction. +class ScopedExecutablePatch { + public: + ScopedExecutablePatch(void* target, const void* source, size_t size) + : original_(new uint8_t[size]), target_(target), size_(size) { + memcpy(original_.get(), target_, size_); + + ScopedVirtualProtectRWX protect_rwx(target_, size_); + memcpy(target_, source, size_); + } + + ~ScopedExecutablePatch() { + ScopedVirtualProtectRWX protect_rwx(target_, size_); + memcpy(target_, original_.get(), size_); + } + + private: + // Sets the protection on (address, size) to PAGE_EXECUTE_READWRITE by calling + // VirtualProtect(), and restores the original protection on destruction. Note + // that the region may span multiple pages, but the first page’s original + // protection will be applied to the entire region on destruction. This + // shouldn’t be a problem in practice for patching a function for this test’s + // purposes. + class ScopedVirtualProtectRWX { + public: + // If either the constructor or destructor fails, PCHECK() to terminate + // immediately, because the process will be in a weird and untrustworthy + // state, and gtest error handling isn’t worthwhile at that point. + + ScopedVirtualProtectRWX(void* address, size_t size) + : address_(address), size_(size) { + PCHECK(VirtualProtect( + address_, size_, PAGE_EXECUTE_READWRITE, &old_protect_)) + << "VirtualProtect"; + } + + ~ScopedVirtualProtectRWX() { + DWORD last_protect_; + PCHECK(VirtualProtect(address_, size_, old_protect_, &last_protect_)) + << "VirtualProtect"; + } + + private: + void* address_; + size_t size_; + DWORD old_protect_; + + DISALLOW_COPY_AND_ASSIGN(ScopedVirtualProtectRWX); + }; + + std::unique_ptr<uint8_t[]> original_; + void* target_; + size_t size_; + + DISALLOW_COPY_AND_ASSIGN(ScopedExecutablePatch); +}; + +TEST(SafeTerminateProcess, PatchBadly) { + // This is a test of SafeTerminateProcess(), but it doesn’t actually terminate + // anything. Instead, it works with a process handle for the current process + // that doesn’t have PROCESS_TERMINATE access. The whole point of this test is + // to patch the real TerminateProcess() badly with a cdecl implementation to + // ensure that SafeTerminateProcess() can recover from such gross misconduct. + // The actual termination isn’t relevant to this test. + // + // Notably, don’t duplicate the process handle with PROCESS_TERMINATE access + // or with the DUPLICATE_SAME_ACCESS option. The SafeTerminateProcess() calls + // that follow operate on a duplicate of the current process’ process handle, + // and they’re supposed to fail, not terminate this process. + HANDLE process; + ASSERT_TRUE(DuplicateHandle(GetCurrentProcess(), + GetCurrentProcess(), + GetCurrentProcess(), + &process, + PROCESS_QUERY_INFORMATION, + false, + 0)) + << ErrorMessage("DuplicateHandle"); + ScopedKernelHANDLE process_owner(process); + + // Make sure that TerminateProcess() works as a baseline. + SetLastError(ERROR_SUCCESS); + EXPECT_FALSE(TerminateProcess(process, 0)); + EXPECT_EQ(GetLastError(), ERROR_ACCESS_DENIED); + + // Make sure that SafeTerminateProcess() works, calling through to + // TerminateProcess() properly. + SetLastError(ERROR_SUCCESS); + EXPECT_FALSE(SafeTerminateProcess(process, 0)); + EXPECT_EQ(GetLastError(), ERROR_ACCESS_DENIED); + + { + // Patch TerminateProcess() badly. This turns it into a no-op that returns 0 + // without cleaning up arguments from the stack, as a stdcall function is + // expected to do. + // + // This simulates the unexpected cdecl-patched TerminateProcess() as seen at + // https://crashpad.chromium.org/bug/179. In reality, this only affects + // 32-bit x86, as there’s no calling convention confusion on x86_64. It + // doesn’t hurt to run this test in the 64-bit environment, though. + const uint8_t patch[] = { +#if defined(ARCH_CPU_X86) + 0x31, 0xc0, // xor eax, eax +#elif defined(ARCH_CPU_X86_64) + 0x48, 0x31, 0xc0, // xor rax, rax +#else +#error Port +#endif + 0xc3, // ret + }; + + void* target = reinterpret_cast<void*>(TerminateProcess); + ScopedExecutablePatch executable_patch(target, patch, arraysize(patch)); + + // Make sure that SafeTerminateProcess() can be called. Since it’s been + // patched with a no-op stub, GetLastError() shouldn’t be modified. + SetLastError(ERROR_SUCCESS); + EXPECT_FALSE(SafeTerminateProcess(process, 0)); + EXPECT_EQ(GetLastError(), ERROR_SUCCESS); + } + + // Now that the real TerminateProcess() has been restored, verify that it + // still works properly. + SetLastError(ERROR_SUCCESS); + EXPECT_FALSE(SafeTerminateProcess(process, 0)); + EXPECT_EQ(GetLastError(), ERROR_ACCESS_DENIED); +} + +TEST(SafeTerminateProcess, TerminateChild) { + base::FilePath test_executable = TestPaths::Executable(); + std::wstring child_executable = + test_executable.DirName() + .Append(test_executable.BaseName().RemoveFinalExtension().value() + + L"_safe_terminate_process_test_child.exe") + .value(); + + ChildLauncher child(child_executable, std::wstring()); + ASSERT_NO_FATAL_FAILURE(child.Start()); + + constexpr DWORD kExitCode = 0x51ee9d1e; // Sort of like “sleep and die.” + + ASSERT_TRUE(SafeTerminateProcess(child.process_handle(), kExitCode)) + << ErrorMessage("TerminateProcess"); + EXPECT_EQ(child.WaitForExit(), kExitCode); +} + +} // namespace +} // namespace test +} // namespace crashpad
diff --git a/third_party/crashpad/crashpad/util/win/safe_terminate_process_test_child.cc b/third_party/crashpad/crashpad/util/win/safe_terminate_process_test_child.cc new file mode 100644 index 0000000..605778b --- /dev/null +++ b/third_party/crashpad/crashpad/util/win/safe_terminate_process_test_child.cc
@@ -0,0 +1,22 @@ +// Copyright 2017 The Crashpad Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include <stdlib.h> +#include <wchar.h> +#include <windows.h> + +int wmain(int argc, wchar_t** argv) { + Sleep(INFINITE); + return EXIT_FAILURE; +}
diff --git a/third_party/crashpad/crashpad/util/win/termination_codes.h b/third_party/crashpad/crashpad/util/win/termination_codes.h index 1bcbf5dd..ce7fdba 100644 --- a/third_party/crashpad/crashpad/util/win/termination_codes.h +++ b/third_party/crashpad/crashpad/util/win/termination_codes.h
@@ -18,7 +18,7 @@ namespace crashpad { //! \brief Crashpad-specific codes that are used as arguments to -//! `TerminateProcess()` in unusual circumstances. +//! SafeTerminateProcess() or `TerminateProcess()` in unusual circumstances. enum TerminationCodes : unsigned int { //! \brief The crash handler did not respond, and the client self-terminated. kTerminationCodeCrashNoDump = 0xffff7001,
diff --git a/tools/cfi/blacklist.txt b/tools/cfi/blacklist.txt index ec3da8c..365cb090 100644 --- a/tools/cfi/blacklist.txt +++ b/tools/cfi/blacklist.txt
@@ -1,8 +1,8 @@ # e.g. RolloverProtectedTickClock fun:*MutableInstance* -# WTF allocators. -fun:*allocate*Backing* +# WTF allocators. See https://crbug.com/713293. +fun:*Allocate*Backing* # WTF::ThreadSpecific fun:*ThreadSpecific*
diff --git a/tools/gn/build_settings.cc b/tools/gn/build_settings.cc index c60002d..4cf2b86 100644 --- a/tools/gn/build_settings.cc +++ b/tools/gn/build_settings.cc
@@ -25,6 +25,10 @@ BuildSettings::~BuildSettings() { } +void BuildSettings::SetRootTargetLabel(const Label& r) { + root_target_label_ = r; +} + void BuildSettings::SetRootPath(const base::FilePath& r) { DCHECK(r.value()[r.value().size() - 1] != base::FilePath::kSeparators[0]); root_path_ = r.NormalizePathSeparatorsTo('/');
diff --git a/tools/gn/build_settings.h b/tools/gn/build_settings.h index 3f9f45b..3f41ae3 100644 --- a/tools/gn/build_settings.h +++ b/tools/gn/build_settings.h
@@ -14,6 +14,7 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "tools/gn/args.h" +#include "tools/gn/label.h" #include "tools/gn/scope.h" #include "tools/gn/source_dir.h" #include "tools/gn/source_file.h" @@ -31,6 +32,10 @@ BuildSettings(const BuildSettings& other); ~BuildSettings(); + // Root target label. + const Label& root_target_label() const { return root_target_label_; } + void SetRootTargetLabel(const Label& r); + // Absolute path of the source root on the local system. Everything is // relative to this. Does not end in a [back]slash. const base::FilePath& root_path() const { return root_path_; } @@ -104,6 +109,7 @@ } private: + Label root_target_label_; base::FilePath root_path_; std::string root_path_utf8_; base::FilePath secondary_source_path_;
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md index 9c318b8e..4b88f55 100644 --- a/tools/gn/docs/reference.md +++ b/tools/gn/docs/reference.md
@@ -5861,8 +5861,9 @@ All generated targets (see "gn help execution") will be added to an implicit build rule called "all" so "ninja all" will always compile everything. The default rule will be used by Ninja if no specific target is specified (just - typing "ninja"). If there is a target named "//:default" it will be the - default build rule, otherwise the implicit "all" rule will be used. + typing "ninja"). If there is a target named "default" in the root build file, + it will be the default build rule, otherwise the implicit "all" rule will be + used. ``` #### **Phony rules**
diff --git a/tools/gn/ninja_build_writer.cc b/tools/gn/ninja_build_writer.cc index 2f2336c..f3e9aaf 100644 --- a/tools/gn/ninja_build_writer.cc +++ b/tools/gn/ninja_build_writer.cc
@@ -349,8 +349,9 @@ All generated targets (see "gn help execution") will be added to an implicit build rule called "all" so "ninja all" will always compile everything. The default rule will be used by Ninja if no specific target is specified (just - typing "ninja"). If there is a target named "//:default" it will be the - default build rule, otherwise the implicit "all" rule will be used. + typing "ninja"). If there is a target named "default" in the root build file, + it will be the default build rule, otherwise the implicit "all" rule will be + used. Phony rules @@ -396,7 +397,7 @@ written_rules.insert("all"); // Set if we encounter a target named "//:default". - bool default_target_exists = false; + const Target* default_target = nullptr; // Targets in the root build file. std::vector<const Target*> toplevel_targets; @@ -418,8 +419,9 @@ const Label& label = target->label(); const std::string& short_name = label.name(); - if (label.dir().value() == "//" && label.name() == "default") - default_target_exists = true; + if (label.dir() == build_settings_->root_target_label().dir() && + short_name == "default") + default_target = target; // Count the number of targets with the given short name. Counts& short_names_counts = short_names[short_name]; @@ -537,10 +539,18 @@ } out_ << std::endl; - if (default_target_exists) - out_ << "\ndefault default" << std::endl; - else if (!default_toolchain_targets_.empty()) + if (default_target) { + // Use the short name when available + if (written_rules.find("default") != written_rules.end()) { + out_ << "\ndefault default" << std::endl; + } else { + out_ << "\ndefault "; + path_output_.WriteFile(out_, default_target->dependency_output_file()); + out_ << std::endl; + } + } else if (!default_toolchain_targets_.empty()) { out_ << "\ndefault all" << std::endl; + } return true; }
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc index 2c2ba38..22f4fcec 100644 --- a/tools/gn/setup.cc +++ b/tools/gn/setup.cc
@@ -698,6 +698,7 @@ bool Setup::FillOtherConfig(const base::CommandLine& cmdline) { Err err; SourceDir current_dir("//"); + Label root_target_label(current_dir, ""); // Secondary source path, read from the config file if present. // Read from the config file if present. @@ -720,8 +721,7 @@ return false; } - Label root_target_label = - Label::Resolve(current_dir, Label(), *root_value, &err); + root_target_label = Label::Resolve(current_dir, Label(), *root_value, &err); if (err.has_error()) { err.PrintToStdout(); return false; @@ -729,6 +729,7 @@ root_build_file_ = Loader::BuildFileForLabel(root_target_label); } + build_settings_.SetRootTargetLabel(root_target_label); // Build config file. const Value* build_config_value =
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 5c644c8..a17bd3d 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -15480,114 +15480,124 @@ <histogram name="Event.ActionAfterDoubleTapNoDelay" enum="ActionAfterDoubleTap"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> On non-mobile sites, gesture taps are delayed to prevent double taps from sending a click event. This stat tracks the user's first action within 5 seconds after a double tap gesture when the gesture tap delay is disabled. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.ActionAfterDoubleTapWithDelay" enum="ActionAfterDoubleTap"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> On non-mobile sites, gesture taps are delayed to prevent double taps from sending a click event. This stat tracks the user's first action within 5 seconds after a double tap gesture when gesture tap events are delayed. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.AggregatedLatency.Renderer2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of any input event and the renderer receiving and starting to process it. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.AndroidActionDown.ToolType" enum="MotionEventToolType"> <owner>mustaq@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Tracks the number of Android MotionEvents with ACTION_DOWN or ACTION_POINTER_DOWN or ACTION_BUTTON_PRESS for each ToolType (unknown, finger, mouse or stylus). + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.CoalescedCount.Mouse"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> + Team: input-dev@chromium.org. <summary>Number of Mouse events coalesced.</summary> </histogram> <histogram name="Event.CoalescedCount.Touch"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> + Team: input-dev@chromium.org. <summary>Number of Touch events coalesced.</summary> </histogram> <histogram name="Event.CoalescedLatency.Mouse" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the first and last events in a coalesced mouse events group. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.CoalescedLatency.Touch" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the first and last events in a coalesced touch events group. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.CompositorThreadEventQueue.CoalescedCount" units="events"> <owner>chongz@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Number of continuous gesture events (GestureScrollUpdate, GesturePinchUpdate) coalesced inside the compositor thread event queue per event. This field is recorded just before the event is processed on the compositor thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.CompositorThreadEventQueue.Continuous.HeadQueueingTime" units="microseconds"> <owner>chongz@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the first event in a coalesced continuous gesture events group (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the compositor thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.CompositorThreadEventQueue.Continuous.TailQueueingTime" units="microseconds"> <owner>chongz@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the last event in a coalesced continuous gesture events group (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the compositor thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.CompositorThreadEventQueue.NonContinuous.QueueingTime" units="microseconds"> <owner>chongz@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a non-continuous gesture event (GestureScrollStart/End, GesturePinchStart/End) was placed into the queue and when it was processed on the compositor thread. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -15669,597 +15679,662 @@ <histogram name="Event.Frequency.Renderer.FlingAnimate" units="hertz"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Emitted after a renderer process main-thread fling curve animation terminates, for any reason, reporting the average animation frequency (animations/second) of the fling instance over its lifetime. This is computed as the number of fling animation ticks divided by the fling animation duration. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Frequency.RendererImpl.FlingAnimate" units="hertz"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Emitted after a renderer process impl-thread fling curve animation terminates, for any reason, reporting the average animation frequency (animations/second) of the fling instance over its lifetime. This is computed as the number of fling animation ticks divided by the fling animation duration. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.GestureCreated" enum="UIEventType"> <owner>kuscher@google.com</owner> - <owner>input-dev@chromium.org</owner> <summary> The gesture-events recognized and dispatched by the browser gesture recognizer. This replaces Ash.GestureCreated, which did not record events on Android and Windows. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.HitTest" enum="EventHitTest"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> For each hit test, records whether it was a hit or miss, and why. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.HitTestValidity" enum="EventHitTestValidity"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> For hit tests that are validated, records whether it was correct or not, and why. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.HitTestValidityScore" enum="EventHitTestValidityScore"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> For hit tests that are invalid, records the score (a series of bits indicating what was matched and what wasn't). + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.BlockingTime.TouchEndDefaultAllowed" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer main thread receiving a touchend event and acking it, for events which were not preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.BlockingTime.TouchEndDefaultPrevented" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer main thread receiving a touchend event and acking it, for events which were preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.BlockingTime.TouchMoveDefaultAllowed" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer main thread receiving a touchmove event and acking it, for events which were not preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.BlockingTime.TouchMoveDefaultPrevented" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer main thread receiving a touchmove event and acking it, for events which were preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.BlockingTime.TouchStartDefaultAllowed" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer main thread receiving a touchstart event and acking it, for events which were not preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.BlockingTime.TouchStartDefaultPrevented" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer main thread receiving a touchstart event and acking it, for events which were preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of all input events and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_DROP_TARGET_EVENT" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_DOUBLE_TAP" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_LONG_PRESS" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_LONG_TAP" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_MULTIFINGER_SWIPE" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_BEGIN" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_END" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_UPDATE" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_BEGIN" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_END" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_UPDATE" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TAP_CANCEL" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TAP_DOWN" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TWO_FINGER_TAP" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_CAPTURE_CHANGED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_SCROLL_FLING_CANCEL" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_SCROLL_FLING_START" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TOUCH_STATIONARY" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_PRESS" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_RELEASE" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of input event and browser processing. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.TouchAcked" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between touch events sent from RWH to renderer and acked by renderer. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.TouchUI" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between touch events received by Chrome and sent from RWH to renderer. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.WheelAcked" units="microseconds"> <owner>ccameron@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between wheel events sent from RWH to renderer and acked by renderer. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Browser.WheelUI" units="microseconds"> <owner>ccameron@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between wheel events received by Chrome and sent from RWH to renderer. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.HitTest" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Duration of a non-resurive hitTest operation. The hit test is non-recursive when the AllowChildFrameContent flag is clear. See also Event.Latency.HitTestRecusrive. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.HitTestRecursive" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Duration of a recursive hitTest operation. The hit test is recursive when the AllowChildFrameContent flag is set. See also Event.Latency.HitTest. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.OS" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> + Team: input-dev@chromium.org. <summary>Time between input event received by OS and sent to Chrome.</summary> </histogram> <histogram name="Event.Latency.QueueingTime.TouchEndDefaultAllowed" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between sending a touchend event to the renderer main thread and when the renderer begins to process that event, for events which were not preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.QueueingTime.TouchEndDefaultPrevented" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between sending a touchend event to the renderer main thread and when the renderer begins to process that event, for events which were preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.QueueingTime.TouchMoveDefaultAllowed" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between sending a touchmove event to the renderer main thread and when the renderer begins to process that event, for events which were not preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.QueueingTime.TouchMoveDefaultPrevented" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between sending a touchmove event to the renderer main thread and when the renderer begins to process that event, for events which were preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.QueueingTime.TouchStartDefaultAllowed" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between sending a touchstart event to the renderer main thread and when the renderer begins to process that event, for events which were not preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.QueueingTime.TouchStartDefaultPrevented" units="ms"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between sending a touchstart event to the renderer main thread and when the renderer begins to process that event, for events which were preventDefaulted. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Renderer" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initiation of all input events and renderer processing. This is soon to be replaced by Event.Latency.Renderer2.* + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.Renderer2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between input event creation and the renderer receiving and starting to process the event. For touch events on Windows, we measure from when the event reaches Chrome, whereas on other platforms we use the timestamp from the kernel. On Windows, this metric is only reported when |IsHighResolution| is true, which will introduce some sampling bias. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.RendererImpl" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between input event creation and the renderer impl thread receiving and starting to process the event. For touch events on Windows, we measure from when the event reaches Chrome, whereas on other platforms we use the timestamp from the kernel. On Windows, this metric is only reported when |IsHighResolution| is true, which will introduce some sampling bias. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16277,7 +16352,6 @@ <histogram name="Event.Latency.RendererImpl.GestureScroll2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between touch event creation and when the resulting GestureScroll reaches the Impl thread. Maximum is 1000ms. On Windows, we measure from when @@ -16285,6 +16359,8 @@ timestamp from the kernel. On Windows, this metric is only reported when |IsHighResolution| is true, which will introduce some sampling bias. This supersedes the Event.Latency.RendererImpl.GestureScroll metric. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16292,32 +16368,35 @@ name="Event.Latency.ScrollBegin.Touch.BrowserNotifiedToBeforeGpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the browser receives the notification of the first ScrollUpdate gesture event in a given scroll gesture event sequence with touch source induced renderer swap and GPU starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Touch.GpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between gpu starts to swap the first ScrollUpdate gesture event in a given scroll gesture event sequence with touch source induced frame and the swap finishes. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the first ScrollUpdate gesture event in a given scroll gesture event sequence with touch source, is handled on main/impl thread (specified by suffix) and before renderer starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16325,35 +16404,38 @@ name="Event.Latency.ScrollBegin.Touch.RendererSwapToBrowserNotified2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer starts to swap a frame induced by the first ScrollUpdate gesture event in a given scroll gesture event sequence with touch source, and browser receives the swap notification. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Touch.TimeToHandled2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and the first generated ScrollUpdate gesture event in a given scroll gesture event sequence is handled on main/impl thread (specified by suffix). If no swap was induced by the ScrollUpdate gesture event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and the start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event if that ScrollUpdate is the first such event in a given scroll gesture event sequence. If no swap was induced by the event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16361,32 +16443,35 @@ name="Event.Latency.ScrollBegin.Wheel.BrowserNotifiedToBeforeGpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the browser receives the notification of the first ScrollUpdate gesture event in a given scroll gesture event sequence with wheel source induced renderer swap and GPU starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Wheel.GpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between gpu starts to swap the first ScrollUpdate gesture event in a given scroll gesture event sequence with wheel source induced frame and the swap finishes. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the first ScrollUpdate gesture event in a given scroll gesture event sequence with wheel source, is handled on main/impl thread (specified by suffix) and before renderer starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16394,35 +16479,38 @@ name="Event.Latency.ScrollBegin.Wheel.RendererSwapToBrowserNotified2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer starts to swap a frame induced by the first ScrollUpdate gesture event in a given scroll gesture event sequence with wheel source, and browser receives the swap notification. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Wheel.TimeToHandled2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a wheel event and the first generated ScrollUpdate gesture event in a given scroll gesture event sequence is handled on main/impl thread (specified by suffix). If no swap was induced by the ScrollBegin gesture event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a wheel event and the start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event if that ScrollUpdate is the first such event in a given scroll gesture event sequence. If no swap was induced by the event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16486,30 +16574,33 @@ name="Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the browser receives the notification of a ScrollUpdate gesture event with touch source induced renderer swap and GPU starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.GpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between gpu starts to swap a ScrollUpdate gesture event with touch source induced frame and the swap finishes. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the ScrollUpdate gesture event with touch source, is handled on main/impl thread (specified by suffix) and before renderer starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16517,10 +16608,11 @@ name="Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer starts to swap a frame induced by ScrollUpdate gesture event with touch source, and browser receives the swap notification. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16528,7 +16620,6 @@ name="Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and the start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event @@ -16538,29 +16629,33 @@ To be replaced by Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2 in M57. https://crbug.com/669618 + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and the generated ScrollUpdate gesture event is handled on main/impl thread (specified by suffix). If no swap was induced by the ScrollUpdate gesture event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event. If no swap was induced by the event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16583,30 +16678,33 @@ name="Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the browser receives the notification of a ScrollUpdate gesture event with wheel source induced renderer swap and GPU starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Wheel.GpuSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between gpu starts to swap a ScrollUpdate gesture event with wheel source induced frame and the swap finishes. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the ScrollUpdate gesture event with wheel source, is handled on main/impl thread (specified by suffix) and before renderer starts to swap. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16614,10 +16712,11 @@ name="Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between the renderer starts to swap a frame induced by ScrollUpdate gesture event with wheel source, and browser receives the swap notification. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16625,7 +16724,6 @@ name="Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a wheel event and the start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event @@ -16635,18 +16733,21 @@ To be replaced by Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2 in M57. https://crbug.com/669618 + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a wheel event and the generated ScrollUpdate gesture event is handled on main/impl thread (specified by suffix). If no swap was induced by the ScrollUpdate gesture event, no recording is made. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16696,7 +16797,6 @@ <histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and the start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event @@ -16706,6 +16806,8 @@ To be replaced by Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2 in M56. https://crbug.com/649754 + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16724,7 +16826,6 @@ <histogram name="Event.Latency.TouchToScrollUpdateSwapBegin" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between initial creation of a touch event and start of the frame swap on the GPU service caused by the generated ScrollUpdate gesture event. If no @@ -16733,6 +16834,8 @@ To be replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2 in M56. https://crbug.com/649754 + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16762,63 +16865,69 @@ <histogram name="Event.MainThreadEventQueue.CoalescedCount" units="events"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Number of continuous events (touchmove, mousemove, mousewheel) coalesced inside the main thread event queue per event. This field is recorded just before the event is processed on the main thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.MainThreadEventQueue.Continuous.FreshnessTime" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a continuous event (touchmove, mousemove, mousewheel) was placed into the queue (or coalesced with another event) and when it was processed on the main thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.MainThreadEventQueue.Continuous.QueueingTime" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a continuous event (touchmove, mousemove, mousewheel) was placed into the queue and when it was processed on the main thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.MainThreadEventQueue.NonContinuous.QueueingTime" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a non-continuous event (not touchmove, mousemove, mousewheel) was placed into the queue and when it was processed on the main thread. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.PassiveForcedEventDispatchCancelled" enum="PassiveForcedListenerResultType"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Counts the number of event listener invocations that were forced to be passive due to interventions and whether the invocation of the listener called prevent default or not. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.PassiveListeners" enum="EventResultType"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> The result of handling of MouseWheel, TouchStart, TouchMove, TouchEnd events in the renderer. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16839,12 +16948,13 @@ <histogram name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a touchstart or first touchmove event per scroll was generated and the event processed, for events which were forced non-blocking since they occurred during fling. This histogram tracks the benefit of forcing events non-blocking during fling. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16852,54 +16962,59 @@ name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToUnresponsiveMainThread" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a touchstart or first touchmove event per scroll was generated and the event processed, for events which were forced non-blocking since they occurred while the main thread was unresponsive. This histogram tracks the benefit of forcing events non-blocking when the main thread is unresponsive. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.PassiveListeners.Latency" units="microseconds"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a cancelable event was generated and the event processed yet no action was executed for the event. This histogram tracks the potential benefit of using passive events listeners. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.RenderView.DiscardInput" enum="BooleanHit"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Whether the input IPC messages were discarded before being fully processed in RenderView's IPC message handler. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.SingleTapType" enum="TapDelayType"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> On non-mobile sites, gesture taps are delayed to prevent double taps from sending a click event. This stat counts the number of taps that are delayed by the double-tap delay versus those that are sent immediately on mobile sites. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.TimestampHasValidTimebase" enum="EventTimestampValidity"> <owner>majidvp@chromium.org</owner> <owner>caseq@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Whether the timestamps on input events produced by the windowing system appear to be sharing the same time base as TimeTicks, modulo possible roll-over. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16920,7 +17035,6 @@ <histogram name="Event.Touch.TargetAndDispatchResult2" enum="TouchTargetAndDispatchResultType2"> <owner>dtapuska@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> An enumeration identifying 4 properties: 1) a classification of the current target whether it is a root scroll listener (window, document, body) or not; @@ -16930,48 +17044,54 @@ events. It will only be reported for main frame events that block scrolling, have only one touch point and current targets that fired an event listener at that phase. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TimedOutOnDesktopSite" enum="BooleanTimedOut"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> On non-mobile-optimized (desktop) sites, whether the ack response from the renderer for any event in a contiguous touch sequence exceeds the desktop-specific timeout threshold. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TimedOutOnMobileSite" enum="BooleanTimedOut"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> On mobile-optimized sites, whether the ack response from the renderer for any event in a contiguous touch sequence exceeds the mobile-specific timeout threshold. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TouchDispositionsAfterPageLoad" enum="TouchEventDispatchResultType"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Records the disposition (handled or not handled) of touchstart events and the first touchmove events per scroll. Only recorded after the page is fully loaded. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TouchDispositionsBeforePageLoad" enum="TouchEventDispatchResultType"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Records the disposition (handled or not handled) of touchstart events and the first touchmove events per scroll. Only recorded before the page is fully loaded. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -16991,11 +17111,12 @@ <histogram name="Event.Touch.TouchDispositionsDuringFling2" enum="TouchEventDispatchResultType"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Records the disposition (handled or not handled) of touchstart and first touchmove events per scroll. Only recorded while there is an active fling animation. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -17015,42 +17136,46 @@ <histogram name="Event.Touch.TouchDispositionsOutsideFling2" enum="TouchEventDispatchResultType"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Records the disposition (handled or not handled) of touchstart and first touchmove events per scroll events. Only recorded while there is no active fling animation. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TouchLatencyAfterPageLoad" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a touch event was generated and the event was processed. Recorded only for touchstart events and the first touchmove events per scroll that occur after the page is fully loaded. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TouchLatencyBeforePageLoad" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a touch event was generated and the event was processed. Recorded only for touchstart events and the first touchmove events per scroll that occur before the page is fully loaded. This histogram tracks the benefit of forcing passive event listeners before the page is fully loaded. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.Touch.TouchLatencyOutsideFling" units="microseconds"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Time between when a touch event was generated and the event was processed. Recorded only for touchstart events and the first touchmove events per scroll when there was no active fling animation. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -17084,23 +17209,25 @@ <histogram name="Event.TouchDuration" units="ms"> <owner>kuscher@google.com</owner> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> The duration of a touch-sequence. Only measured for single finger gestures. This replaces Ash.TouchDuration2, which did not record events on Android and Windows. + + Team: input-dev@chromium.org. </summary> </histogram> <histogram name="Event.TouchMaxDistance" units="pixels"> <owner>kuscher@google.com</owner> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> The maximum euclidean distance in dips (device independent pixel) which a touch point has travelled away from its starting point. Only measured for single finger gestures. This replaces Ash.TouchMaxDistance, which did not record events on Android and Windows. + + Team: input-dev@chromium.org. </summary> </histogram> @@ -31516,6 +31643,9 @@ </histogram> <histogram name="Navigation.SchemePerUniqueOrigin" enum="NavigationScheme"> + <obsolete> + Deprecated 4/2017 in Issue 712843. + </obsolete> <owner>palmer@chromium.org</owner> <owner>felt@chromium.org</owner> <summary> @@ -31525,6 +31655,9 @@ </histogram> <histogram name="Navigation.SchemePerUniqueOriginOTR" enum="NavigationScheme"> + <obsolete> + Deprecated 4/2017 in Issue 712843. + </obsolete> <owner>palmer@chromium.org</owner> <owner>felt@chromium.org</owner> <summary> @@ -74166,10 +74299,11 @@ <histogram name="Touchscreen.TouchEventsEnabled" enum="TouchEventFeatureDetectionState"> <owner>tdresser@chromium.org</owner> - <owner>input-dev@chromium.org</owner> <summary> Tracks whether Touch Event Feature Detection is enabled. This is based on the touch events enabled flag and the presence of a touchscreen. + + Team: input-dev@chromium.org. </summary> <details> NOTE: This metric was incorrectly recorded on ChromeOS for versions 42
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index 4f7672e..b48d440 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -189,8 +189,7 @@ 'os': 'Android', 'android_devices': '1', 'device_ids': [ - #'build245-m4--device1', offline, see http://crbug.com/705135 - 'build245-m4--device2', + 'build245-m4--device1', 'build245-m4--device2', 'build245-m4--device3', 'build245-m4--device4', 'build245-m4--device5', 'build245-m4--device6', 'build245-m4--device7', 'build248-m4--device1', @@ -761,8 +760,6 @@ benchmark_sharding_map['5'] = shard_benchmarks(5, all_benchmarks) benchmark_sharding_map['1'] = shard_benchmarks(1, all_benchmarks) benchmark_sharding_map['21'] = shard_benchmarks(21, all_benchmarks) - # Added because of temporary removal of device in http://crbug.com/705135 - benchmark_sharding_map['20'] = shard_benchmarks(20, all_benchmarks) for name, config in waterfall['testers'].iteritems(): use_whitelist = config['use_whitelist']
diff --git a/tools/perf/measurements/smoothness_unittest.py b/tools/perf/measurements/smoothness_unittest.py index 2d7b39b2..6e0a3d0 100644 --- a/tools/perf/measurements/smoothness_unittest.py +++ b/tools/perf/measurements/smoothness_unittest.py
@@ -110,7 +110,8 @@ repr(actual_synthetic_delay)) self.assertEquals(expected_synthetic_delay, actual_synthetic_delay) - @decorators.Disabled('chromeos') # crbug.com/483212 + # crbug.com/483212 and crbug.com/713260 + @decorators.Disabled('chromeos', 'linux') def testSmoothness(self): ps = self.CreateStorySetFromFileInUnittestDataDir('scrollable_page.html') measurement = smoothness.Smoothness()
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index 1a2754d..3af63ba 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn
@@ -113,6 +113,8 @@ "mus/window_tree_host_mus.cc", "mus/window_tree_host_mus.h", "mus/window_tree_host_mus_delegate.h", + "mus/window_tree_host_mus_init_params.cc", + "mus/window_tree_host_mus_init_params.h", "scoped_window_targeter.cc", "scoped_window_targeter.h", "window.cc",
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc index 76187294..6f5956f 100644 --- a/ui/aura/mus/window_tree_client.cc +++ b/ui/aura/mus/window_tree_client.cc
@@ -44,6 +44,7 @@ #include "ui/aura/mus/window_tree_client_observer.h" #include "ui/aura/mus/window_tree_client_test_observer.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" #include "ui/aura/window_tracker.h" @@ -116,7 +117,7 @@ }; WindowTreeHostMus* GetWindowTreeHostMus(Window* window) { - return static_cast<WindowTreeHostMus*>(window->GetRootWindow()->GetHost()); + return WindowTreeHostMus::ForWindow(window); } WindowTreeHostMus* GetWindowTreeHostMus(WindowMus* window) { @@ -465,9 +466,13 @@ std::unique_ptr<WindowPortMus> window_port = CreateWindowPortMus(window_data, window_mus_type); roots_.insert(window_port.get()); + WindowTreeHostMusInitParams init_params; + init_params.window_port = std::move(window_port); + init_params.window_tree_client = this; + init_params.display_id = display_id; + init_params.frame_sink_id = frame_sink_id; std::unique_ptr<WindowTreeHostMus> window_tree_host = - base::MakeUnique<WindowTreeHostMus>(std::move(window_port), this, - display_id, frame_sink_id); + base::MakeUnique<WindowTreeHostMus>(std::move(init_params)); window_tree_host->InitHost(); SetLocalPropertiesFromServerProperties( WindowMus::Get(window_tree_host->window()), window_data);
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc index c5496f2..e3dd420 100644 --- a/ui/aura/mus/window_tree_client_unittest.cc +++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -32,6 +32,7 @@ #include "ui/aura/mus/window_tree_client_delegate.h" #include "ui/aura/mus/window_tree_client_observer.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/test/aura_mus_test_base.h" #include "ui/aura/test/mus/test_window_tree.h" #include "ui/aura/test/mus/window_tree_client_private.h" @@ -729,8 +730,8 @@ TEST_F(WindowTreeClientClientTest, InputEventBasic) { InputEventBasicTestWindowDelegate window_delegate(window_tree()); - WindowTreeHostMus window_tree_host(window_tree_client_impl(), - cc::FrameSinkId(1, 1)); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); const gfx::Rect bounds(0, 0, 100, 100); window_tree_host.SetBoundsInPixels(bounds); @@ -764,8 +765,8 @@ TEST_F(WindowTreeClientClientTest, InputEventPointerEvent) { InputEventBasicTestWindowDelegate window_delegate(window_tree()); - WindowTreeHostMus window_tree_host(window_tree_client_impl(), - cc::FrameSinkId(1, 1)); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); const gfx::Rect bounds(0, 0, 100, 100); window_tree_host.SetBoundsInPixels(bounds); @@ -797,8 +798,8 @@ } TEST_F(WindowTreeClientClientTest, InputEventFindTargetAndConversion) { - WindowTreeHostMus window_tree_host(window_tree_client_impl(), - cc::FrameSinkId(1, 1)); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); const gfx::Rect bounds(0, 0, 100, 100); window_tree_host.SetBoundsInPixels(bounds); @@ -865,7 +866,8 @@ } TEST_F(WindowTreeClientClientTest, InputEventCustomWindowTargeter) { - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); const gfx::Rect bounds(0, 0, 100, 100); window_tree_host.SetBoundsInPixels(bounds); @@ -930,7 +932,8 @@ TEST_F(WindowTreeClientClientTest, InputEventCaptureWindow) { std::unique_ptr<WindowTreeHostMus> window_tree_host = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl()); + base::MakeUnique<WindowTreeHostMus>( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host->window(); const gfx::Rect bounds(0, 0, 100, 100); window_tree_host->SetBoundsInPixels(bounds); @@ -1005,7 +1008,8 @@ } TEST_F(WindowTreeClientClientTest, InputEventRootWindow) { - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); InputEventBasicTestEventHandler root_handler; top_level->AddPreTargetHandler(&root_handler); @@ -1262,7 +1266,8 @@ const size_t initial_root_count = window_tree_client_impl()->GetRoots().size(); std::unique_ptr<WindowTreeHostMus> window_tree_host = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl()); + base::MakeUnique<WindowTreeHostMus>( + CreateInitParamsForTopLevel(window_tree_client_impl())); window_tree_host->InitHost(); EXPECT_FALSE(window_tree_host->window()->TargetVisibility()); aura::Window* top_level = window_tree_host->window(); @@ -1299,7 +1304,8 @@ TEST_F(WindowTreeClientClientTest, NewTopLevelWindowGetsPropertiesFromData) { const size_t initial_root_count = window_tree_client_impl()->GetRoots().size(); - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); EXPECT_EQ(initial_root_count + 1, window_tree_client_impl()->GetRoots().size()); @@ -1338,7 +1344,8 @@ TEST_F(WindowTreeClientClientTest, NewWindowGetsAllChangesInFlight) { RegisterTestProperties(GetPropertyConverter()); - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); EXPECT_FALSE(top_level->TargetVisibility()); @@ -1578,7 +1585,8 @@ const size_t initial_root_count = window_tree_client_impl()->GetRoots().size(); std::unique_ptr<WindowTreeHostMus> window_tree_host = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl()); + base::MakeUnique<WindowTreeHostMus>( + CreateInitParamsForTopLevel(window_tree_client_impl())); window_tree_host->InitHost(); EXPECT_EQ(initial_root_count + 1, window_tree_client_impl()->GetRoots().size()); @@ -1614,14 +1622,13 @@ const UnknownPropertyType kUnknownPropertyValue = 101; properties[kUnknownPropertyKey] = mojo::ConvertTo<std::vector<uint8_t>>(kUnknownPropertyValue); - std::unique_ptr<WindowTreeHostMus> window_tree_host = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl(), - cc::FrameSinkId(1, 1), &properties); - window_tree_host->InitHost(); - window_tree_host->window()->Show(); + WindowTreeHostMus window_tree_host(CreateInitParamsForTopLevel( + window_tree_client_impl(), std::move(properties))); + window_tree_host.InitHost(); + window_tree_host.window()->Show(); // Verify the property made it to the window. EXPECT_EQ(property_value, - window_tree_host->window()->GetProperty(kTestPropertyKey1)); + window_tree_host.window()->GetProperty(kTestPropertyKey1)); // Get the id of the in flight change for creating the new top level window. uint32_t change_id; @@ -1670,7 +1677,8 @@ } // namespace TEST_F(WindowTreeClientClientTest, CloseWindow) { - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); window_tree_host.InitHost(); CloseWindowWindowTreeHostObserver observer; window_tree_host.AddObserver(&observer); @@ -1883,7 +1891,8 @@ // Creating a WindowTreeHost so we can have two root windows: top_level // and root_window(). std::unique_ptr<WindowTreeHostMus> window_tree_host = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl()); + base::MakeUnique<WindowTreeHostMus>( + CreateInitParamsForTopLevel(window_tree_client_impl())); window_tree_host->InitHost(); Window* top_level = window_tree_host->window(); std::unique_ptr<client::DefaultCaptureClient> capture_client( @@ -2102,7 +2111,8 @@ } TEST_F(WindowTreeClientClientTestHighDPI, NewTopLevelWindowBounds) { - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); Window* top_level = window_tree_host.window(); window_tree_host.InitHost(); @@ -2158,7 +2168,8 @@ } TEST_F(WindowTreeClientClientTestHighDPI, InputEventsInDip) { - WindowTreeHostMus window_tree_host(window_tree_client_impl()); + WindowTreeHostMus window_tree_host( + CreateInitParamsForTopLevel(window_tree_client_impl())); display::Screen* screen = display::Screen::GetScreen(); display::Display display; ASSERT_TRUE(
diff --git a/ui/aura/mus/window_tree_host_mus.cc b/ui/aura/mus/window_tree_host_mus.cc index 880b541..2c6f3b2d 100644 --- a/ui/aura/mus/window_tree_host_mus.cc +++ b/ui/aura/mus/window_tree_host_mus.cc
@@ -10,6 +10,7 @@ #include "ui/aura/mus/window_port_mus.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/mus/window_tree_host_mus_delegate.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/base/class_property.h" @@ -38,29 +39,22 @@ //////////////////////////////////////////////////////////////////////////////// // WindowTreeHostMus, public: -WindowTreeHostMus::WindowTreeHostMus( - std::unique_ptr<WindowPortMus> window_port, - WindowTreeClient* window_tree_client, - int64_t display_id, - const cc::FrameSinkId& frame_sink_id, - const std::map<std::string, std::vector<uint8_t>>* properties) - : WindowTreeHostPlatform(std::move(window_port)), - display_id_(display_id), - delegate_(window_tree_client) { +WindowTreeHostMus::WindowTreeHostMus(WindowTreeHostMusInitParams init_params) + : WindowTreeHostPlatform(std::move(init_params.window_port)), + display_id_(init_params.display_id), + delegate_(init_params.window_tree_client) { window()->SetProperty(kWindowTreeHostMusKey, this); // TODO(sky): find a cleaner way to set this! Better solution is to likely // have constructor take aura::Window. WindowPortMus* window_mus = WindowPortMus::Get(window()); window_mus->window_ = window(); - if (properties) { - // Apply the properties before initializing the window, that way the - // server seems them at the time the window is created. - for (auto& pair : *properties) - window_mus->SetPropertyFromServer(pair.first, &pair.second); - } + // Apply the properties before initializing the window, that way the server + // seems them at the time the window is created. + for (auto& pair : init_params.properties) + window_mus->SetPropertyFromServer(pair.first, &pair.second); // TODO(fsamuel): Once the display compositor is decoupled from the browser // process then ui::Compositor will not a cc::FrameSinkId. - CreateCompositor(frame_sink_id); + CreateCompositor(init_params.frame_sink_id); gfx::AcceleratedWidget accelerated_widget; if (IsUsingTestContext()) { accelerated_widget = gfx::kNullAcceleratedWidget; @@ -81,12 +75,13 @@ delegate_->OnWindowTreeHostCreated(this); - SetPlatformWindow(base::MakeUnique<ui::StubWindow>( - this, - false)); // Do not advertise accelerated widget; already set manually. + // Do not advertise accelerated widget; already set manually. + const bool use_default_accelerated_widget = false; + SetPlatformWindow( + base::MakeUnique<ui::StubWindow>(this, use_default_accelerated_widget)); input_method_ = base::MakeUnique<InputMethodMus>(this, window()); - input_method_->Init(window_tree_client->connector()); + input_method_->Init(init_params.window_tree_client->connector()); SetSharedInputMethod(input_method_.get()); compositor()->SetHostHasTransparentBackground(true); @@ -94,26 +89,10 @@ // Mus windows are assumed hidden. compositor()->SetVisible(false); - if (frame_sink_id.is_valid()) - window_mus->SetFrameSinkIdFromServer(frame_sink_id); + if (init_params.frame_sink_id.is_valid()) + window_mus->SetFrameSinkIdFromServer(init_params.frame_sink_id); } -// Pass |properties| to CreateWindowPortForTopLevel() so that |properties| -// are passed to the server *and* pass |properties| to the WindowTreeHostMus -// constructor (above) which applies the properties to the Window. Some of the -// properties may be server specific and not applied to the Window. -WindowTreeHostMus::WindowTreeHostMus( - WindowTreeClient* window_tree_client, - const cc::FrameSinkId& frame_sink_id, - const std::map<std::string, std::vector<uint8_t>>* properties) - : WindowTreeHostMus( - static_cast<WindowTreeHostMusDelegate*>(window_tree_client) - ->CreateWindowPortForTopLevel(properties), - window_tree_client, - display::Screen::GetScreen()->GetPrimaryDisplay().id(), - frame_sink_id, - properties) {} - WindowTreeHostMus::~WindowTreeHostMus() { DestroyCompositor(); DestroyDispatcher();
diff --git a/ui/aura/mus/window_tree_host_mus.h b/ui/aura/mus/window_tree_host_mus.h index 9cbebf3..b84efb4 100644 --- a/ui/aura/mus/window_tree_host_mus.h +++ b/ui/aura/mus/window_tree_host_mus.h
@@ -7,9 +7,7 @@ #include <stdint.h> -#include <map> #include <memory> -#include <string> #include <vector> #include "base/macros.h" @@ -25,32 +23,14 @@ namespace aura { class InputMethodMus; -class WindowPortMus; class WindowTreeClient; class WindowTreeHostMusDelegate; +struct WindowTreeHostMusInitParams; + class AURA_EXPORT WindowTreeHostMus : public aura::WindowTreeHostPlatform { public: - // |properties| are applied to the window created by this class (using - // PropertyConverter). - // TODO: this should take an unordered_map, see http://crbug.com/670515. - WindowTreeHostMus( - std::unique_ptr<WindowPortMus> window_port, - WindowTreeClient* window_tree_client, - int64_t display_id, - const cc::FrameSinkId& frame_sink_id = cc::FrameSinkId(), - const std::map<std::string, std::vector<uint8_t>>* properties = nullptr); - - // This constructor is intended for creating top level windows in - // non-window-manager code. |properties| are properties passed verbatim to - // the server, that is, no conversion is done before sending |properties| to - // the server. Additionally |properties| are passed to PropertyConverter and - // any known properties are set on the Window created by this class. - // TODO: this should take an unordered_map, see http://crbug.com/670515. - explicit WindowTreeHostMus( - WindowTreeClient* window_tree_client, - const cc::FrameSinkId& frame_sink_id = cc::FrameSinkId(), - const std::map<std::string, std::vector<uint8_t>>* properties = nullptr); + explicit WindowTreeHostMus(WindowTreeHostMusInitParams init_params); ~WindowTreeHostMus() override;
diff --git a/ui/aura/mus/window_tree_host_mus_init_params.cc b/ui/aura/mus/window_tree_host_mus_init_params.cc new file mode 100644 index 0000000..10daf0f1 --- /dev/null +++ b/ui/aura/mus/window_tree_host_mus_init_params.cc
@@ -0,0 +1,38 @@ +// 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 "ui/aura/mus/window_tree_host_mus_init_params.h" + +#include "ui/aura/mus/window_port_mus.h" +#include "ui/aura/mus/window_tree_client.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" + +namespace aura { + +WindowTreeHostMusInitParams::WindowTreeHostMusInitParams() = default; + +WindowTreeHostMusInitParams::WindowTreeHostMusInitParams( + WindowTreeHostMusInitParams&& other) = default; + +WindowTreeHostMusInitParams::~WindowTreeHostMusInitParams() = default; + +WindowTreeHostMusInitParams CreateInitParamsForTopLevel( + WindowTreeClient* window_tree_client, + std::map<std::string, std::vector<uint8_t>> properties) { + WindowTreeHostMusInitParams params; + params.window_tree_client = window_tree_client; + params.display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); + // Pass |properties| to CreateWindowPortForTopLevel() so that |properties| + // are passed to the server *and* pass |properties| to the WindowTreeHostMus + // constructor (above) which applies the properties to the Window. Some of the + // properties may be server specific and not applied to the Window. + params.window_port = + static_cast<WindowTreeHostMusDelegate*>(window_tree_client) + ->CreateWindowPortForTopLevel(&properties); + params.properties = std::move(properties); + return params; +} + +} // namespace aura
diff --git a/ui/aura/mus/window_tree_host_mus_init_params.h b/ui/aura/mus/window_tree_host_mus_init_params.h new file mode 100644 index 0000000..0501d9b9 --- /dev/null +++ b/ui/aura/mus/window_tree_host_mus_init_params.h
@@ -0,0 +1,54 @@ +// 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 UI_AURA_MUS_WINDOW_TREE_HOST_MUS_INIT_PARAMS_H_ +#define UI_AURA_MUS_WINDOW_TREE_HOST_MUS_INIT_PARAMS_H_ + +#include <stdint.h> + +#include <map> +#include <memory> +#include <string> +#include <vector> + +#include "cc/surfaces/frame_sink_id.h" +#include "ui/aura/aura_export.h" + +namespace aura { + +class WindowPortMus; +class WindowTreeClient; + +// Used to create a WindowTreeHostMus. The typical case is to use +// CreateInitParamsForTopLevel(). +struct AURA_EXPORT WindowTreeHostMusInitParams { + WindowTreeHostMusInitParams(); + WindowTreeHostMusInitParams(WindowTreeHostMusInitParams&& other); + ~WindowTreeHostMusInitParams(); + + // The WindowTreeClient; must be specified. + WindowTreeClient* window_tree_client = nullptr; + + // Used to create the Window; must be specified. + std::unique_ptr<WindowPortMus> window_port; + + // Properties to send to the server as well as to set on the Window. + std::map<std::string, std::vector<uint8_t>> properties; + + cc::FrameSinkId frame_sink_id; + + // Id of the display the window should be created on. + int64_t display_id = 0; +}; + +// Creates a WindowTreeHostMusInitParams that is used when creating a top-level +// window. +AURA_EXPORT WindowTreeHostMusInitParams CreateInitParamsForTopLevel( + WindowTreeClient* window_tree_client, + std::map<std::string, std::vector<uint8_t>> properties = + std::map<std::string, std::vector<uint8_t>>()); + +} // namespace aura + +#endif // UI_AURA_MUS_WINDOW_TREE_HOST_MUS_INIT_PARAMS_H_
diff --git a/ui/aura/mus/window_tree_host_mus_unittest.cc b/ui/aura/mus/window_tree_host_mus_unittest.cc index 041b1adc..dadcd9d 100644 --- a/ui/aura/mus/window_tree_host_mus_unittest.cc +++ b/ui/aura/mus/window_tree_host_mus_unittest.cc
@@ -5,6 +5,7 @@ #include "ui/aura/mus/window_tree_host_mus.h" #include "base/memory/ptr_util.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/test/aura_mus_test_base.h" #include "ui/aura/test/mus/test_window_tree.h" @@ -14,8 +15,8 @@ TEST_F(WindowTreeHostMusTest, UpdateClientArea) { std::unique_ptr<WindowTreeHostMus> window_tree_host_mus = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl(), - cc::FrameSinkId()); + base::MakeUnique<WindowTreeHostMus>( + aura::CreateInitParamsForTopLevel(window_tree_client_impl())); gfx::Insets new_insets(10, 11, 12, 13); window_tree_host_mus->SetClientArea(new_insets, std::vector<gfx::Rect>()); @@ -24,8 +25,8 @@ TEST_F(WindowTreeHostMusTest, SetHitTestMask) { std::unique_ptr<WindowTreeHostMus> window_tree_host_mus = - base::MakeUnique<WindowTreeHostMus>(window_tree_client_impl(), - cc::FrameSinkId()); + base::MakeUnique<WindowTreeHostMus>( + CreateInitParamsForTopLevel(window_tree_client_impl())); EXPECT_FALSE(window_tree()->last_hit_test_mask().has_value()); gfx::Rect mask(10, 10, 10, 10);
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc index d517f07..e16ee0b 100644 --- a/ui/keyboard/keyboard_controller.cc +++ b/ui/keyboard/keyboard_controller.cc
@@ -275,6 +275,10 @@ observer_list_.AddObserver(observer); } +bool KeyboardController::HasObserver(KeyboardControllerObserver* observer) { + return observer_list_.HasObserver(observer); +} + void KeyboardController::RemoveObserver(KeyboardControllerObserver* observer) { observer_list_.RemoveObserver(observer); }
diff --git a/ui/keyboard/keyboard_controller.h b/ui/keyboard/keyboard_controller.h index 7c19116..ee36237 100644 --- a/ui/keyboard/keyboard_controller.h +++ b/ui/keyboard/keyboard_controller.h
@@ -88,8 +88,9 @@ void NotifyKeyboardBoundsChanging(const gfx::Rect& new_bounds); // Management of the observer list. - virtual void AddObserver(KeyboardControllerObserver* observer); - virtual void RemoveObserver(KeyboardControllerObserver* observer); + void AddObserver(KeyboardControllerObserver* observer); + bool HasObserver(KeyboardControllerObserver* observer); + void RemoveObserver(KeyboardControllerObserver* observer); KeyboardUI* ui() { return ui_.get(); }
diff --git a/ui/login/display_manager.js b/ui/login/display_manager.js index 590a72d..f90e29f 100644 --- a/ui/login/display_manager.js +++ b/ui/login/display_manager.js
@@ -267,11 +267,6 @@ $('login-header-bar').hidden = hidden; }, - set pinHidden(hidden) { - this.virtualKeyboardShown = hidden; - $('pod-row').setFocusedPodPinVisibility(!hidden); - }, - /** * Sets the current size of the client area (display size). * @param {number} width client area width
diff --git a/ui/views/controls/scroll_view.cc b/ui/views/controls/scroll_view.cc index 74cefcc..c28b513 100644 --- a/ui/views/controls/scroll_view.cc +++ b/ui/views/controls/scroll_view.cc
@@ -61,13 +61,16 @@ } // Make sure the content is not scrolled out of bounds -void ConstrainScrollToBounds(View* viewport, View* view) { +void ConstrainScrollToBounds(View* viewport, + View* view, + bool scroll_with_layers_enabled) { if (!view) return; // Note that even when ScrollView::ScrollsWithLayers() is true, the header row // scrolls by repainting. - const bool scrolls_with_layers = viewport->layer() != nullptr; + const bool scrolls_with_layers = + scroll_with_layers_enabled && viewport->layer() != nullptr; if (scrolls_with_layers) { DCHECK(view->layer()); DCHECK_EQ(0, view->x()); @@ -152,7 +155,9 @@ min_height_(-1), max_height_(-1), background_color_(SK_ColorTRANSPARENT), - hide_horizontal_scrollbar_(false) { + hide_horizontal_scrollbar_(false), + scroll_with_layers_enabled_( + base::FeatureList::IsEnabled(kToolkitViewsScrollWithLayers)) { set_notify_enter_exit_on_child(true); AddChildView(contents_viewport_); @@ -166,8 +171,9 @@ vert_sb_->set_controller(this); corner_view_->SetVisible(false); - if (!base::FeatureList::IsEnabled(kToolkitViewsScrollWithLayers)) + if (!scroll_with_layers_enabled_) return; + EnableViewPortLayer(); } @@ -450,8 +456,10 @@ if (header_) header_->Layout(); - ConstrainScrollToBounds(header_viewport_, header_); - ConstrainScrollToBounds(contents_viewport_, contents_); + ConstrainScrollToBounds(header_viewport_, header_, + scroll_with_layers_enabled_); + ConstrainScrollToBounds(contents_viewport_, contents_, + scroll_with_layers_enabled_); SchedulePaint(); UpdateScrollBarPositions(); } @@ -527,6 +535,16 @@ UpdateBorder(); } +void ScrollView::ViewHierarchyChanged( + const ViewHierarchyChangedDetails& details) { + if (details.is_add && !viewport_layer_enabled_ && Contains(details.parent)) + EnableLayeringRecursivelyForChild(details.child); +} + +void ScrollView::OnChildLayerChanged(View* child) { + EnableViewPortLayer(); +} + void ScrollView::ScrollToPosition(ScrollBar* source, int position) { if (!contents_) return; @@ -717,12 +735,18 @@ } bool ScrollView::ScrollsWithLayers() const { + if (!scroll_with_layers_enabled_) + return false; // Just check for the presence of a layer since it's cheaper than querying the // Feature flag each time. return contents_viewport_->layer() != nullptr; } void ScrollView::EnableViewPortLayer() { + if (viewport_layer_enabled_) + return; + + viewport_layer_enabled_ = true; background_color_ = SK_ColorWHITE; contents_viewport_->set_background( Background::CreateSolidBackground(background_color_)); @@ -763,6 +787,22 @@ : ui::NativeTheme::kColorId_UnfocusedBorderColor))); } +bool ScrollView::EnableLayeringRecursivelyForChild(View* view) { + if (viewport_layer_enabled_ || scroll_with_layers_enabled_) + return true; + + if (view->layer()) { + EnableViewPortLayer(); + return true; + } + + for (int i = 0; i < view->child_count(); ++i) { + if (EnableLayeringRecursivelyForChild(view->child_at(i))) + return true; + } + return false; +} + // VariableRowHeightScrollHelper ---------------------------------------------- VariableRowHeightScrollHelper::VariableRowHeightScrollHelper(
diff --git a/ui/views/controls/scroll_view.h b/ui/views/controls/scroll_view.h index af9111a..b15a338d 100644 --- a/ui/views/controls/scroll_view.h +++ b/ui/views/controls/scroll_view.h
@@ -17,6 +17,8 @@ } namespace views { +class ViewObserverTest; + namespace test { class ScrollViewTestApi; } @@ -105,6 +107,9 @@ void OnGestureEvent(ui::GestureEvent* event) override; const char* GetClassName() const override; void OnNativeThemeChanged(const ui::NativeTheme* theme) override; + void ViewHierarchyChanged( + const ViewHierarchyChangedDetails& details) override; + void OnChildLayerChanged(View* child) override; // ScrollBarController overrides: void ScrollToPosition(ScrollBar* source, int position) override; @@ -118,6 +123,7 @@ private: friend class test::ScrollViewTestApi; + FRIEND_TEST_ALL_PREFIXES(ViewObserverTest, ScrollViewChildAddLayerTest); class Viewport; @@ -162,6 +168,11 @@ void AddBorder(); void UpdateBorder(); + // Enables view port layering if |child| or any of its descendants has a + // layer. Returns true if yes. We short circuit the recursion if we enabled + // layering. + bool EnableLayeringRecursivelyForChild(View* child); + // The current contents and its viewport. |contents_| is contained in // |contents_viewport_|. View* contents_; @@ -204,6 +215,12 @@ // Focus ring, if one is installed. View* focus_ring_ = nullptr; + // Set to true if we enabled layering for the viewport. + bool viewport_layer_enabled_ = false; + + // Set to true if the scroll with layers feature is enabled. + const bool scroll_with_layers_enabled_; + DISALLOW_COPY_AND_ASSIGN(ScrollView); };
diff --git a/ui/views/mus/desktop_window_tree_host_mus.cc b/ui/views/mus/desktop_window_tree_host_mus.cc index 805504b1..8557a33 100644 --- a/ui/views/mus/desktop_window_tree_host_mus.cc +++ b/ui/views/mus/desktop_window_tree_host_mus.cc
@@ -18,6 +18,7 @@ #include "ui/aura/mus/window_port_mus.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/window.h" #include "ui/base/hit_test.h" #include "ui/display/screen.h" @@ -184,13 +185,10 @@ } // namespace DesktopWindowTreeHostMus::DesktopWindowTreeHostMus( + aura::WindowTreeHostMusInitParams init_params, internal::NativeWidgetDelegate* native_widget_delegate, - DesktopNativeWidgetAura* desktop_native_widget_aura, - const cc::FrameSinkId& frame_sink_id, - const std::map<std::string, std::vector<uint8_t>>* mus_properties) - : aura::WindowTreeHostMus(MusClient::Get()->window_tree_client(), - frame_sink_id, - mus_properties), + DesktopNativeWidgetAura* desktop_native_widget_aura) + : aura::WindowTreeHostMus(std::move(init_params)), native_widget_delegate_(native_widget_delegate), desktop_native_widget_aura_(desktop_native_widget_aura), close_widget_factory_(this) {
diff --git a/ui/views/mus/desktop_window_tree_host_mus.h b/ui/views/mus/desktop_window_tree_host_mus.h index 7bf6d39..d9c5620 100644 --- a/ui/views/mus/desktop_window_tree_host_mus.h +++ b/ui/views/mus/desktop_window_tree_host_mus.h
@@ -33,10 +33,9 @@ public aura::WindowTreeHostMus { public: DesktopWindowTreeHostMus( + aura::WindowTreeHostMusInitParams init_params, internal::NativeWidgetDelegate* native_widget_delegate, - DesktopNativeWidgetAura* desktop_native_widget_aura, - const cc::FrameSinkId& frame_sink_id, - const std::map<std::string, std::vector<uint8_t>>* mus_properties); + DesktopNativeWidgetAura* desktop_native_widget_aura); ~DesktopWindowTreeHostMus() override; // Called when the window was deleted on the server.
diff --git a/ui/views/mus/mus_client.cc b/ui/views/mus/mus_client.cc index b3083c34..db9e3944 100644 --- a/ui/views/mus/mus_client.cc +++ b/ui/views/mus/mus_client.cc
@@ -19,6 +19,7 @@ #include "ui/aura/mus/property_converter.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" #include "ui/views/mus/aura_init.h" @@ -273,8 +274,12 @@ DesktopNativeWidgetAura* desktop_native_widget_aura) { std::map<std::string, std::vector<uint8_t>> mus_properties = ConfigurePropertiesFromParams(init_params); + aura::WindowTreeHostMusInitParams window_tree_host_init_params = + aura::CreateInitParamsForTopLevel(MusClient::Get()->window_tree_client(), + std::move(mus_properties)); return base::MakeUnique<DesktopWindowTreeHostMus>( - delegate, desktop_native_widget_aura, cc::FrameSinkId(), &mus_properties); + std::move(window_tree_host_init_params), delegate, + desktop_native_widget_aura); } void MusClient::OnEmbed(
diff --git a/ui/views/test/native_widget_factory_aura_mus.cc b/ui/views/test/native_widget_factory_aura_mus.cc index 292e7a9..8cde112 100644 --- a/ui/views/test/native_widget_factory_aura_mus.cc +++ b/ui/views/test/native_widget_factory_aura_mus.cc
@@ -5,6 +5,7 @@ #include "ui/views/test/native_widget_factory.h" #include "base/memory/ptr_util.h" +#include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/views/mus/desktop_window_tree_host_mus.h" #include "ui/views/mus/mus_client.h" #include "ui/views/test/test_platform_native_widget.h" @@ -30,10 +31,13 @@ widget, type == kStubCapture, destroyed); std::map<std::string, std::vector<uint8_t>> mus_properties = MusClient::Get()->ConfigurePropertiesFromParams(init_params); + aura::WindowTreeHostMusInitParams window_tree_host_init_params = + aura::CreateInitParamsForTopLevel(MusClient::Get()->window_tree_client(), + std::move(mus_properties)); desktop_native_widget_aura->SetDesktopWindowTreeHost( base::MakeUnique<DesktopWindowTreeHostMus>( - widget, desktop_native_widget_aura, cc::FrameSinkId(), - &mus_properties)); + std::move(window_tree_host_init_params), widget, + desktop_native_widget_aura)); return desktop_native_widget_aura; }
diff --git a/ui/views/view.cc b/ui/views/view.cc index 6b231e9b..27eada4 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc
@@ -537,39 +537,16 @@ if (paint_to_layer_ && (layer()->type() == layer_type)) return; - DestroyLayer(); + DestroyLayerImpl(LayerChangeNotifyBehavior::DONT_NOTIFY); CreateLayer(layer_type); paint_to_layer_ = true; + + // Notify the parent chain about the layer change. + NotifyParentsOfLayerChange(); } void View::DestroyLayer() { - if (!paint_to_layer_) - return; - - paint_to_layer_ = false; - if (!layer()) - return; - - ui::Layer* new_parent = layer()->parent(); - std::vector<ui::Layer*> children = layer()->children(); - for (size_t i = 0; i < children.size(); ++i) { - layer()->Remove(children[i]); - if (new_parent) - new_parent->Add(children[i]); - } - - LayerOwner::DestroyLayer(); - - if (new_parent) - ReorderLayers(); - - UpdateChildLayerBounds(CalculateOffsetToAncestorWithLayer(NULL)); - - SchedulePaint(); - - Widget* widget = GetWidget(); - if (widget) - widget->LayerTreeChanged(); + DestroyLayerImpl(LayerChangeNotifyBehavior::NOTIFY); } std::unique_ptr<ui::Layer> View::RecreateLayer() { @@ -1628,6 +1605,49 @@ } } +void View::DestroyLayerImpl(LayerChangeNotifyBehavior notify_parents) { + if (!paint_to_layer_) + return; + + paint_to_layer_ = false; + if (!layer()) + return; + + ui::Layer* new_parent = layer()->parent(); + std::vector<ui::Layer*> children = layer()->children(); + for (size_t i = 0; i < children.size(); ++i) { + layer()->Remove(children[i]); + if (new_parent) + new_parent->Add(children[i]); + } + + LayerOwner::DestroyLayer(); + + if (new_parent) + ReorderLayers(); + + UpdateChildLayerBounds(CalculateOffsetToAncestorWithLayer(NULL)); + + SchedulePaint(); + + // Notify the parent chain about the layer change. + if (notify_parents == LayerChangeNotifyBehavior::NOTIFY) + NotifyParentsOfLayerChange(); + + Widget* widget = GetWidget(); + if (widget) + widget->LayerTreeChanged(); +} + +void View::NotifyParentsOfLayerChange() { + // Notify the parent chain about the layer change. + View* view_parent = parent(); + while (view_parent) { + view_parent->OnChildLayerChanged(this); + view_parent = view_parent->parent(); + } +} + void View::UpdateChildLayerBounds(const gfx::Vector2d& offset) { if (layer()) { SetLayerBounds(GetLocalBounds() + offset); @@ -1696,6 +1716,8 @@ } } +void View::OnChildLayerChanged(View* child) {} + // Input ----------------------------------------------------------------------- View::DragInfo* View::GetDragInfo() {
diff --git a/ui/views/view.h b/ui/views/view.h index bfa107c..d1f6970 100644 --- a/ui/views/view.h +++ b/ui/views/view.h
@@ -340,9 +340,8 @@ // Compositor. void SetPaintToLayer(ui::LayerType layer_type = ui::LAYER_TEXTURED); - // Destroys the layer associated with this view, and reparents any descendants - // to the destroyed layer's parent. If the view does not currently have a - // layer, this has no effect. + // Please refer to the comments above the DestroyLayerImpl() function for + // details. void DestroyLayer(); // Overridden from ui::LayerOwner: @@ -1189,6 +1188,11 @@ // below layers owned by a view. virtual void ReorderChildLayers(ui::Layer* parent_layer); + // Notifies parents about a layer being created or destroyed in a child. An + // example where a subclass may override this method is when it wants to clip + // the child by adding its own layer. + virtual void OnChildLayerChanged(View* child); + // Input --------------------------------------------------------------------- virtual DragInfo* GetDragInfo(); @@ -1448,6 +1452,25 @@ void UpdateLayerVisibility(); void UpdateChildLayerVisibility(bool visible); + enum class LayerChangeNotifyBehavior { + // Notify the parent chain about the layer change. + NOTIFY, + // Don't notify the parent chain about the layer change. + DONT_NOTIFY + }; + + // Destroys the layer associated with this view, and reparents any descendants + // to the destroyed layer's parent. If the view does not currently have a + // layer, this has no effect. + // The |notify_parents| enum controls whether a notification about the layer + // change is sent to the parents. + void DestroyLayerImpl(LayerChangeNotifyBehavior notify_parents); + + // Notifies parents about layering changes in the view. This includes layer + // creation and destruction. + void NotifyParentsOfLayerChange(); + + // Orphans the layers in this subtree that are parented to layers outside of // this subtree. void OrphanLayers();
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc index 42ba4f3..caafd8b 100644 --- a/ui/views/view_unittest.cc +++ b/ui/views/view_unittest.cc
@@ -5023,4 +5023,81 @@ EXPECT_EQ(child_view2.get(), view_reordered()); } +// Validates that if a child of a ScrollView adds a layer, then a layer +// is added to the ScrollView's viewport. +TEST_F(ViewObserverTest, ScrollViewChildAddLayerTest) { + std::unique_ptr<ScrollView> scroll_view(new ScrollView()); + scroll_view->SetContents(new View()); + // Bail if the scroll view already has a layer. + if (scroll_view->contents_viewport_->layer()) + return; + + EXPECT_FALSE(scroll_view->contents_viewport_->layer()); + + std::unique_ptr<View> child_view = NewView(); + scroll_view->AddChildView(child_view.get()); + child_view->SetPaintToLayer(ui::LAYER_TEXTURED); + + EXPECT_TRUE(scroll_view->contents_viewport_->layer()); + scroll_view->RemoveChildView(child_view.get()); +} + +// Provides a simple parent view implementation which tracks layer change +// notifications from child views. +class TestParentView : public View { + public: + TestParentView() + : received_layer_change_notification_(false), layer_change_count_(0) {} + + void Reset() { + received_layer_change_notification_ = false; + layer_change_count_ = 0; + } + + bool received_layer_change_notification() const { + return received_layer_change_notification_; + } + + int layer_change_count() const { return layer_change_count_; } + + // View overrides. + void OnChildLayerChanged(View* child) override { + received_layer_change_notification_ = true; + layer_change_count_++; + } + + private: + // Set to true if we receive the OnChildLayerChanged() notification for a + // child. + bool received_layer_change_notification_; + + // Contains the number of OnChildLayerChanged() notifications for a child. + int layer_change_count_; + + DISALLOW_COPY_AND_ASSIGN(TestParentView); +}; + +// Tests the following cases. +// 1. We receive the OnChildLayerChanged() notification when a layer change +// occurs in a child view. +// 2. We don't receive two layer changes when a child with an existing layer +// creates a new layer. +TEST_F(ViewObserverTest, ChildViewLayerNotificationTest) { + std::unique_ptr<TestParentView> parent_view(new TestParentView); + std::unique_ptr<View> child_view = NewView(); + parent_view->AddChildView(child_view.get()); + + EXPECT_FALSE(parent_view->received_layer_change_notification()); + EXPECT_EQ(0, parent_view->layer_change_count()); + + child_view->SetPaintToLayer(ui::LAYER_TEXTURED); + EXPECT_TRUE(parent_view->received_layer_change_notification()); + EXPECT_EQ(1, parent_view->layer_change_count()); + + parent_view->Reset(); + child_view->SetPaintToLayer(ui::LAYER_SOLID_COLOR); + EXPECT_TRUE(parent_view->received_layer_change_notification()); + EXPECT_EQ(1, parent_view->layer_change_count()); +} + } // namespace views