diff --git a/BUILD.gn b/BUILD.gn index 4a7cd66..a14dc64 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -692,7 +692,7 @@ if (enable_vr) { deps += [ - "//chrome/browser/android/vr_shell:vr_common_unittests", + "//chrome/browser/vr:vr_common_unittests", "//tools/perf/contrib/vr_benchmarks:vr_perf_tests", ] }
diff --git a/DEPS b/DEPS index 81c1b8c..db19d50 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'e401f2c718fc5a0e279084bd51e72992f087fb7a', + 'skia_revision': '012893b4aad813254881fd77f31399cf3d9c965d', # 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': 'e19aed3c064f77ce4a8cbe02eb039160fae86cbd', + 'v8_revision': 'e6e187e6877b33bfe4d413beafaeb2644b2c2c5b', # 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.
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index f853ed85..6f4d341 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -61,8 +61,6 @@ "ash_touch_exploration_manager_chromeos.cc", "ash_touch_exploration_manager_chromeos.h", "ash_view_ids.h", - "aura/key_event_watcher_aura.cc", - "aura/key_event_watcher_aura.h", "aura/pointer_watcher_adapter.cc", "aura/pointer_watcher_adapter.h", "aura/shell_port_classic.cc", @@ -178,8 +176,6 @@ "ime/ime_controller.cc", "ime/ime_controller.h", "ime/ime_switch_type.h", - "key_event_watcher.cc", - "key_event_watcher.h", "keyboard/keyboard_observer_register.cc", "keyboard/keyboard_observer_register.h", "keyboard/keyboard_ui.cc",
diff --git a/ash/aura/key_event_watcher_aura.cc b/ash/aura/key_event_watcher_aura.cc deleted file mode 100644 index 332c3ee..0000000 --- a/ash/aura/key_event_watcher_aura.cc +++ /dev/null
@@ -1,25 +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 "ash/aura/key_event_watcher_aura.h" - -#include "ash/shell.h" -#include "ui/events/event.h" - -namespace ash { - -KeyEventWatcherAura::KeyEventWatcherAura() { - Shell::Get()->AddPreTargetHandler(this); -} - -KeyEventWatcherAura::~KeyEventWatcherAura() { - Shell::Get()->RemovePreTargetHandler(this); -} - -void KeyEventWatcherAura::OnKeyEvent(ui::KeyEvent* event) { - if (HandleKeyEvent(*event)) - event->StopPropagation(); -} - -} // namespace ash
diff --git a/ash/aura/key_event_watcher_aura.h b/ash/aura/key_event_watcher_aura.h deleted file mode 100644 index 73d2248..0000000 --- a/ash/aura/key_event_watcher_aura.h +++ /dev/null
@@ -1,36 +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 ASH_AURA_KEY_EVENT_WATCHER_AURA_H_ -#define ASH_AURA_KEY_EVENT_WATCHER_AURA_H_ - -#include <map> - -#include "ash/ash_export.h" -#include "ash/key_event_watcher.h" -#include "ui/events/event_handler.h" - -namespace ui { -class KeyEvent; -} - -namespace ash { - -// An EventHandler based KeyEventWatcher implementation. -class ASH_EXPORT KeyEventWatcherAura : public KeyEventWatcher, - public ui::EventHandler { - public: - KeyEventWatcherAura(); - ~KeyEventWatcherAura() override; - - // ui::EventHandler: - void OnKeyEvent(ui::KeyEvent* event) override; - - private: - DISALLOW_COPY_AND_ASSIGN(KeyEventWatcherAura); -}; - -} // namespace ash - -#endif // ASH_AURA_KEY_EVENT_WATCHER_AURA_H_
diff --git a/ash/aura/shell_port_classic.cc b/ash/aura/shell_port_classic.cc index 0dd0e98..86953b6b 100644 --- a/ash/aura/shell_port_classic.cc +++ b/ash/aura/shell_port_classic.cc
@@ -8,7 +8,6 @@ #include "ash/accelerators/accelerator_controller.h" #include "ash/accelerators/accelerator_controller_delegate_aura.h" -#include "ash/aura/key_event_watcher_aura.h" #include "ash/aura/pointer_watcher_adapter.h" #include "ash/host/ash_window_tree_host.h" #include "ash/host/ash_window_tree_host_init_params.h" @@ -130,10 +129,6 @@ return KeyboardUI::Create(); } -std::unique_ptr<KeyEventWatcher> ShellPortClassic::CreateKeyEventWatcher() { - return base::MakeUnique<KeyEventWatcherAura>(); -} - void ShellPortClassic::AddPointerWatcher( views::PointerWatcher* watcher, views::PointerWatcherEventTypes events) {
diff --git a/ash/aura/shell_port_classic.h b/ash/aura/shell_port_classic.h index 2299cff1..a4b1566 100644 --- a/ash/aura/shell_port_classic.h +++ b/ash/aura/shell_port_classic.h
@@ -54,7 +54,6 @@ std::unique_ptr<ImmersiveFullscreenController> CreateImmersiveFullscreenController() override; std::unique_ptr<KeyboardUI> CreateKeyboardUI() override; - std::unique_ptr<KeyEventWatcher> CreateKeyEventWatcher() override; void AddPointerWatcher(views::PointerWatcher* watcher, views::PointerWatcherEventTypes events) override; void RemovePointerWatcher(views::PointerWatcher* watcher) override;
diff --git a/ash/key_event_watcher.cc b/ash/key_event_watcher.cc deleted file mode 100644 index 7148f0e..0000000 --- a/ash/key_event_watcher.cc +++ /dev/null
@@ -1,27 +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 "ash/key_event_watcher.h" - -namespace ash { - -KeyEventWatcher::KeyEventWatcher() {} - -KeyEventWatcher::~KeyEventWatcher() {} - -void KeyEventWatcher::AddKeyEventCallback(const ui::Accelerator& key, - const KeyEventCallback& callback) { - callback_map_.insert(std::make_pair(key, callback)); -} - -bool KeyEventWatcher::HandleKeyEvent(const ui::KeyEvent& event) { - auto iter = callback_map_.find(ui::Accelerator(event)); - if (iter != callback_map_.end()) { - iter->second.Run(event); - return true; - } - return false; -} - -} // namespace ash
diff --git a/ash/key_event_watcher.h b/ash/key_event_watcher.h deleted file mode 100644 index 5c23a74..0000000 --- a/ash/key_event_watcher.h +++ /dev/null
@@ -1,49 +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 ASH_KEY_EVENT_WATCHER_H_ -#define ASH_KEY_EVENT_WATCHER_H_ - -#include <map> - -#include "ash/ash_export.h" -#include "base/callback.h" -#include "base/macros.h" -#include "ui/base/accelerators/accelerator.h" - -namespace ui { -class KeyEvent; -} - -namespace ash { - -// This class watches the key event given in the form of accelerator -// and calls the registered callback. -class ASH_EXPORT KeyEventWatcher { - public: - using KeyEventCallback = base::Callback<void(const ui::KeyEvent&)>; - - KeyEventWatcher(); - virtual ~KeyEventWatcher(); - - // Add a callback that is called when the accelerator |accel| is - // matched. The key event will be consumed if a matching accelerator - // is found. - void AddKeyEventCallback(const ui::Accelerator& accel, - const KeyEventCallback& callback); - - protected: - // Finds and calls the registered callback whose accelerator matches - // the |event|. Returns false if no accelerator is matched. - bool HandleKeyEvent(const ui::KeyEvent& event); - - private: - std::map<ui::Accelerator, KeyEventCallback> callback_map_; - - DISALLOW_COPY_AND_ASSIGN(KeyEventWatcher); -}; - -} // namespace ash - -#endif // ASH_KEY_EVENT_WATCHER_H_
diff --git a/ash/mus/bridge/shell_port_mash.cc b/ash/mus/bridge/shell_port_mash.cc index 9e93232..ade0429 100644 --- a/ash/mus/bridge/shell_port_mash.cc +++ b/ash/mus/bridge/shell_port_mash.cc
@@ -8,10 +8,8 @@ #include "ash/accelerators/accelerator_controller.h" #include "ash/accelerators/accelerator_controller_delegate_aura.h" -#include "ash/aura/key_event_watcher_aura.h" #include "ash/aura/pointer_watcher_adapter.h" #include "ash/host/ash_window_tree_host_init_params.h" -#include "ash/key_event_watcher.h" #include "ash/laser/laser_pointer_controller.h" #include "ash/magnifier/partial_magnification_controller.h" #include "ash/mus/accelerators/accelerator_controller_delegate_mus.h" @@ -233,15 +231,6 @@ return KeyboardUIMus::Create(window_manager_->connector()); } -std::unique_ptr<KeyEventWatcher> ShellPortMash::CreateKeyEventWatcher() { - if (GetAshConfig() == Config::MUS) - return base::MakeUnique<KeyEventWatcherAura>(); - - // TODO: needs implementation for mus, http://crbug.com/649600. - NOTIMPLEMENTED(); - return std::unique_ptr<KeyEventWatcher>(); -} - void ShellPortMash::AddPointerWatcher(views::PointerWatcher* watcher, views::PointerWatcherEventTypes events) { if (GetAshConfig() == Config::MUS) {
diff --git a/ash/mus/bridge/shell_port_mash.h b/ash/mus/bridge/shell_port_mash.h index 7f8160a..b53d359 100644 --- a/ash/mus/bridge/shell_port_mash.h +++ b/ash/mus/bridge/shell_port_mash.h
@@ -79,7 +79,6 @@ std::unique_ptr<ImmersiveFullscreenController> CreateImmersiveFullscreenController() override; std::unique_ptr<KeyboardUI> CreateKeyboardUI() override; - std::unique_ptr<KeyEventWatcher> CreateKeyEventWatcher() override; void AddPointerWatcher(views::PointerWatcher* watcher, views::PointerWatcherEventTypes events) override; void RemovePointerWatcher(views::PointerWatcher* watcher) override;
diff --git a/ash/shell_port.h b/ash/shell_port.h index c029491..c173a0f 100644 --- a/ash/shell_port.h +++ b/ash/shell_port.h
@@ -45,7 +45,6 @@ class AshWindowTreeHost; struct AshWindowTreeHostInitParams; class ImmersiveFullscreenController; -class KeyEventWatcher; class KeyboardUI; class RootWindowController; class WindowCycleEventFilter; @@ -135,8 +134,6 @@ // Creates the KeyboardUI. This is called early on. virtual std::unique_ptr<KeyboardUI> CreateKeyboardUI() = 0; - virtual std::unique_ptr<KeyEventWatcher> CreateKeyEventWatcher() = 0; - // If |events| is PointerWatcherEventTypes::MOVES, // PointerWatcher::OnPointerEventObserved() is called for pointer move events. // If |events| is PointerWatcherEventTypes::DRAGS,
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc index 5f4e813..d4ee519 100644 --- a/ash/system/tray/system_tray.cc +++ b/ash/system/tray/system_tray.cc
@@ -9,7 +9,6 @@ #include <vector> #include "ash/accelerators/accelerator_controller.h" -#include "ash/key_event_watcher.h" #include "ash/login_status.h" #include "ash/metrics/user_metrics_recorder.h" #include "ash/public/cpp/config.h" @@ -604,10 +603,6 @@ HideBubbleWithView(bubble_view); } -void SystemTray::CloseBubble(const ui::KeyEvent& key_event) { - CloseSystemBubble(); -} - void SystemTray::ActivateAndStartNavigation(const ui::KeyEvent& key_event) { if (!system_bubble_) return;
diff --git a/ash/system/tray/system_tray.h b/ash/system/tray/system_tray.h index b522e3d..42a24571 100644 --- a/ash/system/tray/system_tray.h +++ b/ash/system/tray/system_tray.h
@@ -159,9 +159,6 @@ friend class SystemTrayTestApi; class ActivationObserver; - // Closes the bubble. Used to bind as a KeyEventWatcher::KeyEventCallback. - void CloseBubble(const ui::KeyEvent& key_event); - // Activates the bubble and starts key navigation with the |key_event|. void ActivateAndStartNavigation(const ui::KeyEvent& key_event);
diff --git a/base/BUILD.gn b/base/BUILD.gn index 50e0565..c81242c 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2731,6 +2731,7 @@ "test/android/javatests/src/org/chromium/base/test/util/TestFileUtil.java", "test/android/javatests/src/org/chromium/base/test/util/TestThread.java", "test/android/javatests/src/org/chromium/base/test/util/TimeoutScale.java", + "test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java", "test/android/javatests/src/org/chromium/base/test/util/UrlUtils.java", "test/android/javatests/src/org/chromium/base/test/util/parameter/BaseParameter.java", "test/android/javatests/src/org/chromium/base/test/util/parameter/Parameter.java",
diff --git a/base/android/java/src/org/chromium/base/metrics/RecordUserAction.java b/base/android/java/src/org/chromium/base/metrics/RecordUserAction.java index 5334746..0d2ba54 100644 --- a/base/android/java/src/org/chromium/base/metrics/RecordUserAction.java +++ b/base/android/java/src/org/chromium/base/metrics/RecordUserAction.java
@@ -6,6 +6,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.VisibleForTesting; +import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; /** @@ -49,5 +50,36 @@ }); } + /** + * Interface to a class that receives a callback for each UserAction that is recorded. + */ + public interface UserActionCallback { + @CalledByNative("UserActionCallback") + void onActionRecorded(String action); + } + + private static long sNativeActionCallback; + + /** + * Register a callback that is executed for each recorded UserAction. + * Only one callback can be registered at a time. + * The callback has to be unregistered using removeActionCallbackForTesting(). + */ + public static void setActionCallbackForTesting(UserActionCallback callback) { + assert sNativeActionCallback == 0; + sNativeActionCallback = nativeAddActionCallbackForTesting(callback); + } + + /** + * Unregister the UserActionCallback. + */ + public static void removeActionCallbackForTesting() { + assert sNativeActionCallback != 0; + nativeRemoveActionCallbackForTesting(sNativeActionCallback); + sNativeActionCallback = 0; + } + private static native void nativeRecordUserAction(String action); + private static native long nativeAddActionCallbackForTesting(UserActionCallback callback); + private static native void nativeRemoveActionCallbackForTesting(long callbackId); }
diff --git a/base/android/record_user_action.cc b/base/android/record_user_action.cc index 1452341..e375f8e 100644 --- a/base/android/record_user_action.cc +++ b/base/android/record_user_action.cc
@@ -5,9 +5,19 @@ #include "base/android/record_user_action.h" #include "base/android/jni_string.h" +#include "base/bind.h" +#include "base/callback.h" #include "base/metrics/user_metrics.h" #include "jni/RecordUserAction_jni.h" +namespace { + +struct ActionCallbackWrapper { + base::ActionCallback action_callback; +}; + +} // namespace + namespace base { namespace android { @@ -17,6 +27,34 @@ RecordComputedAction(ConvertJavaStringToUTF8(env, j_action)); } +static void OnActionRecorded(const JavaRef<jobject>& callback, + const std::string& action) { + JNIEnv* env = AttachCurrentThread(); + Java_UserActionCallback_onActionRecorded( + env, callback, ConvertUTF8ToJavaString(env, action)); +} + +static jlong AddActionCallbackForTesting( + JNIEnv* env, + const JavaParamRef<jclass>& clazz, + const JavaParamRef<jobject>& callback) { + // Create a wrapper for the ActionCallback, so it can life on the heap until + // RemoveActionCallbackForTesting() is called. + auto* wrapper = new ActionCallbackWrapper{base::Bind( + &OnActionRecorded, ScopedJavaGlobalRef<jobject>(env, callback))}; + base::AddActionCallback(wrapper->action_callback); + return reinterpret_cast<intptr_t>(wrapper); +} + +static void RemoveActionCallbackForTesting(JNIEnv* env, + const JavaParamRef<jclass>& clazz, + jlong callback_id) { + DCHECK(callback_id); + auto* wrapper = reinterpret_cast<ActionCallbackWrapper*>(callback_id); + base::RemoveActionCallback(wrapper->action_callback); + delete wrapper; +} + // Register native methods bool RegisterRecordUserAction(JNIEnv* env) { return RegisterNativesImpl(env);
diff --git a/base/files/file_enumerator_posix.cc b/base/files/file_enumerator_posix.cc index ce1fe40a..2ebf5c1 100644 --- a/base/files/file_enumerator_posix.cc +++ b/base/files/file_enumerator_posix.cc
@@ -125,7 +125,9 @@ FileInfo dotdot; dotdot.stat_.st_mode = S_IFDIR; dotdot.filename_ = FilePath(".."); - directory_entries_.push_back(dotdot); + if (!ShouldSkip(dotdot.filename_)) { + directory_entries_.push_back(std::move(dotdot)); + } #endif // OS_FUCHSIA current_directory_entry_ = 0;
diff --git a/base/sys_info_mac.mm b/base/sys_info_mac.mm index 6dc2f22a..f6b70c2d 100644 --- a/base/sys_info_mac.mm +++ b/base/sys_info_mac.mm
@@ -58,8 +58,15 @@ int32_t* minor_version, int32_t* bugfix_version) { NSProcessInfo* processInfo = [NSProcessInfo processInfo]; + // We should try to avoid using Gestalt here because it has been observed to + // spin up threads among other things. Using an availability check here would + // prevent us from using the private API in 10.9.2. So use a + // respondsToSelector check here instead and silence the warning. if ([processInfo respondsToSelector:@selector(operatingSystemVersion)]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" NSOperatingSystemVersion version = [processInfo operatingSystemVersion]; +#pragma clang diagnostic pop *major_version = version.majorVersion; *minor_version = version.minorVersion; *bugfix_version = version.patchVersion;
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java b/base/test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java new file mode 100644 index 0000000..88e3551 --- /dev/null +++ b/base/test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java
@@ -0,0 +1,51 @@ +// 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. + +package org.chromium.base.test.util; + +import org.chromium.base.ThreadUtils; +import org.chromium.base.metrics.RecordUserAction; + +import java.util.ArrayList; +import java.util.List; + +/** + * A util class that records UserActions. + */ +public class UserActionTester implements RecordUserAction.UserActionCallback { + private List<String> mActions; + + public UserActionTester() { + mActions = new ArrayList<>(); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + RecordUserAction.setActionCallbackForTesting(UserActionTester.this); + } + }); + } + + public void tearDown() { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + RecordUserAction.removeActionCallbackForTesting(); + } + }); + } + + @Override + public void onActionRecorded(String action) { + mActions.add(action); + } + + public List<String> getActions() { + return mActions; + } + + @Override + public String toString() { + return "Actions: " + mActions.toString(); + } +}
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc index 8959e1e0..cd64bda 100644 --- a/base/test/launcher/test_launcher.cc +++ b/base/test/launcher/test_launcher.cc
@@ -900,10 +900,6 @@ results_tracker_.AddGlobalTag("OS_FREEBSD"); #endif -#if defined(OS_FUCHSIA) - results_tracker_.AddGlobalTag("OS_FUCHSIA"); -#endif - #if defined(OS_IOS) results_tracker_.AddGlobalTag("OS_IOS"); #endif
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index 20f1af3..e2c832a8 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -101,9 +101,7 @@ def BuildBootfs(output_directory, runtime_deps_path, test_name, gtest_filter, - gtest_repeat, test_launcher_batch_limit, - test_launcher_filter_file, test_launcher_jobs, - single_process_tests, dry_run): + gtest_repeat, test_launcher_filter_file, dry_run): with open(runtime_deps_path) as f: lines = f.readlines() @@ -135,14 +133,11 @@ autorun_file.write('#!/bin/sh\n') autorun_file.write('/system/' + os.path.basename(test_name)) autorun_file.write(' --test-launcher-retry-limit=0') - if int(os.environ.get('CHROME_HEADLESS', 0)) != 0: # When running on bots (without KVM) execution is quite slow. The test # launcher times out a subprocess after 45s which can be too short. Make the # timeout twice as long. autorun_file.write(' --test-launcher-timeout=90000') - if single_process_tests: - autorun_file.write(' --single-process-tests') if test_launcher_filter_file: test_launcher_filter_file = os.path.normpath( os.path.join(output_directory, test_launcher_filter_file)) @@ -152,12 +147,6 @@ filter_file_on_device) target_source_pairs.append( [filter_file_on_device, test_launcher_filter_file]) - if test_launcher_batch_limit: - autorun_file.write(' --test-launcher-batch-limit=%d' % - test_launcher_batch_limit) - if test_launcher_jobs: - autorun_file.write(' --test-launcher-jobs=%d' % - test_launcher_jobs) if gtest_filter: autorun_file.write(' --gtest_filter=' + gtest_filter) if gtest_repeat: @@ -221,32 +210,18 @@ type=os.path.realpath, help='Name of the the test') parser.add_argument('--gtest_filter', - help='GTest filter to use in place of any default.') + help='GTest filter to use in place of any default') parser.add_argument('--gtest_repeat', - help='GTest repeat value to use.') - parser.add_argument('--single-process-tests', action='store_true', - default=False, - help='Runs the tests and the launcher in the same ' - 'process. Useful for debugging.') - parser.add_argument('--test-launcher-batch-limit', - type=int, - help='Sets the limit of test batch to run in a single ' - 'process.') + help='GTest repeat value to use') parser.add_argument('--test-launcher-filter-file', - type=os.path.realpath, - help='Pass filter file through to target process.') - parser.add_argument('--test-launcher-jobs', - type=int, - help='Sets the number of parallel test jobs.') + help='Pass filter file through to target process') parser.add_argument('--test_launcher_summary_output', help='Currently ignored for 2-sided roll.') args = parser.parse_args() bootfs = BuildBootfs(args.output_directory, args.runtime_deps_path, args.test_name, args.gtest_filter, args.gtest_repeat, - args.test_launcher_batch_limit, - args.test_launcher_filter_file, args.test_launcher_jobs, - args.single_process_tests, args.dry_run) + args.test_launcher_filter_file, args.dry_run) qemu_path = os.path.join(SDK_ROOT, 'qemu', 'bin', 'qemu-system-x86_64')
diff --git a/cc/surfaces/surface.h b/cc/surfaces/surface.h index 660a6ecd..d4c8a7d7 100644 --- a/cc/surfaces/surface.h +++ b/cc/surfaces/surface.h
@@ -54,6 +54,8 @@ return previous_frame_surface_id_; } + base::WeakPtr<SurfaceClient> client() { return surface_client_; } + bool has_deadline() const { return deadline_.has_deadline(); } const SurfaceDependencyDeadline& deadline() const { return deadline_; }
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc index ea05182..d044150 100644 --- a/cc/surfaces/surface_aggregator.cc +++ b/cc/surfaces/surface_aggregator.cc
@@ -141,8 +141,7 @@ 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(&SurfaceAggregator::UnrefResources, - weak_factory_.GetWeakPtr(), surface->surface_id())); + base::Bind(&SurfaceAggregator::UnrefResources, surface->client())); provider_->SetChildNeedsSyncTokens(child_id, surface->needs_sync_tokens()); surface_id_to_resource_child_id_[surface->surface_id()] = child_id; return child_id; @@ -175,13 +174,13 @@ return full_rect; } +// static void SurfaceAggregator::UnrefResources( - const SurfaceId& surface_id, + base::WeakPtr<SurfaceClient> surface_client, const std::vector<ReturnedResource>& resources, BlockingTaskRunner* main_thread_task_runner) { - Surface* surface = manager_->GetSurfaceForId(surface_id); - if (surface) - surface->UnrefResources(resources); + if (surface_client) + surface_client->UnrefResources(resources); } void SurfaceAggregator::HandleSurfaceQuad(
diff --git a/cc/surfaces/surface_aggregator.h b/cc/surfaces/surface_aggregator.h index fc71284..364f649 100644 --- a/cc/surfaces/surface_aggregator.h +++ b/cc/surfaces/surface_aggregator.h
@@ -25,6 +25,7 @@ class CompositorFrame; class ResourceProvider; class Surface; +class SurfaceClient; class SurfaceDrawQuad; class SurfaceManager; @@ -139,9 +140,9 @@ const RenderPass& source, const gfx::Rect& full_rect) const; - void UnrefResources(const SurfaceId& surface_id, - const std::vector<ReturnedResource>& resources, - BlockingTaskRunner* main_thread_task_runner); + static void UnrefResources(base::WeakPtr<SurfaceClient> surface_client, + const std::vector<ReturnedResource>& resources, + BlockingTaskRunner* main_thread_task_runner); SurfaceManager* manager_; ResourceProvider* provider_;
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc index a89f1c3c..e236141 100644 --- a/cc/surfaces/surface_aggregator_unittest.cc +++ b/cc/surfaces/surface_aggregator_unittest.cc
@@ -2049,6 +2049,47 @@ support->EvictCurrentSurface(); } +// This test verifies that when a CompositorFrame is submitted to a new surface +// ID, and a new display frame is generated, then the resources of the old +// surface are returned to the appropriate client. +TEST_F(SurfaceAggregatorWithResourcesTest, ReturnResourcesAsSurfacesChange) { + FakeCompositorFrameSinkSupportClient client; + std::unique_ptr<CompositorFrameSinkSupport> support = + CompositorFrameSinkSupport::Create( + &client, &manager_, kArbitraryRootFrameSinkId, kRootIsRoot, + kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); + LocalSurfaceId local_surface_id1(7u, base::UnguessableToken::Create()); + LocalSurfaceId local_surface_id2(8u, base::UnguessableToken::Create()); + SurfaceId surface_id1(support->frame_sink_id(), local_surface_id1); + SurfaceId surface_id2(support->frame_sink_id(), local_surface_id2); + + ResourceId ids[] = {11, 12, 13}; + SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), + support.get(), surface_id1); + + CompositorFrame frame = aggregator_->Aggregate(surface_id1); + + // Nothing should be available to be returned yet. + EXPECT_TRUE(client.returned_resources().empty()); + + // Submitting a CompositorFrame to |surface_id2| should cause the surface + // associated with |surface_id1| to get garbage collected. + SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), support.get(), + surface_id2); + + frame = aggregator_->Aggregate(surface_id2); + + ASSERT_EQ(3u, client.returned_resources().size()); + ResourceId returned_ids[3]; + for (size_t i = 0; i < 3; ++i) { + returned_ids[i] = client.returned_resources()[i].id; + } + EXPECT_THAT(returned_ids, + testing::WhenSorted(testing::ElementsAreArray(ids))); + + support->EvictCurrentSurface(); +} + TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { FakeCompositorFrameSinkSupportClient client; std::unique_ptr<CompositorFrameSinkSupport> support =
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 9bdf03fa..ab211424 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -41,6 +41,8 @@ if (enable_resource_whitelist_generation) { monochrome_resource_whitelist = "$target_gen_dir/monochrome_resource_whitelist.txt" + monochrome_locale_whitelist = + "$target_gen_dir/monochrome_locale_whitelist.txt" } jinja_template("chrome_public_android_manifest") { @@ -730,9 +732,38 @@ "/libmonochrome$shlib_extension.whitelist" output = monochrome_resource_whitelist } + + action("monochrome_locale_whitelist") { + script = "//tools/resources/filter_resource_whitelist.py" + + _system_webview_pak_whitelist = + "$root_gen_dir/android_webview/system_webview_pak_whitelist.txt" + + inputs = [ + monochrome_resource_whitelist, + _system_webview_pak_whitelist, + ] + + outputs = [ + monochrome_locale_whitelist, + ] + + deps = [ + ":monochrome_resource_whitelist", + "//android_webview:system_webview_pak_whitelist", + ] + + args = [ + "--input", + rebase_path(monochrome_resource_whitelist, root_build_dir), + "--filter", + rebase_path(_system_webview_pak_whitelist, root_build_dir), + "--output", + rebase_path(monochrome_locale_whitelist, root_build_dir), + ] + } } - # This target does not output locale paks. chrome_paks("monochrome_paks") { output_dir = "$target_gen_dir/$target_name" @@ -741,13 +772,26 @@ "//android_webview:generate_aw_resources", ] - exclude_locale_paks = true - if (enable_resource_whitelist_generation) { repack_whitelist = monochrome_resource_whitelist deps += [ ":monochrome_resource_whitelist" ] + locale_whitelist = monochrome_locale_whitelist + deps += [ ":monochrome_locale_whitelist" ] } } + + # This target is separate from monochrome_pak_assets because it does not + # disable compression. + android_assets("monochrome_locale_pak_assets") { + sources = [] + foreach(_locale, locales - android_chrome_omitted_locales) { + sources += [ "$target_gen_dir/monochrome_paks/locales/$_locale.pak" ] + } + + deps = [ + ":monochrome_paks", + ] + } # This target explicitly includes locale paks via deps. android_assets("monochrome_pak_assets") { @@ -758,7 +802,7 @@ disable_compression = true deps = [ - ":chrome_public_locale_pak_assets", + ":monochrome_locale_pak_assets", ":monochrome_paks", "//android_webview:locale_pak_assets", ]
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java index 58a607f..d46ed2f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java
@@ -43,9 +43,9 @@ @VisibleForTesting public static final String RELATED_APP_PLATFORM_ANDROID = "play"; @VisibleForTesting - public static final String RELATED_APP_PLATFORM_INSTANT_APP = "instant-app"; + public static final String INSTANT_APP_ID_STRING = "instantapp"; @VisibleForTesting - public static final String HOLDBACK_STRING = "holdback"; + public static final String INSTANT_APP_HOLDBACK_ID_STRING = "instantapp:holdback"; private static final String TAG = "InstalledAppProvider"; @@ -142,15 +142,18 @@ // (otherwise, arbitrary websites would be able to test whether un-associated apps are // installed on the user's device). if (app.platform.equals(RELATED_APP_PLATFORM_ANDROID) && app.id != null) { + if (isInstantAppId(app.id)) { + if (mInstantAppsHandler.isInstantAppAvailable( + frameUrl.toString(), app.id == INSTANT_APP_HOLDBACK_ID_STRING)) { + installedApps.add(app); + } + continue; + } + delayMillis += calculateDelayForPackageMs(app.id); if (isAppInstalledAndAssociatedWithOrigin(app.id, frameUrl, pm)) { installedApps.add(app); } - } else if (app.platform.equals(RELATED_APP_PLATFORM_INSTANT_APP) && app.url != null) { - boolean checkHoldback = HOLDBACK_STRING.equals(app.id); - if (mInstantAppsHandler.isInstantAppAvailable(app.url, checkHoldback)) { - installedApps.add(app); - } } } @@ -160,6 +163,13 @@ } /** + * Returns whether or not the app ID is for an instant app/instant app holdback. + */ + private boolean isInstantAppId(String appId) { + return INSTANT_APP_ID_STRING.equals(appId) || INSTANT_APP_HOLDBACK_ID_STRING.equals(appId); + } + + /** * Determines how long to artifically delay for, for a particular package name. */ private int calculateDelayForPackageMs(String packageName) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaButtonReceiver.java b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaButtonReceiver.java index 0ad016ea..2c1940c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaButtonReceiver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaButtonReceiver.java
@@ -8,6 +8,8 @@ import android.content.Context; import android.content.Intent; +import org.chromium.chrome.browser.AppHooks; + /** * MediaButtonReceiver is a basic BroadcastReceiver class that receives * ACTION_MEDIA_BUTTON from a MediaSessionCompat. It then forward these intents @@ -20,6 +22,6 @@ @Override public void onReceive(Context context, Intent intent) { intent.setClass(context, getServiceClass()); - context.startService(intent); + AppHooks.get().startForegroundService(intent); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java index abcd8fb..d1d5cdd1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
@@ -306,7 +306,7 @@ } /** - * Notify subclasses that browsing data is about to be cleared. + * Notifies subclasses that browsing data is about to be cleared. */ protected void onClearBrowsingData() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java index 3a0ac2c..c8940936 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -23,7 +23,6 @@ import org.chromium.base.Log; import org.chromium.base.ThreadUtils; import org.chromium.base.VisibleForTesting; -import org.chromium.chrome.browser.ApplicationLifetime; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.firstrun.FirstRunGlueImpl; @@ -245,13 +244,7 @@ boolean isChromeHomeEnabled = ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_HOME); ChromePreferenceManager manager = ChromePreferenceManager.getInstance(); - boolean valueChanged = - sChromeHomeEnabled != null && isChromeHomeEnabled != manager.isChromeHomeEnabled(); manager.setChromeHomeEnabled(isChromeHomeEnabled); - sChromeHomeEnabled = isChromeHomeEnabled; - - // If the cached value changed, restart chrome. - if (valueChanged) ApplicationLifetime.terminate(true); } /** @@ -285,6 +278,14 @@ } /** + * Resets whether Chrome Home is enabled for tests. After this is called, the next call to + * #isChromeHomeEnabled() will retrieve the value from shared preferences. + */ + public static void resetChromeHomeEnabledForTests() { + sChromeHomeEnabled = null; + } + + /** * @return Whether or not the expand button for Chrome Home is enabled. */ public static boolean isChromeHomeExpandButtonEnabled() {
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index 690d0d0..0e5344fb 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -1604,6 +1604,7 @@ "javatests/src/org/chromium/chrome/browser/preferences/PreferencesTest.java", "javatests/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPromoUtilsTest.java", "javatests/src/org/chromium/chrome/browser/preferences/password/SavePasswordsPreferencesTest.java", + "javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridgeTest.java", "javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java", "javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesBasicTest.java", "javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerNativeTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java index 4629b92..f6467e54 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java
@@ -17,8 +17,8 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.BaseJUnit4ClassRunner; -import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.test.ChromeBrowserTestRule; @@ -33,6 +33,7 @@ /** * Tests for bookmark bridge */ +@RetryOnFailure(message = "crbug.com/740786") @RunWith(BaseJUnit4ClassRunner.class) public class BookmarkBridgeTest { @Rule @@ -139,7 +140,6 @@ @Test @SmallTest @UiThreadTest - @DisabledTest // Timing out on the try bot. http://crbug.com/740786 @Feature({"Bookmark"}) public void testGetMoveDestinations() throws Throwable { BookmarkId folderA = mBookmarkBridge.addFolder(mMobileNode, 0, "a");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java index 11010dd9..c2129f7 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java
@@ -17,8 +17,8 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.BaseJUnit4ClassRunner; -import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.test.ChromeBrowserTestRule; @@ -36,6 +36,7 @@ /** * Tests for {@link BookmarkModel}, the data layer of bookmarks. */ +@RetryOnFailure(message = "crbug.com/740786") @RunWith(BaseJUnit4ClassRunner.class) public class BookmarkModelTest { @Rule @@ -133,7 +134,6 @@ @SmallTest @UiThreadTest @Feature({"Bookmark"}) - @DisabledTest // Timing out on the try bot. http://crbug.com/740786 public void testGetChildIDs() throws Throwable { BookmarkId folderA = mBookmarkModel.addFolder(mMobileNode, 0, "fa"); HashSet<BookmarkId> expectedChildren = new HashSet<>();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridgeTest.java new file mode 100644 index 0000000..1d5bf34 --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridgeTest.java
@@ -0,0 +1,197 @@ +// 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. + +package org.chromium.chrome.browser.preferences.privacy; + +import static org.junit.Assert.assertThat; + +import android.support.test.filters.SmallTest; + +import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.ThreadUtils; +import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.UserActionTester; +import org.chromium.chrome.browser.ChromeActivity; +import org.chromium.chrome.browser.ChromeSwitches; +import org.chromium.chrome.browser.browsing_data.BrowsingDataType; +import org.chromium.chrome.browser.browsing_data.TimePeriod; +import org.chromium.chrome.test.ChromeActivityTestRule; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; + +/** + * Integration tests for ClearBrowsingDataPreferences. + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, + ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG}) +public class BrowsingDataBridgeTest { + @Rule + public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = + new ChromeActivityTestRule<>(ChromeActivity.class); + + private CallbackHelper mCallbackHelper; + private BrowsingDataBridge.OnClearBrowsingDataListener mListener; + private UserActionTester mActionTester; + + @Before + public void setUp() throws Exception { + mCallbackHelper = new CallbackHelper(); + mListener = new BrowsingDataBridge.OnClearBrowsingDataListener() { + @Override + public void onBrowsingDataCleared() { + mCallbackHelper.notifyCalled(); + } + }; + mActivityTestRule.startMainActivityOnBlankPage(); + mActionTester = new UserActionTester(); + } + + @After + public void tearDown() throws Exception { + mActionTester.tearDown(); + } + + /** + * Test no clear browsing data calls. + */ + @Test + @SmallTest + public void testNoCalls() throws Exception { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + BrowsingDataBridge.getInstance().clearBrowsingData( + mListener, new int[] {}, TimePeriod.ALL_TIME); + } + }); + mCallbackHelper.waitForCallback(0); + assertThat(mActionTester.toString(), mActionTester.getActions(), + Matchers.contains("ClearBrowsingData_Everything")); + } + + /** + * Test cookies deletion. + */ + @Test + @SmallTest + public void testCookiesDeleted() throws Exception { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + BrowsingDataBridge.getInstance().clearBrowsingData( + mListener, new int[] {BrowsingDataType.COOKIES}, TimePeriod.LAST_HOUR); + } + }); + mCallbackHelper.waitForCallback(0); + assertThat(mActionTester.toString(), mActionTester.getActions(), + Matchers.containsInAnyOrder("ClearBrowsingData_LastHour", + "ClearBrowsingData_MaskContainsUnprotectedWeb", + "ClearBrowsingData_ChannelIDs", "ClearBrowsingData_Cookies")); + } + + /** + * Test history deletion. + */ + @Test + @SmallTest + public void testHistoryDeleted() throws Exception { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + BrowsingDataBridge.getInstance().clearBrowsingData( + mListener, new int[] {BrowsingDataType.HISTORY}, TimePeriod.LAST_DAY); + } + }); + mCallbackHelper.waitForCallback(0); + assertThat(mActionTester.toString(), mActionTester.getActions(), + Matchers.containsInAnyOrder("ClearBrowsingData_LastDay", + "ClearBrowsingData_MaskContainsUnprotectedWeb", + "ClearBrowsingData_History")); + } + + /** + * Test deleting cache and content settings. + */ + @Test + @SmallTest + public void testClearingSiteSettingsAndCache() throws Exception { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + BrowsingDataBridge.getInstance().clearBrowsingData(mListener, + new int[] { + BrowsingDataType.CACHE, BrowsingDataType.SITE_SETTINGS, + }, + TimePeriod.FOUR_WEEKS); + } + }); + mCallbackHelper.waitForCallback(0); + assertThat(mActionTester.toString(), mActionTester.getActions(), + Matchers.containsInAnyOrder("ClearBrowsingData_LastMonth", + "ClearBrowsingData_MaskContainsUnprotectedWeb", "ClearBrowsingData_Cache", + "ClearBrowsingData_ShaderCache", "ClearBrowsingData_ContentSettings")); + } + + /** + * Test deleting cache and content settings with important sites. + */ + @Test + @SmallTest + public void testClearingSiteSettingsAndCacheWithImportantSites() throws Exception { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + BrowsingDataBridge.getInstance().clearBrowsingDataExcludingDomains(mListener, + new int[] { + BrowsingDataType.CACHE, BrowsingDataType.SITE_SETTINGS, + }, + TimePeriod.FOUR_WEEKS, new String[] {"google.com"}, new int[] {1}, + new String[0], new int[0]); + } + }); + mCallbackHelper.waitForCallback(0); + assertThat(mActionTester.toString(), mActionTester.getActions(), + Matchers.containsInAnyOrder("ClearBrowsingData_LastMonth", + // ClearBrowsingData_MaskContainsUnprotectedWeb is logged + // twice because important storage is deleted separately. + "ClearBrowsingData_MaskContainsUnprotectedWeb", + "ClearBrowsingData_MaskContainsUnprotectedWeb", "ClearBrowsingData_Cache", + "ClearBrowsingData_ShaderCache", "ClearBrowsingData_ContentSettings")); + } + + /** + * Test deleting all browsing data. (Except bookmarks, they are deleted in Java code) + */ + @Test + @SmallTest + public void testClearingAll() throws Exception { + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + BrowsingDataBridge.getInstance().clearBrowsingData(mListener, + new int[] { + BrowsingDataType.CACHE, BrowsingDataType.COOKIES, + BrowsingDataType.FORM_DATA, BrowsingDataType.HISTORY, + BrowsingDataType.PASSWORDS, BrowsingDataType.SITE_SETTINGS, + }, + TimePeriod.LAST_WEEK); + } + }); + mCallbackHelper.waitForCallback(0); + assertThat(mActionTester.toString(), mActionTester.getActions(), + Matchers.containsInAnyOrder("ClearBrowsingData_LastWeek", + "ClearBrowsingData_MaskContainsUnprotectedWeb", "ClearBrowsingData_Cache", + "ClearBrowsingData_ShaderCache", "ClearBrowsingData_Cookies", + "ClearBrowsingData_ChannelIDs", "ClearBrowsingData_Autofill", + "ClearBrowsingData_History", "ClearBrowsingData_Passwords", + "ClearBrowsingData_ContentSettings")); + } +} \ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java index 20c8380..9a31aa5 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java
@@ -7,6 +7,7 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.content.res.Resources; import android.os.Bundle; @@ -31,9 +32,9 @@ import java.net.URI; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; +import java.util.List; /** Ensure that the InstalledAppProvider returns the correct apps. */ @RunWith(LocalRobolectricTestRunner.class) @@ -47,8 +48,6 @@ InstalledAppProviderImpl.ASSET_STATEMENT_NAMESPACE_WEB; private static final String PLATFORM_ANDROID = InstalledAppProviderImpl.RELATED_APP_PLATFORM_ANDROID; - private static final String PLATFORM_INSTANT_APP = - InstalledAppProviderImpl.RELATED_APP_PLATFORM_INSTANT_APP; private static final String PLATFORM_OTHER = "itunes"; // Note: Android package name and origin deliberately unrelated (there is no requirement that // they be the same). @@ -66,8 +65,6 @@ private static final String ORIGIN_DIFFERENT_SCHEME = "http://example.com:8000"; private static final String ORIGIN_DIFFERENT_HOST = "https://example.org:8000"; private static final String ORIGIN_DIFFERENT_PORT = "https://example.com:8001"; - private static final String INSTANT_APP_URL_1 = "https://example.com/app1"; - private static final String INSTANT_APP_URL_2 = "https://example.com/app2"; private FakePackageManager mPackageManager; private FakeFrameUrlDelegate mFrameUrlDelegate; @@ -98,18 +95,18 @@ * proper GMSCore calls. */ private static class FakeInstantAppsHandler extends InstantAppsHandler { - private final Set<Pair<String, Boolean>> mRelatedApplicationSet; + private final List<Pair<String, Boolean>> mRelatedApplicationList; public FakeInstantAppsHandler() { - mRelatedApplicationSet = new HashSet<Pair<String, Boolean>>(); + mRelatedApplicationList = new ArrayList<Pair<String, Boolean>>(); } public void addInstantApp(String url, boolean holdback) { - mRelatedApplicationSet.add(Pair.create(url, holdback)); + mRelatedApplicationList.add(Pair.create(url, holdback)); } public void resetForTest() { - mRelatedApplicationSet.clear(); + mRelatedApplicationList.clear(); } // TODO(thildebr): When the implementation of isInstantAppAvailable is complete, we need to @@ -117,7 +114,12 @@ // around the GMSCore functionality we need and override that here instead. @Override public boolean isInstantAppAvailable(String url, boolean checkHoldback) { - return mRelatedApplicationSet.contains(Pair.create(url, checkHoldback)); + for (Pair<String, Boolean> pair : mRelatedApplicationList) { + if (url.startsWith(pair.first) && checkHoldback == pair.second) { + return true; + } + } + return false; } } @@ -853,18 +855,18 @@ createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_2, null), createRelatedApplication(PLATFORM_OTHER, PACKAGE_NAME_2, null), createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_3, null), - createRelatedApplication(PLATFORM_INSTANT_APP, null, INSTANT_APP_URL_1), - createRelatedApplication(PLATFORM_INSTANT_APP, - InstalledAppProviderImpl.HOLDBACK_STRING, INSTANT_APP_URL_1), - createRelatedApplication(PLATFORM_INSTANT_APP, null, INSTANT_APP_URL_2)}; + + // Instant Apps: + createRelatedApplication( + PLATFORM_ANDROID, InstalledAppProviderImpl.INSTANT_APP_ID_STRING, ORIGIN), + createRelatedApplication(PLATFORM_ANDROID, + InstalledAppProviderImpl.INSTANT_APP_HOLDBACK_ID_STRING, ORIGIN)}; setAssetStatement(PACKAGE_NAME_1, NAMESPACE_WEB, RELATION_HANDLE_ALL_URLS, ORIGIN); + mFakeInstantAppsHandler.addInstantApp(ORIGIN, true); - mFakeInstantAppsHandler.addInstantApp(INSTANT_APP_URL_1, true); - mFakeInstantAppsHandler.addInstantApp(INSTANT_APP_URL_2, false); - - RelatedApplication[] expectedInstalledRelatedApps = new RelatedApplication[] { - manifestRelatedApps[0], manifestRelatedApps[5], manifestRelatedApps[6]}; + RelatedApplication[] expectedInstalledRelatedApps = + new RelatedApplication[] {manifestRelatedApps[0], manifestRelatedApps[5]}; verifyInstalledApps(manifestRelatedApps, expectedInstalledRelatedApps); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java index 4cb032c..99b03b47 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
@@ -238,7 +238,7 @@ // Make sure that isChromeHome() is current value set by the test, not the value saved in // the shared preference. // TODO(changwan): check if we can clear shared preferences for each test case. - FeatureUtilities.cacheChromeHomeEnabled(); + FeatureUtilities.resetChromeHomeEnabledForTests(); // Set empty variation params for the test. CardsVariationParameters.setTestVariationParams(new HashMap<String, String>());
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc index c382e53..0371d51 100644 --- a/chrome/app/chrome_main_delegate.cc +++ b/chrome/app/chrome_main_delegate.cc
@@ -877,6 +877,16 @@ ResourceBundle::InitSharedInstanceWithPakFileRegion(base::File(pak_fd), pak_region); + // Load secondary locale .pak file if it exists. + pak_fd = global_descriptors->MaybeGet(kAndroidSecondaryLocalePakDescriptor); + if (pak_fd != -1) { + pak_region = global_descriptors->GetRegion( + kAndroidSecondaryLocalePakDescriptor); + ResourceBundle::GetSharedInstance(). + LoadSecondaryLocaleDataWithPakFileRegion( + base::File(pak_fd), pak_region); + } + int extra_pak_keys[] = { kAndroidChrome100PercentPakDescriptor, kAndroidUIResourcesPakDescriptor,
diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc index 93693cf..3fec5c68 100644 --- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc +++ b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
@@ -53,7 +53,8 @@ void QueryHomePageTitle(TitleCallback title_callback) override; private: - void OnTitleEntryFound(bool success, + void OnTitleEntryFound(TitleCallback title_callback, + bool success, const history::URLRow& row, const history::VisitVector& visits); @@ -62,7 +63,6 @@ // Used in loading titles. base::CancelableTaskTracker task_tracker_; - TitleCallback title_callback_; DISALLOW_COPY_AND_ASSIGN(JavaHomePageClient); }; @@ -74,48 +74,39 @@ DCHECK(profile); } -void JavaHomePageClient::QueryHomePageTitle( - base::OnceCallback<void(const base::Optional<base::string16>&)> - title_callback) { - if (!title_callback_.is_null()) { - // A finished task always has to call the callback. - DCHECK(task_tracker_.HasTrackedTasks()); - // If the last callback was not called, drop it as data would be stale. - task_tracker_.TryCancelAll(); - } +void JavaHomePageClient::QueryHomePageTitle(TitleCallback title_callback) { DCHECK(!title_callback.is_null()); - title_callback_ = std::move(title_callback); GURL url = GetHomePageUrl(); if (url.is_empty()) { - std::move(title_callback_).Run(base::nullopt); + std::move(title_callback).Run(base::nullopt); return; } history::HistoryService* const history_service = HistoryServiceFactory::GetForProfileIfExists( profile_, ServiceAccessType::EXPLICIT_ACCESS); if (!history_service) { - std::move(title_callback_).Run(base::nullopt); + std::move(title_callback).Run(base::nullopt); return; } // If the client is destroyed, the tracker will cancel this task automatically // and the callback will not be called. Therefore, base::Unretained works. - // TODO(fhorschig): Bind the title_callback_ to |OnTitleEntryFound| as soon as - // |QueryURL| supports base::OnceCallback. - history_service->QueryURL(url, - /*want_visits=*/false, - base::Bind(&JavaHomePageClient::OnTitleEntryFound, - base::Unretained(this)), - &task_tracker_); + history_service->QueryURL( + url, + /*want_visits=*/false, + base::BindOnce(&JavaHomePageClient::OnTitleEntryFound, + base::Unretained(this), std::move(title_callback)), + &task_tracker_); } -void JavaHomePageClient::OnTitleEntryFound(bool success, +void JavaHomePageClient::OnTitleEntryFound(TitleCallback title_callback, + bool success, const history::URLRow& row, const history::VisitVector& visits) { if (!success) { - std::move(title_callback_).Run(base::nullopt); + std::move(title_callback).Run(base::nullopt); return; } - std::move(title_callback_).Run(row.title()); + std::move(title_callback).Run(row.title()); } bool JavaHomePageClient::IsHomePageEnabled() const {
diff --git a/chrome/browser/android/vr_shell/BUILD.gn b/chrome/browser/android/vr_shell/BUILD.gn index 61848af..eeaa5b2 100644 --- a/chrome/browser/android/vr_shell/BUILD.gn +++ b/chrome/browser/android/vr_shell/BUILD.gn
@@ -2,243 +2,91 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/android/rules.gni") import("//chrome/common/features.gni") import("//device/vr/features/features.gni") import("//testing/test.gni") -if (is_android) { - import("//build/config/android/rules.gni") -} - assert(enable_vr) -# This library is platform-independent UI and related modules, which should -# compile on any platform. -static_library("vr_common") { +static_library("vr_android") { + defines = [] + sources = [ - "animation.cc", - "animation.h", - "color_scheme.cc", - "color_scheme.h", - "easing.cc", - "easing.h", - "font_fallback.cc", - "font_fallback.h", - "fps_meter.cc", - "fps_meter.h", - "gltf_asset.cc", - "gltf_asset.h", - "gltf_parser.cc", - "gltf_parser.h", - "textures/button_texture.cc", - "textures/button_texture.h", - "textures/close_button_texture.cc", - "textures/close_button_texture.h", - "textures/exclusive_screen_toast_texture.cc", - "textures/exclusive_screen_toast_texture.h", - "textures/exit_prompt_texture.cc", - "textures/exit_prompt_texture.h", - "textures/exit_warning_texture.cc", - "textures/exit_warning_texture.h", - "textures/insecure_content_permanent_texture.cc", - "textures/insecure_content_permanent_texture.h", - "textures/insecure_content_transient_texture.cc", - "textures/insecure_content_transient_texture.h", - "textures/loading_indicator_texture.cc", - "textures/loading_indicator_texture.h", - "textures/render_text_wrapper.cc", - "textures/render_text_wrapper.h", - "textures/splash_screen_icon_texture.cc", - "textures/splash_screen_icon_texture.h", - "textures/system_indicator_texture.cc", - "textures/system_indicator_texture.h", - "textures/ui_texture.cc", - "textures/ui_texture.h", - "textures/url_bar_texture.cc", - "textures/url_bar_texture.h", - "toolbar_helper.cc", - "toolbar_helper.h", - "toolbar_state.cc", - "toolbar_state.h", - "ui_browser_interface.h", - "ui_elements/button.cc", - "ui_elements/button.h", - "ui_elements/exclusive_screen_toast.cc", - "ui_elements/exclusive_screen_toast.h", - "ui_elements/exit_prompt.cc", - "ui_elements/exit_prompt.h", - "ui_elements/exit_prompt_backplane.cc", - "ui_elements/exit_prompt_backplane.h", - "ui_elements/loading_indicator.cc", - "ui_elements/loading_indicator.h", - "ui_elements/screen_dimmer.cc", - "ui_elements/screen_dimmer.h", - "ui_elements/simple_textured_element.h", - "ui_elements/splash_screen_icon.cc", - "ui_elements/splash_screen_icon.h", - "ui_elements/system_indicator.cc", - "ui_elements/system_indicator.h", - "ui_elements/textured_element.cc", - "ui_elements/textured_element.h", - "ui_elements/transience_manager.cc", - "ui_elements/transience_manager.h", - "ui_elements/transient_url_bar.cc", - "ui_elements/transient_url_bar.h", - "ui_elements/ui_element.cc", - "ui_elements/ui_element.h", - "ui_elements/ui_element_debug_id.h", - "ui_elements/url_bar.cc", - "ui_elements/url_bar.h", - "ui_input_manager.cc", - "ui_input_manager.h", - "ui_interface.h", - "ui_scene.cc", - "ui_scene.h", - "ui_scene_manager.cc", - "ui_scene_manager.h", - "ui_unsupported_mode.h", + "android_ui_gesture_target.cc", + "android_ui_gesture_target.h", + "elbow_model.cc", + "elbow_model.h", + "gl_browser_interface.h", + "mailbox_to_surface_bridge.cc", + "mailbox_to_surface_bridge.h", + "vr_compositor.cc", + "vr_compositor.h", + "vr_controller.cc", + "vr_controller.h", + "vr_controller_model.cc", + "vr_controller_model.h", + "vr_core_info.cc", + "vr_core_info.h", + "vr_gl_thread.cc", + "vr_gl_thread.h", + "vr_gl_util.cc", + "vr_gl_util.h", + "vr_input_manager.cc", + "vr_input_manager.h", + "vr_metrics_util.cc", + "vr_metrics_util.h", + "vr_shell.cc", + "vr_shell.h", + "vr_shell_delegate.cc", + "vr_shell_delegate.h", + "vr_shell_gl.cc", + "vr_shell_gl.h", + "vr_shell_renderer.cc", + "vr_shell_renderer.h", + "vr_usage_monitor.cc", + "vr_usage_monitor.h", + "vr_web_contents_observer.cc", + "vr_web_contents_observer.h", ] deps = [ + ":vr_shell_jni_headers", "//base", - "//cc/paint", - "//chrome/app:generated_resources", - "//components/security_state/core", - "//components/strings", - "//components/toolbar", - "//components/url_formatter", - "//components/vector_icons", - "//skia", + "//cc", + "//chrome:resources", + "//chrome/browser/vr:vr_common", + "//components/rappor", + "//content/public/android:jni", + "//content/public/browser", + "//content/public/common", + "//device/gamepad", + "//device/vr", + "//services/ui/public/cpp/gpu", + "//ui/android", "//ui/base", "//ui/display", "//ui/gl", "//ui/gl/init", - "//ui/vector_icons", ] + + public_deps = [ + "//device/vr:mojo_bindings", + ] + + libs = [ + "//third_party/gvr-android-sdk/libgvr_shim_static_${current_cpu}.a", + "android", + ] + + configs += [ "//third_party/gvr-android-sdk:libgvr_config" ] } -if (is_android) { - # This library contains the VR code specific to Android. - # TODO(cjgrant): It should be renamed to reflect this. - static_library("vr_android") { - defines = [] - - sources = [ - "android_ui_gesture_target.cc", - "android_ui_gesture_target.h", - "elbow_model.cc", - "elbow_model.h", - "gl_browser_interface.h", - "mailbox_to_surface_bridge.cc", - "mailbox_to_surface_bridge.h", - "vr_compositor.cc", - "vr_compositor.h", - "vr_controller.cc", - "vr_controller.h", - "vr_controller_model.cc", - "vr_controller_model.h", - "vr_core_info.cc", - "vr_core_info.h", - "vr_gl_thread.cc", - "vr_gl_thread.h", - "vr_gl_util.cc", - "vr_gl_util.h", - "vr_input_manager.cc", - "vr_input_manager.h", - "vr_metrics_util.cc", - "vr_metrics_util.h", - "vr_shell.cc", - "vr_shell.h", - "vr_shell_delegate.cc", - "vr_shell_delegate.h", - "vr_shell_gl.cc", - "vr_shell_gl.h", - "vr_shell_renderer.cc", - "vr_shell_renderer.h", - "vr_usage_monitor.cc", - "vr_usage_monitor.h", - "vr_web_contents_observer.cc", - "vr_web_contents_observer.h", - ] - - deps = [ - ":vr_common", - ":vr_shell_jni_headers", - "//base", - "//cc", - "//chrome:resources", - "//components/rappor", - "//content/public/android:jni", - "//content/public/browser", - "//content/public/common", - "//device/gamepad", - "//device/vr", - "//services/ui/public/cpp/gpu", - "//ui/android", - "//ui/base", - "//ui/display", - "//ui/gl", - "//ui/gl/init", - ] - - public_deps = [ - "//device/vr:mojo_bindings", - ] - - libs = [ - "//third_party/gvr-android-sdk/libgvr_shim_static_${current_cpu}.a", - "android", - ] - - configs += [ "//third_party/gvr-android-sdk:libgvr_config" ] - } - - generate_jni("vr_shell_jni_headers") { - sources = [ - "//chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrCoreInfo.java", - "//chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java", - "//chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java", - ] - jni_package = "vr_shell" - } -} - -test("vr_common_unittests") { +generate_jni("vr_shell_jni_headers") { sources = [ - "fps_meter_unittest.cc", - "gltf_parser_unittest.cc", - "run_all_unittests.cc", - "test/paths.cc", - "test/paths.h", - "textures/close_button_texture_unittest.cc", - "textures/url_bar_texture_unittest.cc", - "ui_elements/exit_prompt_unittest.cc", - "ui_elements/transience_manager_unittest.cc", - "ui_elements/ui_element_unittest.cc", - "ui_scene_manager_unittest.cc", - "ui_scene_unittest.cc", + "//chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrCoreInfo.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java", ] - - deps = [ - ":vr_common", - "//base/test:test_support", - "//components:components_tests_pak", - "//components/security_state/core", - "//components/toolbar:vector_icons", - "//skia", - "//testing/gmock", - "//testing/gtest", - "//ui/gfx:test_support", - "//ui/gfx/geometry", - "//ui/gl", - ] - - if (is_android) { - deps += [ "//ui/android:ui_java" ] - } - - data = [ - "test/data/", - "$root_out_dir/components_tests_resources.pak", - ] + jni_package = "vr_shell" }
diff --git a/chrome/browser/android/vr_shell/gl_browser_interface.h b/chrome/browser/android/vr_shell/gl_browser_interface.h index aeec32e4..6bfb21d 100644 --- a/chrome/browser/android/vr_shell/gl_browser_interface.h +++ b/chrome/browser/android/vr_shell/gl_browser_interface.h
@@ -8,7 +8,7 @@ #include <memory> #include "base/android/jni_weak_ref.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" +#include "chrome/browser/vr/ui_interface.h" #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" #include "device/vr/vr_service.mojom.h" #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h" @@ -29,7 +29,8 @@ virtual void ContentSurfaceChanged(jobject surface) = 0; virtual void GvrDelegateReady(gvr::ViewerType viewer_type) = 0; virtual void UpdateGamepadData(device::GvrGamepadData) = 0; - virtual void AppButtonGesturePerformed(UiInterface::Direction direction) = 0; + virtual void AppButtonGesturePerformed( + vr::UiInterface::Direction direction) = 0; virtual void AppButtonClicked() = 0; virtual void ProcessContentGesture( std::unique_ptr<blink::WebInputEvent> event) = 0;
diff --git a/chrome/browser/android/vr_shell/test/paths.h b/chrome/browser/android/vr_shell/test/paths.h deleted file mode 100644 index 6c358c7..0000000 --- a/chrome/browser/android/vr_shell/test/paths.h +++ /dev/null
@@ -1,18 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_TEST_PATHS_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEST_PATHS_H_ - -#include "base/files/file_path.h" - -namespace vr_shell { -namespace test { - -void GetTestDataPath(base::FilePath* result); - -} // namespace test -} // namespace vr_shell - -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEST_PATHS_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.h b/chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.h deleted file mode 100644 index 4c2d5f3..0000000 --- a/chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.h +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_H_ - -#include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.h" -#include "chrome/browser/android/vr_shell/ui_elements/simple_textured_element.h" - -namespace vr_shell { - -class ExclusiveScreenToast - : public TransientSimpleTexturedElement<ExclusiveScreenToastTexture> { - public: - ExclusiveScreenToast(int preferred_width, const base::TimeDelta& timeout); - ~ExclusiveScreenToast() override; - - private: - void UpdateElementSize() override; - - DISALLOW_COPY_AND_ASSIGN(ExclusiveScreenToast); -}; - -} // namespace vr_shell - -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_H_
diff --git a/chrome/browser/android/vr_shell/vr_controller.cc b/chrome/browser/android/vr_shell/vr_controller.cc index 182101b..8a5e07f 100644 --- a/chrome/browser/android/vr_shell/vr_controller.cc +++ b/chrome/browser/android/vr_shell/vr_controller.cc
@@ -248,7 +248,7 @@ extrapolated_touch_ < kMaxNumOfExtrapolations))) { extrapolated_touch_++; touch_position_changed_ = true; - // Fill the touch_info + // vr::Fill the touch_info float duration = DeltaTimeSeconds(last_timestamp_nanos_); touch_info_->touch_point.position.set_x(cur_touch_point_->position.x() + overall_velocity_.x() * duration);
diff --git a/chrome/browser/android/vr_shell/vr_controller_model.cc b/chrome/browser/android/vr_shell/vr_controller_model.cc index d08f2aa..edd30e4 100644 --- a/chrome/browser/android/vr_shell/vr_controller_model.cc +++ b/chrome/browser/android/vr_shell/vr_controller_model.cc
@@ -6,7 +6,7 @@ #include "base/memory/ptr_util.h" #include "base/trace_event/trace_event.h" -#include "chrome/browser/android/vr_shell/gltf_parser.h" +#include "chrome/browser/vr/gltf_parser.h" #include "chrome/grit/browser_resources.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkRect.h" @@ -47,15 +47,14 @@ } // namespace VrControllerModel::VrControllerModel( - std::unique_ptr<gltf::Asset> gltf_asset, - std::vector<std::unique_ptr<gltf::Buffer>> buffers) - : gltf_asset_(std::move(gltf_asset)), - buffers_(std::move(buffers)) {} + std::unique_ptr<vr::gltf::Asset> gltf_asset, + std::vector<std::unique_ptr<vr::gltf::Buffer>> buffers) + : gltf_asset_(std::move(gltf_asset)), buffers_(std::move(buffers)) {} VrControllerModel::~VrControllerModel() = default; const GLvoid* VrControllerModel::ElementsBuffer() const { - const gltf::BufferView* buffer_view = + const vr::gltf::BufferView* buffer_view = gltf_asset_->GetBufferView(ELEMENTS_BUFFER_ID); DCHECK(buffer_view && buffer_view->target == GL_ARRAY_BUFFER); const char* buffer = Buffer(); @@ -63,14 +62,14 @@ } GLsizeiptr VrControllerModel::ElementsBufferSize() const { - const gltf::BufferView* buffer_view = + const vr::gltf::BufferView* buffer_view = gltf_asset_->GetBufferView(ELEMENTS_BUFFER_ID); DCHECK(buffer_view && buffer_view->target == GL_ARRAY_BUFFER); return buffer_view->byte_length; } const GLvoid* VrControllerModel::IndicesBuffer() const { - const gltf::BufferView* buffer_view = + const vr::gltf::BufferView* buffer_view = gltf_asset_->GetBufferView(INDICES_BUFFER_ID); DCHECK(buffer_view && buffer_view->target == GL_ELEMENT_ARRAY_BUFFER); const char* buffer = Buffer(); @@ -78,29 +77,29 @@ } GLsizeiptr VrControllerModel::IndicesBufferSize() const { - const gltf::BufferView* buffer_view = + const vr::gltf::BufferView* buffer_view = gltf_asset_->GetBufferView(INDICES_BUFFER_ID); DCHECK(buffer_view && buffer_view->target == GL_ELEMENT_ARRAY_BUFFER); return buffer_view->byte_length; } GLenum VrControllerModel::DrawMode() const { - const gltf::Mesh* mesh = gltf_asset_->GetMesh(0); + const vr::gltf::Mesh* mesh = gltf_asset_->GetMesh(0); DCHECK(mesh && mesh->primitives.size()); return mesh->primitives[0]->mode; } -const gltf::Accessor* VrControllerModel::IndicesAccessor() const { - const gltf::Mesh* mesh = gltf_asset_->GetMesh(0); +const vr::gltf::Accessor* VrControllerModel::IndicesAccessor() const { + const vr::gltf::Mesh* mesh = gltf_asset_->GetMesh(0); DCHECK(mesh && mesh->primitives.size()); return mesh->primitives[0]->indices; } -const gltf::Accessor* VrControllerModel::PositionAccessor() const { +const vr::gltf::Accessor* VrControllerModel::PositionAccessor() const { return Accessor(kPosition); } -const gltf::Accessor* VrControllerModel::TextureCoordinateAccessor() const { +const vr::gltf::Accessor* VrControllerModel::TextureCoordinateAccessor() const { return Accessor(kTexCoord); } @@ -136,9 +135,9 @@ return buffers_[0]->data(); } -const gltf::Accessor* VrControllerModel::Accessor( +const vr::gltf::Accessor* VrControllerModel::Accessor( const std::string& key) const { - const gltf::Mesh* mesh = gltf_asset_->GetMesh(0); + const vr::gltf::Mesh* mesh = gltf_asset_->GetMesh(0); DCHECK(mesh && mesh->primitives.size()); auto it = mesh->primitives[0]->attributes.find(key); DCHECK(it != mesh->primitives[0]->attributes.begin()); @@ -147,11 +146,11 @@ std::unique_ptr<VrControllerModel> VrControllerModel::LoadFromResources() { TRACE_EVENT0("gpu", "VrControllerModel::LoadFromResources"); - std::vector<std::unique_ptr<gltf::Buffer>> buffers; + std::vector<std::unique_ptr<vr::gltf::Buffer>> buffers; auto model_data = ResourceBundle::GetSharedInstance().GetRawDataResource( IDR_VR_SHELL_DDCONTROLLER_MODEL); - std::unique_ptr<gltf::Asset> asset = - BinaryGltfParser::Parse(model_data, &buffers); + std::unique_ptr<vr::gltf::Asset> asset = + vr::BinaryGltfParser::Parse(model_data, &buffers); DCHECK(asset); auto controller_model =
diff --git a/chrome/browser/android/vr_shell/vr_controller_model.h b/chrome/browser/android/vr_shell/vr_controller_model.h index 6bf81d7..4f010ca 100644 --- a/chrome/browser/android/vr_shell/vr_controller_model.h +++ b/chrome/browser/android/vr_shell/vr_controller_model.h
@@ -7,7 +7,7 @@ #include <memory> -#include "chrome/browser/android/vr_shell/gltf_asset.h" +#include "chrome/browser/vr/gltf_asset.h" #include "third_party/skia/include/core/SkImage.h" #include "ui/gfx/geometry/point.h" #include "ui/gl/gl_bindings.h" @@ -26,8 +26,8 @@ }; explicit VrControllerModel( - std::unique_ptr<gltf::Asset> gltf_asset, - std::vector<std::unique_ptr<gltf::Buffer>> buffers); + std::unique_ptr<vr::gltf::Asset> gltf_asset, + std::vector<std::unique_ptr<vr::gltf::Buffer>> buffers); ~VrControllerModel(); const GLvoid* ElementsBuffer() const; @@ -35,9 +35,9 @@ const GLvoid* IndicesBuffer() const; GLenum DrawMode() const; GLsizeiptr IndicesBufferSize() const; - const gltf::Accessor* IndicesAccessor() const; - const gltf::Accessor* PositionAccessor() const; - const gltf::Accessor* TextureCoordinateAccessor() const; + const vr::gltf::Accessor* IndicesAccessor() const; + const vr::gltf::Accessor* PositionAccessor() const; + const vr::gltf::Accessor* TextureCoordinateAccessor() const; void SetBaseTexture(sk_sp<SkImage> image); void SetTexture(int state, sk_sp<SkImage> patch); sk_sp<SkImage> GetTexture(int state) const; @@ -45,13 +45,13 @@ static std::unique_ptr<VrControllerModel> LoadFromResources(); private: - std::unique_ptr<gltf::Asset> gltf_asset_; + std::unique_ptr<vr::gltf::Asset> gltf_asset_; sk_sp<SkImage> base_texture_; sk_sp<SkImage> textures_[STATE_COUNT]; - std::vector<std::unique_ptr<gltf::Buffer>> buffers_; + std::vector<std::unique_ptr<vr::gltf::Buffer>> buffers_; const char* Buffer() const; - const gltf::Accessor* Accessor(const std::string& key) const; + const vr::gltf::Accessor* Accessor(const std::string& key) const; }; } // namespace vr_shell
diff --git a/chrome/browser/android/vr_shell/vr_gl_thread.cc b/chrome/browser/android/vr_shell/vr_gl_thread.cc index a703d1b3..714d0b3 100644 --- a/chrome/browser/android/vr_shell/vr_gl_thread.cc +++ b/chrome/browser/android/vr_shell/vr_gl_thread.cc
@@ -6,13 +6,13 @@ #include <utility> -#include "chrome/browser/android/vr_shell/toolbar_state.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" -#include "chrome/browser/android/vr_shell/ui_scene.h" -#include "chrome/browser/android/vr_shell/ui_scene_manager.h" #include "chrome/browser/android/vr_shell/vr_input_manager.h" #include "chrome/browser/android/vr_shell/vr_shell.h" #include "chrome/browser/android/vr_shell/vr_shell_gl.h" +#include "chrome/browser/vr/toolbar_state.h" +#include "chrome/browser/vr/ui_interface.h" +#include "chrome/browser/vr/ui_scene.h" +#include "chrome/browser/vr/ui_scene_manager.h" #include "third_party/skia/include/core/SkBitmap.h" namespace vr_shell { @@ -41,11 +41,11 @@ } void VrGLThread::Init() { - scene_ = base::MakeUnique<UiScene>(); + scene_ = base::MakeUnique<vr::UiScene>(); vr_shell_gl_ = base::MakeUnique<VrShellGl>(this, gvr_api_, initially_web_vr_, reprojected_rendering_, daydream_support_, scene_.get()); - scene_manager_ = base::MakeUnique<UiSceneManager>( + scene_manager_ = base::MakeUnique<vr::UiSceneManager>( this, scene_.get(), in_cct_, initially_web_vr_, web_vr_autopresentation_expected_); @@ -74,12 +74,13 @@ void VrGLThread::AppButtonClicked() { task_runner()->PostTask( FROM_HERE, - base::Bind(&UiSceneManager::OnAppButtonClicked, weak_scene_manager_)); + base::Bind(&vr::UiSceneManager::OnAppButtonClicked, weak_scene_manager_)); } -void VrGLThread::AppButtonGesturePerformed(UiInterface::Direction direction) { +void VrGLThread::AppButtonGesturePerformed( + vr::UiInterface::Direction direction) { task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::OnAppButtonGesturePerformed, + FROM_HERE, base::Bind(&vr::UiSceneManager::OnAppButtonGesturePerformed, weak_scene_manager_, direction)); } @@ -137,10 +138,10 @@ void VrGLThread::OnGLInitialized() { task_runner()->PostTask( FROM_HERE, - base::Bind(&UiSceneManager::OnGLInitialized, weak_scene_manager_)); + base::Bind(&vr::UiSceneManager::OnGLInitialized, weak_scene_manager_)); } -void VrGLThread::OnUnsupportedMode(UiUnsupportedMode mode) { +void VrGLThread::OnUnsupportedMode(vr::UiUnsupportedMode mode) { main_thread_task_runner_->PostTask( FROM_HERE, base::Bind(&VrShell::ExitVrDueToUnsupportedMode, weak_vr_shell_, mode)); @@ -148,93 +149,95 @@ void VrGLThread::SetFullscreen(bool enabled) { WaitUntilThreadStarted(); - task_runner()->PostTask(FROM_HERE, base::Bind(&UiSceneManager::SetFullscreen, - weak_scene_manager_, enabled)); + task_runner()->PostTask(FROM_HERE, + base::Bind(&vr::UiSceneManager::SetFullscreen, + weak_scene_manager_, enabled)); } void VrGLThread::SetIncognito(bool incognito) { WaitUntilThreadStarted(); - task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetIncognito, weak_scene_manager_, - incognito)); + task_runner()->PostTask(FROM_HERE, + base::Bind(&vr::UiSceneManager::SetIncognito, + weak_scene_manager_, incognito)); } void VrGLThread::SetHistoryButtonsEnabled(bool can_go_back, bool can_go_forward) { WaitUntilThreadStarted(); task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetHistoryButtonsEnabled, + FROM_HERE, base::Bind(&vr::UiSceneManager::SetHistoryButtonsEnabled, weak_scene_manager_, can_go_back, can_go_forward)); } void VrGLThread::SetLoadProgress(float progress) { WaitUntilThreadStarted(); task_runner()->PostTask(FROM_HERE, - base::Bind(&UiSceneManager::SetLoadProgress, + base::Bind(&vr::UiSceneManager::SetLoadProgress, weak_scene_manager_, progress)); } void VrGLThread::SetLoading(bool loading) { WaitUntilThreadStarted(); - task_runner()->PostTask(FROM_HERE, base::Bind(&UiSceneManager::SetLoading, + task_runner()->PostTask(FROM_HERE, base::Bind(&vr::UiSceneManager::SetLoading, weak_scene_manager_, loading)); } -void VrGLThread::SetToolbarState(const ToolbarState& state) { +void VrGLThread::SetToolbarState(const vr::ToolbarState& state) { WaitUntilThreadStarted(); - task_runner()->PostTask( - FROM_HERE, - base::Bind(&UiSceneManager::SetToolbarState, weak_scene_manager_, state)); + task_runner()->PostTask(FROM_HERE, + base::Bind(&vr::UiSceneManager::SetToolbarState, + weak_scene_manager_, state)); } void VrGLThread::SetWebVrMode(bool enabled, bool show_toast) { WaitUntilThreadStarted(); - task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetWebVrMode, weak_scene_manager_, - enabled, show_toast)); + task_runner()->PostTask(FROM_HERE, + base::Bind(&vr::UiSceneManager::SetWebVrMode, + weak_scene_manager_, enabled, show_toast)); } void VrGLThread::SetWebVrSecureOrigin(bool secure) { WaitUntilThreadStarted(); task_runner()->PostTask(FROM_HERE, - base::Bind(&UiSceneManager::SetWebVrSecureOrigin, + base::Bind(&vr::UiSceneManager::SetWebVrSecureOrigin, weak_scene_manager_, secure)); } void VrGLThread::SetAudioCapturingIndicator(bool enabled) { task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetAudioCapturingIndicator, + FROM_HERE, base::Bind(&vr::UiSceneManager::SetAudioCapturingIndicator, weak_scene_manager_, enabled)); } void VrGLThread::SetVideoCapturingIndicator(bool enabled) { task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetVideoCapturingIndicator, + FROM_HERE, base::Bind(&vr::UiSceneManager::SetVideoCapturingIndicator, weak_scene_manager_, enabled)); } void VrGLThread::SetScreenCapturingIndicator(bool enabled) { task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetScreenCapturingIndicator, + FROM_HERE, base::Bind(&vr::UiSceneManager::SetScreenCapturingIndicator, weak_scene_manager_, enabled)); } void VrGLThread::SetBluetoothConnectedIndicator(bool enabled) { task_runner()->PostTask( - FROM_HERE, base::Bind(&UiSceneManager::SetBluetoothConnectedIndicator, + FROM_HERE, base::Bind(&vr::UiSceneManager::SetBluetoothConnectedIndicator, weak_scene_manager_, enabled)); } void VrGLThread::SetIsExiting() { WaitUntilThreadStarted(); - task_runner()->PostTask(FROM_HERE, base::Bind(&UiSceneManager::SetIsExiting, - weak_scene_manager_)); + task_runner()->PostTask( + FROM_HERE, + base::Bind(&vr::UiSceneManager::SetIsExiting, weak_scene_manager_)); } void VrGLThread::SetSplashScreenIcon(const SkBitmap& bitmap) { WaitUntilThreadStarted(); task_runner()->PostTask(FROM_HERE, - base::Bind(&UiSceneManager::SetSplashScreenIcon, + base::Bind(&vr::UiSceneManager::SetSplashScreenIcon, weak_scene_manager_, bitmap)); }
diff --git a/chrome/browser/android/vr_shell/vr_gl_thread.h b/chrome/browser/android/vr_shell/vr_gl_thread.h index 5bbcde9..6026c13 100644 --- a/chrome/browser/android/vr_shell/vr_gl_thread.h +++ b/chrome/browser/android/vr_shell/vr_gl_thread.h
@@ -12,21 +12,24 @@ #include "base/single_thread_task_runner.h" #include "base/threading/thread.h" #include "chrome/browser/android/vr_shell/gl_browser_interface.h" -#include "chrome/browser/android/vr_shell/ui_browser_interface.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" +#include "chrome/browser/vr/ui_browser_interface.h" +#include "chrome/browser/vr/ui_interface.h" #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h" +namespace vr { +class UiScene; +class UiSceneManager; +} // namespace vr + namespace vr_shell { -class UiScene; -class UiSceneManager; class VrShell; class VrShellGl; class VrGLThread : public base::Thread, public GlBrowserInterface, - public UiBrowserInterface, - public UiInterface { + public vr::UiBrowserInterface, + public vr::UiInterface { public: VrGLThread( const base::WeakPtr<VrShell>& weak_vr_shell, @@ -40,7 +43,7 @@ ~VrGLThread() override; base::WeakPtr<VrShellGl> GetVrShellGl() { return weak_vr_shell_gl_; } - base::WeakPtr<UiSceneManager> GetSceneManager() { + base::WeakPtr<vr::UiSceneManager> GetSceneManager() { return weak_scene_manager_; } @@ -49,7 +52,7 @@ void GvrDelegateReady(gvr::ViewerType viewer_type) override; void UpdateGamepadData(device::GvrGamepadData) override; void AppButtonClicked() override; - void AppButtonGesturePerformed(UiInterface::Direction direction) override; + void AppButtonGesturePerformed(vr::UiInterface::Direction direction) override; void ProcessContentGesture( std::unique_ptr<blink::WebInputEvent> event) override; void ForceExitVr() override; @@ -60,20 +63,20 @@ void ToggleCardboardGamepad(bool enabled) override; void OnGLInitialized() override; - // UiBrowserInterface implementation (UI calling to VrShell). + // vr::UiBrowserInterface implementation (UI calling to VrShell). void ExitPresent() override; void ExitFullscreen() override; void NavigateBack() override; void ExitCct() override; - void OnUnsupportedMode(UiUnsupportedMode mode) override; + void OnUnsupportedMode(vr::UiUnsupportedMode mode) override; - // UiInterface implementation (VrShell and GL calling to the UI). + // vr::UiInterface implementation (VrShell and GL calling to the UI). void SetFullscreen(bool enabled) override; void SetIncognito(bool incognito) override; void SetHistoryButtonsEnabled(bool can_go_back, bool can_go_forward) override; void SetLoadProgress(float progress) override; void SetLoading(bool loading) override; - void SetToolbarState(const ToolbarState& state) override; + void SetToolbarState(const vr::ToolbarState& state) override; void SetWebVrMode(bool enabled, bool show_toast) override; void SetWebVrSecureOrigin(bool secure) override; void SetVideoCapturingIndicator(bool enabled) override; @@ -89,9 +92,9 @@ private: // Created on GL thread. - std::unique_ptr<UiScene> scene_; - std::unique_ptr<UiSceneManager> scene_manager_; - base::WeakPtr<UiSceneManager> weak_scene_manager_; + std::unique_ptr<vr::UiScene> scene_; + std::unique_ptr<vr::UiSceneManager> scene_manager_; + base::WeakPtr<vr::UiSceneManager> weak_scene_manager_; std::unique_ptr<VrShellGl> vr_shell_gl_; base::WeakPtr<VrShellGl> weak_vr_shell_gl_;
diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc index 5da786a..fd602959 100644 --- a/chrome/browser/android/vr_shell/vr_shell.cc +++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -21,9 +21,6 @@ #include "base/values.h" #include "chrome/browser/android/tab_android.h" #include "chrome/browser/android/vr_shell/android_ui_gesture_target.h" -#include "chrome/browser/android/vr_shell/toolbar_helper.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" -#include "chrome/browser/android/vr_shell/ui_scene_manager.h" #include "chrome/browser/android/vr_shell/vr_compositor.h" #include "chrome/browser/android/vr_shell/vr_controller_model.h" #include "chrome/browser/android/vr_shell/vr_gl_thread.h" @@ -35,6 +32,9 @@ #include "chrome/browser/android/vr_shell/vr_web_contents_observer.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" +#include "chrome/browser/vr/toolbar_helper.h" +#include "chrome/browser/vr/ui_interface.h" +#include "chrome/browser/vr/ui_scene_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_controller.h" @@ -118,7 +118,7 @@ for_web_vr, web_vr_autopresentation_expected, in_cct, reprojected_rendering_, HasDaydreamSupport(env)); ui_ = gl_thread_.get(); - toolbar_ = base::MakeUnique<ToolbarHelper>(ui_, this); + toolbar_ = base::MakeUnique<vr::ToolbarHelper>(ui_, this); base::Thread::Options options(base::MessageLoop::TYPE_DEFAULT, 0); options.priority = base::ThreadPriority::DISPLAY; @@ -578,10 +578,10 @@ } } -void VrShell::ExitVrDueToUnsupportedMode(UiUnsupportedMode mode) { - if (mode == UiUnsupportedMode::kUnhandledPageInfo) { +void VrShell::ExitVrDueToUnsupportedMode(vr::UiUnsupportedMode mode) { + if (mode == vr::UiUnsupportedMode::kUnhandledPageInfo) { UMA_HISTOGRAM_ENUMERATION("VR.Shell.EncounteredUnsupportedMode", mode, - UiUnsupportedMode::kCount); + vr::UiUnsupportedMode::kCount); JNIEnv* env = base::android::AttachCurrentThread(); Java_VrShellImpl_onUnhandledPageInfo(env, j_vr_shell_.obj()); return; @@ -592,7 +592,7 @@ base::Bind(&VrShell::ForceExitVr, weak_ptr_factory_.GetWeakPtr()), kExitVrDueToUnsupportedModeDelay); UMA_HISTOGRAM_ENUMERATION("VR.Shell.EncounteredUnsupportedMode", mode, - UiUnsupportedMode::kCount); + vr::UiUnsupportedMode::kCount); } void VrShell::UpdateVSyncInterval(base::TimeTicks vsync_timebase,
diff --git a/chrome/browser/android/vr_shell/vr_shell.h b/chrome/browser/android/vr_shell/vr_shell.h index fc72930..f69f2b7 100644 --- a/chrome/browser/android/vr_shell/vr_shell.h +++ b/chrome/browser/android/vr_shell/vr_shell.h
@@ -14,10 +14,10 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/single_thread_task_runner.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" -#include "chrome/browser/android/vr_shell/ui_unsupported_mode.h" #include "chrome/browser/android/vr_shell/vr_controller_model.h" #include "chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h" +#include "chrome/browser/vr/ui_interface.h" +#include "chrome/browser/vr/ui_unsupported_mode.h" #include "content/public/browser/web_contents_observer.h" #include "device/vr/android/gvr/cardboard_gamepad_data_provider.h" #include "device/vr/android/gvr/gvr_delegate.h" @@ -27,21 +27,24 @@ namespace blink { class WebInputEvent; -} +} // namespace blink namespace content { class WebContents; -} +} // namespace content namespace ui { class WindowAndroid; -} +} // namespace ui + +namespace vr { +class ToolbarHelper; +class UiInterface; +} // namespace vr namespace vr_shell { class AndroidUiGestureTarget; -class ToolbarHelper; -class UiInterface; class VrCompositor; class VrGLThread; class VrInputManager; @@ -165,7 +168,7 @@ void ForceExitVr(); void ExitPresent(); void ExitFullscreen(); - void ExitVrDueToUnsupportedMode(UiUnsupportedMode mode); + void ExitVrDueToUnsupportedMode(vr::UiUnsupportedMode mode); void ProcessContentGesture(std::unique_ptr<blink::WebInputEvent> event); void SubmitControllerModel(std::unique_ptr<VrControllerModel> model); @@ -229,8 +232,8 @@ bool thread_started_ = false; bool reprojected_rendering_; - UiInterface* ui_; - std::unique_ptr<ToolbarHelper> toolbar_; + vr::UiInterface* ui_; + std::unique_ptr<vr::ToolbarHelper> toolbar_; jobject content_surface_ = nullptr; bool taken_surface_ = false;
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.cc b/chrome/browser/android/vr_shell/vr_shell_gl.cc index bc91a39..7cca0b4 100644 --- a/chrome/browser/android/vr_shell/vr_shell_gl.cc +++ b/chrome/browser/android/vr_shell/vr_shell_gl.cc
@@ -14,18 +14,18 @@ #include "base/metrics/histogram_macros.h" #include "base/task_scheduler/post_task.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/android/vr_shell/fps_meter.h" #include "chrome/browser/android/vr_shell/gl_browser_interface.h" #include "chrome/browser/android/vr_shell/mailbox_to_surface_bridge.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" -#include "chrome/browser/android/vr_shell/ui_scene.h" #include "chrome/browser/android/vr_shell/vr_controller.h" #include "chrome/browser/android/vr_shell/vr_gl_util.h" #include "chrome/browser/android/vr_shell/vr_metrics_util.h" #include "chrome/browser/android/vr_shell/vr_shell.h" #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" #include "chrome/browser/android/vr_shell/vr_usage_monitor.h" +#include "chrome/browser/vr/elements/ui_element.h" +#include "chrome/browser/vr/fps_meter.h" +#include "chrome/browser/vr/ui_interface.h" +#include "chrome/browser/vr/ui_scene.h" #include "device/vr/android/gvr/gvr_delegate.h" #include "device/vr/android/gvr/gvr_device.h" #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" @@ -209,7 +209,7 @@ bool initially_web_vr, bool reprojected_rendering, bool daydream_support, - UiScene* scene) + vr::UiScene* scene) : web_vr_mode_(initially_web_vr), surfaceless_rendering_(reprojected_rendering), daydream_support_(daydream_support), @@ -217,9 +217,9 @@ binding_(this), browser_(browser), scene_(scene), - fps_meter_(new FPSMeter()), - webvr_js_time_(new SlidingAverage(kWebVRSlidingAverageSize)), - webvr_render_time_(new SlidingAverage(kWebVRSlidingAverageSize)), + fps_meter_(new vr::FPSMeter()), + webvr_js_time_(new vr::SlidingAverage(kWebVRSlidingAverageSize)), + webvr_render_time_(new vr::SlidingAverage(kWebVRSlidingAverageSize)), weak_ptr_factory_(this) { GvrInit(gvr_api); } @@ -308,7 +308,7 @@ task_runner_)); } - input_manager_ = base::MakeUnique<UiInputManager>(scene_, this); + input_manager_ = base::MakeUnique<vr::UiInputManager>(scene_, this); } void VrShellGl::CreateContentSurface() { @@ -546,16 +546,16 @@ std::unique_ptr<GestureList> gesture_list_ptr = controller_->DetectGestures(); GestureList& gesture_list = *gesture_list_ptr; - UiInputManager::ButtonState controller_button_state = - UiInputManager::ButtonState::UP; + vr::UiInputManager::ButtonState controller_button_state = + vr::UiInputManager::ButtonState::UP; DCHECK(!(controller_->ButtonUpHappened(gvr::kControllerButtonClick) && controller_->ButtonDownHappened(gvr::kControllerButtonClick))) << "Cannot handle a button down and up event within one frame."; if (touch_pending_) { - controller_button_state = UiInputManager::ButtonState::CLICKED; + controller_button_state = vr::UiInputManager::ButtonState::CLICKED; touch_pending_ = false; } else if (controller_->ButtonState(gvr::kControllerButtonClick)) { - controller_button_state = UiInputManager::ButtonState::DOWN; + controller_button_state = vr::UiInputManager::ButtonState::DOWN; } input_manager_->HandleInput(controller_direction, pointer_start_, controller_button_state, gesture_list, @@ -713,7 +713,7 @@ // considered a regular click // TODO(asimjour1): We need to refactor the gesture recognition outside of // VrShellGl. - UiInterface::Direction direction = UiInterface::NONE; + vr::UiInterface::Direction direction = vr::UiInterface::NONE; gfx::Vector3dF a = controller_start_direction_; gfx::Vector3dF b = controller_direction; a.set_y(0); @@ -722,12 +722,12 @@ float gesture_xz_angle = acos(gfx::DotProduct(a, b) / a.Length() / b.Length()); if (fabs(gesture_xz_angle) > kMinAppButtonGestureAngleRad) { - direction = - gesture_xz_angle < 0 ? UiInterface::LEFT : UiInterface::RIGHT; + direction = gesture_xz_angle < 0 ? vr::UiInterface::LEFT + : vr::UiInterface::RIGHT; browser_->AppButtonGesturePerformed(direction); } } - if (direction == UiInterface::NONE) + if (direction == vr::UiInterface::NONE) browser_->AppButtonClicked(); } } @@ -957,7 +957,7 @@ SkColorGetA(backgroundColor) / 255.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } - std::vector<const UiElement*> elements = scene_->GetWorldElements(); + std::vector<const vr::UiElement*> elements = scene_->GetWorldElements(); const bool draw_reticle = !(scene_->is_exiting() || scene_->showing_splash_screen() || ShouldDrawWebVr()); @@ -966,7 +966,7 @@ } void VrShellGl::DrawOverlayElements(const gfx::Transform& head_pose) { - std::vector<const UiElement*> elements = scene_->GetOverlayElements(); + std::vector<const vr::UiElement*> elements = scene_->GetOverlayElements(); if (elements.empty()) return; @@ -981,7 +981,7 @@ void VrShellGl::DrawHeadLockedElements() { TRACE_EVENT0("gpu", "VrShellGl::DrawHeadLockedElements"); - std::vector<const UiElement*> elements = scene_->GetHeadLockedElements(); + std::vector<const vr::UiElement*> elements = scene_->GetHeadLockedElements(); // Add head-locked viewports. The list gets reset to just // the recommended viewports (for the primary buffer) each frame. @@ -1003,7 +1003,7 @@ } void VrShellGl::DrawUiView(const gfx::Transform& head_pose, - const std::vector<const UiElement*>& elements, + const std::vector<const vr::UiElement*>& elements, const gfx::Size& render_size, int viewport_offset, bool draw_reticle) { @@ -1037,7 +1037,7 @@ } void VrShellGl::DrawElements(const gfx::Transform& view_proj_matrix, - const std::vector<const UiElement*>& elements, + const std::vector<const vr::UiElement*>& elements, bool draw_reticle) { if (elements.empty()) return; @@ -1062,31 +1062,31 @@ } void VrShellGl::DrawElement(const gfx::Transform& view_proj_matrix, - const UiElement& element) { + const vr::UiElement& element) { gfx::Transform transform = view_proj_matrix * element.transform(); switch (element.fill()) { - case Fill::OPAQUE_GRADIENT: { + case vr::Fill::OPAQUE_GRADIENT: { vr_shell_renderer_->GetGradientQuadRenderer()->Draw( transform, element.edge_color(), element.center_color(), element.computed_opacity()); break; } - case Fill::GRID_GRADIENT: { + case vr::Fill::GRID_GRADIENT: { vr_shell_renderer_->GetGradientGridRenderer()->Draw( transform, element.edge_color(), element.center_color(), element.grid_color(), element.gridline_count(), element.computed_opacity()); break; } - case Fill::CONTENT: { + case vr::Fill::CONTENT: { vr_shell_renderer_->GetExternalTexturedQuadRenderer()->Draw( content_texture_id_, transform, render_size_vrshell_, gfx::SizeF(element.size().x(), element.size().y()), element.computed_opacity(), element.corner_radius()); break; } - case Fill::SELF: { + case vr::Fill::SELF: { element.Render(vr_shell_renderer_.get(), transform); break; } @@ -1095,10 +1095,10 @@ } } -std::vector<const UiElement*> VrShellGl::GetElementsInDrawOrder( +std::vector<const vr::UiElement*> VrShellGl::GetElementsInDrawOrder( const gfx::Transform& view_matrix, - const std::vector<const UiElement*>& elements) { - std::vector<const UiElement*> sorted_elements = elements; + const std::vector<const vr::UiElement*>& elements) { + std::vector<const vr::UiElement*> sorted_elements = elements; // Sort elements primarily based on their draw phase (lower draw phase first) // and secondarily based on their z-axis distance (more distant first). @@ -1107,7 +1107,7 @@ // release, and provides a consistent ordering that we can easily design // around. std::sort(sorted_elements.begin(), sorted_elements.end(), - [](const UiElement* first, const UiElement* second) { + [](const vr::UiElement* first, const vr::UiElement* second) { if (first->draw_phase() != second->draw_phase()) { return first->draw_phase() < second->draw_phase(); } else {
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.h b/chrome/browser/android/vr_shell/vr_shell_gl.h index 8977e81..8211ae8 100644 --- a/chrome/browser/android/vr_shell/vr_shell_gl.h +++ b/chrome/browser/android/vr_shell/vr_shell_gl.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_GL_H_ #define CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_GL_H_ -#include <chrome/browser/android/vr_shell/ui_input_manager.h> +#include <chrome/browser/vr/ui_input_manager.h> #include <memory> #include <queue> #include <utility> @@ -29,7 +29,7 @@ namespace blink { class WebMouseEvent; -} +} // namespace blink namespace gl { class GLContext; @@ -37,19 +37,22 @@ class GLSurface; class ScopedJavaSurface; class SurfaceTexture; -} +} // namespace gl namespace gpu { struct MailboxHolder; -} +} // namespace gpu -namespace vr_shell { - +namespace vr { class FPSMeter; -class MailboxToSurfaceBridge; class SlidingAverage; class UiElement; class UiScene; +} // namespace vr + +namespace vr_shell { + +class MailboxToSurfaceBridge; class GlBrowserInterface; class VrController; class VrShell; @@ -68,14 +71,14 @@ // This class manages all GLThread owned objects and GL rendering for VrShell. // It is not threadsafe and must only be used on the GL thread. class VrShellGl : public device::mojom::VRPresentationProvider, - public UiInputManagerDelegate { + public vr::UiInputManagerDelegate { public: VrShellGl(GlBrowserInterface* browser, gvr_context* gvr_api, bool initially_web_vr, bool reprojected_rendering, bool daydream_support, - UiScene* scene); + vr::UiScene* scene); ~VrShellGl() override; void Initialize(); @@ -122,18 +125,18 @@ void DrawOverlayElements(const gfx::Transform& head_pose); void DrawHeadLockedElements(); void DrawUiView(const gfx::Transform& head_pose, - const std::vector<const UiElement*>& elements, + const std::vector<const vr::UiElement*>& elements, const gfx::Size& render_size, int viewport_offset, bool draw_cursor); void DrawElements(const gfx::Transform& view_proj_matrix, - const std::vector<const UiElement*>& elements, + const std::vector<const vr::UiElement*>& elements, bool draw_cursor); void DrawElement(const gfx::Transform& view_proj_matrix, - const UiElement& element); - std::vector<const UiElement*> GetElementsInDrawOrder( + const vr::UiElement& element); + std::vector<const vr::UiElement*> GetElementsInDrawOrder( const gfx::Transform& view_matrix, - const std::vector<const UiElement*>& elements); + const std::vector<const vr::UiElement*>& elements); void DrawReticle(const gfx::Transform& view_proj_matrix); void DrawLaser(const gfx::Transform& view_proj_matrix); void DrawController(const gfx::Transform& view_proj_matrix); @@ -149,7 +152,7 @@ void UpdateGesture(const gfx::PointF& normalized_content_hit_point, blink::WebGestureEvent& gesture); - // UiInputManagerDelegate. + // vr::UiInputManagerDelegate. void OnContentEnter(const gfx::PointF& normalized_hit_point) override; void OnContentLeave() override; void OnContentMove(const gfx::PointF& normalized_hit_point) override; @@ -233,7 +236,7 @@ gfx::Quaternion controller_quat_; gfx::Point3F target_point_; - UiElement* reticle_render_target_ = nullptr; + vr::UiElement* reticle_render_target_ = nullptr; int content_tex_css_width_ = 0; int content_tex_css_height_ = 0; @@ -265,7 +268,7 @@ GlBrowserInterface* browser_; - UiScene* scene_ = nullptr; + vr::UiScene* scene_ = nullptr; uint8_t frame_index_ = 0; // Larger than frame_index_ so it can be initialized out-of-band. @@ -274,14 +277,14 @@ // Attributes for gesture detection while holding app button. gfx::Vector3dF controller_start_direction_; - std::unique_ptr<FPSMeter> fps_meter_; + std::unique_ptr<vr::FPSMeter> fps_meter_; - std::unique_ptr<SlidingAverage> webvr_js_time_; - std::unique_ptr<SlidingAverage> webvr_render_time_; + std::unique_ptr<vr::SlidingAverage> webvr_js_time_; + std::unique_ptr<vr::SlidingAverage> webvr_render_time_; gfx::Point3F pointer_start_; - std::unique_ptr<UiInputManager> input_manager_; + std::unique_ptr<vr::UiInputManager> input_manager_; base::WeakPtrFactory<VrShellGl> weak_ptr_factory_;
diff --git a/chrome/browser/android/vr_shell/vr_shell_renderer.cc b/chrome/browser/android/vr_shell/vr_shell_renderer.cc index 64fec5c..a2242aaa 100644 --- a/chrome/browser/android/vr_shell/vr_shell_renderer.cc +++ b/chrome/browser/android/vr_shell/vr_shell_renderer.cc
@@ -376,7 +376,7 @@ uniform vec4 u_EdgeColor; uniform vec4 u_GridColor; uniform mediump float u_Opacity; - uniform int u_LinesCount; + uniform float u_LinesCount; void main() { float edgeColorWeight = clamp(length(v_GridPosition), 0.0, 1.0); @@ -384,7 +384,7 @@ vec4 bg_color = u_CenterColor * centerColorWeight + u_EdgeColor * edgeColorWeight; bg_color = vec4(bg_color.xyz * bg_color.w, bg_color.w); - float linesCountF = float(u_LinesCount) / 2.0; + float linesCountF = u_LinesCount * 0.5; float pos_x = abs(v_GridPosition.x) * linesCountF; float pos_y = abs(v_GridPosition.y) * linesCountF; float diff_x = abs(pos_x - floor(pos_x + 0.5)); @@ -854,14 +854,14 @@ GL_RGBA, GL_UNSIGNED_BYTE, pixmap.addr()); } - const gltf::Accessor* accessor = model->PositionAccessor(); - position_components_ = gltf::GetTypeComponents(accessor->type); + const vr::gltf::Accessor* accessor = model->PositionAccessor(); + position_components_ = vr::gltf::GetTypeComponents(accessor->type); position_type_ = accessor->component_type; position_stride_ = accessor->byte_stride; position_offset_ = VOID_OFFSET(accessor->byte_offset); accessor = model->TextureCoordinateAccessor(); - tex_coord_components_ = gltf::GetTypeComponents(accessor->type); + tex_coord_components_ = vr::gltf::GetTypeComponents(accessor->type); tex_coord_type_ = accessor->component_type; tex_coord_stride_ = accessor->byte_stride; tex_coord_offset_ = VOID_OFFSET(accessor->byte_offset); @@ -964,7 +964,7 @@ // Tell shader the grid size so that it can calculate the fading. glUniform1f(scene_radius_handle_, kHalfSize); - glUniform1i(lines_count_handle_, gridline_count); + glUniform1f(lines_count_handle_, static_cast<float>(gridline_count)); // Set the edge color to the fog color so that it seems to fade out. SetColorUniform(edge_color_handle_, edge_color);
diff --git a/chrome/browser/android/vr_shell/vr_shell_renderer.h b/chrome/browser/android/vr_shell/vr_shell_renderer.h index 305a6590..657fd4eb9 100644 --- a/chrome/browser/android/vr_shell/vr_shell_renderer.h +++ b/chrome/browser/android/vr_shell/vr_shell_renderer.h
@@ -10,8 +10,8 @@ #include <vector> #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_element_renderer.h" #include "chrome/browser/android/vr_shell/vr_controller_model.h" +#include "chrome/browser/vr/ui_element_renderer.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size_f.h" #include "ui/gfx/transform.h" @@ -287,12 +287,12 @@ DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer); }; -class VrShellRenderer : public UiElementRenderer { +class VrShellRenderer : public vr::UiElementRenderer { public: VrShellRenderer(); ~VrShellRenderer() override; - // UiElementRenderer interface (exposed to UI elements). + // vr::UiElementRenderer interface (exposed to UI elements). void DrawTexturedQuad(int texture_data_handle, const gfx::Transform& view_proj_matrix, const gfx::RectF& copy_rect,
diff --git a/chrome/browser/android/vr_shell/vr_web_contents_observer.cc b/chrome/browser/android/vr_shell/vr_web_contents_observer.cc index aec6c6f..56e9846 100644 --- a/chrome/browser/android/vr_shell/vr_web_contents_observer.cc +++ b/chrome/browser/android/vr_shell/vr_web_contents_observer.cc
@@ -4,9 +4,9 @@ #include "chrome/browser/android/vr_shell/vr_web_contents_observer.h" -#include "chrome/browser/android/vr_shell/toolbar_helper.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" #include "chrome/browser/android/vr_shell/vr_shell.h" +#include "chrome/browser/vr/toolbar_helper.h" +#include "chrome/browser/vr/ui_interface.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" @@ -15,8 +15,8 @@ VrWebContentsObserver::VrWebContentsObserver(content::WebContents* web_contents, VrShell* vr_shell, - UiInterface* ui_interface, - ToolbarHelper* toolbar) + vr::UiInterface* ui_interface, + vr::ToolbarHelper* toolbar) : WebContentsObserver(web_contents), vr_shell_(vr_shell), ui_interface_(ui_interface), @@ -26,7 +26,7 @@ VrWebContentsObserver::~VrWebContentsObserver() {} -void VrWebContentsObserver::SetUiInterface(UiInterface* ui_interface) { +void VrWebContentsObserver::SetUiInterface(vr::UiInterface* ui_interface) { ui_interface_ = ui_interface; }
diff --git a/chrome/browser/android/vr_shell/vr_web_contents_observer.h b/chrome/browser/android/vr_shell/vr_web_contents_observer.h index ac10b059..f6624c9 100644 --- a/chrome/browser/android/vr_shell/vr_web_contents_observer.h +++ b/chrome/browser/android/vr_shell/vr_web_contents_observer.h
@@ -10,24 +10,27 @@ namespace content { class NavigationHandle; -} +} // namespace content + +namespace vr { +class ToolbarHelper; +class UiInterface; +} // namespace vr namespace vr_shell { -class UiInterface; class VrShell; -class ToolbarHelper; class CONTENT_EXPORT VrWebContentsObserver : public content::WebContentsObserver { public: VrWebContentsObserver(content::WebContents* web_contents, VrShell* vr_shell, - UiInterface* ui_interface, - ToolbarHelper* toolbar); + vr::UiInterface* ui_interface, + vr::ToolbarHelper* toolbar); ~VrWebContentsObserver() override; - void SetUiInterface(UiInterface* ui_interface); + void SetUiInterface(vr::UiInterface* ui_interface); private: // WebContentsObserver implementation. @@ -51,8 +54,8 @@ // This class does not own these pointers. VrShell* vr_shell_; - UiInterface* ui_interface_; - ToolbarHelper* toolbar_; + vr::UiInterface* ui_interface_; + vr::ToolbarHelper* toolbar_; DISALLOW_COPY_AND_ASSIGN(VrWebContentsObserver); };
diff --git a/chrome/browser/chrome_browser_main_android.cc b/chrome/browser/chrome_browser_main_android.cc index 7c71f4f..27f240e 100644 --- a/chrome/browser/chrome_browser_main_android.cc +++ b/chrome/browser/chrome_browser_main_android.cc
@@ -80,6 +80,10 @@ crash_dump_dir, kAndroidMinidumpDescriptor)); } + // Auto-detect based on en-US whether secondary locale .pak files exist. + ui::SetLoadSecondaryLocalePaks( + !ui::GetPathForAndroidLocalePakWithinApk("en-US").empty()); + return ChromeBrowserMainParts::PreCreateThreads(); }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 528d989..17f899b 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2800,6 +2800,12 @@ fd = ui::GetLocalePackFd(®ion); mappings->ShareWithRegion(kAndroidLocalePakDescriptor, fd, region); + // Optional secondary locale .pak file. + fd = ui::GetSecondaryLocalePackFd(®ion); + if (fd != -1) { + mappings->ShareWithRegion(kAndroidSecondaryLocalePakDescriptor, fd, region); + } + breakpad::CrashDumpObserver::GetInstance()->BrowserChildProcessStarted( child_process_id, mappings);
diff --git a/chrome/browser/component_updater/chrome_component_updater_configurator.cc b/chrome/browser/component_updater/chrome_component_updater_configurator.cc index 581839d..a7f3b5a 100644 --- a/chrome/browser/component_updater/chrome_component_updater_configurator.cc +++ b/chrome/browser/component_updater/chrome_component_updater_configurator.cc
@@ -183,22 +183,12 @@ return configurator_impl_.EnabledCupSigning(); } -// Returns a task runner to run blocking tasks. The task runner continues to run -// after the browser shuts down, until the OS terminates the process. This -// imposes certain requirements for the code using the task runner, such as -// not accessing any global browser state while the code is running. +// Returns a task runner to run blocking tasks. scoped_refptr<base::SequencedTaskRunner> ChromeConfigurator::GetSequencedTaskRunner() const { - constexpr base::TaskTraits traits = { - base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}; -#if defined(OS_WIN) - // Use the COM STA task runner as the Windows background downloader requires - // COM initialization. - return base::CreateCOMSTATaskRunnerWithTraits(traits); -#else - return base::CreateSequencedTaskRunnerWithTraits(traits); -#endif + return base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); } PrefService* ChromeConfigurator::GetPrefService() const {
diff --git a/chrome/browser/crash_upload_list/crash_upload_list.cc b/chrome/browser/crash_upload_list/crash_upload_list.cc index 6f0eeec..c6345fb 100644 --- a/chrome/browser/crash_upload_list/crash_upload_list.cc +++ b/chrome/browser/crash_upload_list/crash_upload_list.cc
@@ -4,37 +4,34 @@ #include "chrome/browser/crash_upload_list/crash_upload_list.h" -#include "base/files/file_path.h" -#include "base/path_service.h" -#include "base/threading/sequenced_worker_pool.h" #include "build/build_config.h" -#include "chrome/common/chrome_paths.h" -#include "content/public/browser/browser_thread.h" #if defined(OS_MACOSX) || defined(OS_WIN) #include "chrome/browser/crash_upload_list/crash_upload_list_crashpad.h" +#else +#include "base/files/file_path.h" +#include "base/path_service.h" +#include "chrome/common/chrome_paths.h" +#include "components/upload_list/crash_upload_list.h" +#include "components/upload_list/text_log_upload_list.h" #endif #if defined(OS_ANDROID) #include "chrome/browser/crash_upload_list/crash_upload_list_android.h" #endif -scoped_refptr<CrashUploadList> CreateCrashUploadList( - UploadList::Delegate* delegate) { +scoped_refptr<UploadList> CreateCrashUploadList() { #if defined(OS_MACOSX) || defined(OS_WIN) - return new CrashUploadListCrashpad(delegate, - content::BrowserThread::GetBlockingPool()); + return new CrashUploadListCrashpad(); #else base::FilePath crash_dir_path; PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dir_path); base::FilePath upload_log_path = crash_dir_path.AppendASCII(CrashUploadList::kReporterLogFilename); #if defined(OS_ANDROID) - return new CrashUploadListAndroid(delegate, upload_log_path, - content::BrowserThread::GetBlockingPool()); + return new CrashUploadListAndroid(upload_log_path); #else - return new CrashUploadList(delegate, upload_log_path, - content::BrowserThread::GetBlockingPool()); + return new TextLogUploadList(upload_log_path); #endif // defined(OS_ANDROID) #endif // defined(OS_MACOSX) || defined(OS_WIN) }
diff --git a/chrome/browser/crash_upload_list/crash_upload_list.h b/chrome/browser/crash_upload_list/crash_upload_list.h index 340ac3c..62debae 100644 --- a/chrome/browser/crash_upload_list/crash_upload_list.h +++ b/chrome/browser/crash_upload_list/crash_upload_list.h
@@ -6,11 +6,10 @@ #define CHROME_BROWSER_CRASH_UPLOAD_LIST_CRASH_UPLOAD_LIST_H_ #include "base/memory/ref_counted.h" -#include "components/upload_list/crash_upload_list.h" +#include "components/upload_list/upload_list.h" // Factory that creates the platform-specific implementation of the crash -// upload list with the given callback delegate. -scoped_refptr<CrashUploadList> CreateCrashUploadList( - UploadList::Delegate* delegate); +// report upload list. +scoped_refptr<UploadList> CreateCrashUploadList(); #endif // CHROME_BROWSER_CRASH_UPLOAD_LIST_CRASH_UPLOAD_LIST_H_
diff --git a/chrome/browser/crash_upload_list/crash_upload_list_android.cc b/chrome/browser/crash_upload_list/crash_upload_list_android.cc index 18ace2d..651fb61 100644 --- a/chrome/browser/crash_upload_list/crash_upload_list_android.cc +++ b/chrome/browser/crash_upload_list/crash_upload_list_android.cc
@@ -11,28 +11,24 @@ #include "base/files/file.h" #include "base/files/file_enumerator.h" #include "base/files/file_util.h" -#include "base/task_runner.h" #include "jni/MinidumpUploadService_jni.h" #include "ui/base/text/bytes_formatting.h" CrashUploadListAndroid::CrashUploadListAndroid( - Delegate* delegate, - const base::FilePath& upload_log_path, - scoped_refptr<base::TaskRunner> task_runner) - : CrashUploadList(delegate, upload_log_path, std::move(task_runner)) {} + const base::FilePath& upload_log_path) + : TextLogUploadList(upload_log_path) {} CrashUploadListAndroid::~CrashUploadListAndroid() {} -void CrashUploadListAndroid::LoadUploadList( - std::vector<UploadList::UploadInfo>* uploads) { - // This will load the list of successfully uploaded logs. - CrashUploadList::LoadUploadList(uploads); - - LoadUnsuccessfulUploadList(uploads); +std::vector<UploadList::UploadInfo> CrashUploadListAndroid::LoadUploadList() { + // First load the list of successfully uploaded logs. + std::vector<UploadInfo> uploads = TextLogUploadList::LoadUploadList(); + // Then load the unsuccessful uploads. + LoadUnsuccessfulUploadList(&uploads); + return uploads; } -void CrashUploadListAndroid::RequestSingleCrashUpload( - const std::string& local_id) { +void CrashUploadListAndroid::RequestSingleUpload(const std::string& local_id) { JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> j_local_id = base::android::ConvertUTF8ToJavaString(env, local_id);
diff --git a/chrome/browser/crash_upload_list/crash_upload_list_android.h b/chrome/browser/crash_upload_list/crash_upload_list_android.h index adc75f2b..c7b0cebf 100644 --- a/chrome/browser/crash_upload_list/crash_upload_list_android.h +++ b/chrome/browser/crash_upload_list/crash_upload_list_android.h
@@ -6,27 +6,24 @@ #define CHROME_BROWSER_CRASH_UPLOAD_LIST_CRASH_UPLOAD_LIST_ANDROID_H_ #include "base/macros.h" -#include "components/upload_list/crash_upload_list.h" +#include "components/upload_list/text_log_upload_list.h" namespace base { class FilePath; -class TaskRunner; } -// A CrashUploadList that retrieves the list of uploaded reports from the -// Android crash reporter. -class CrashUploadListAndroid : public CrashUploadList { +// An UploadList that retrieves the list of crash reports available on the +// client. This uses both the Breakpad text log format, as well as inspecting +// the un-uploaded Minidump directory, managed by the MinidumpUploadService. +class CrashUploadListAndroid : public TextLogUploadList { public: - CrashUploadListAndroid(Delegate* delegate, - const base::FilePath& upload_log_path, - scoped_refptr<base::TaskRunner> task_runner); + CrashUploadListAndroid(const base::FilePath& upload_log_path); protected: ~CrashUploadListAndroid() override; - // Called on a blocking pool thread. - void LoadUploadList(std::vector<UploadInfo>* uploads) override; - void RequestSingleCrashUpload(const std::string& local_id) override; + std::vector<UploadInfo> LoadUploadList() override; + void RequestSingleUpload(const std::string& local_id) override; private: void LoadUnsuccessfulUploadList(std::vector<UploadInfo>* uploads);
diff --git a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc index 49a0e0b33..017d9e1 100644 --- a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc +++ b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc
@@ -8,7 +8,6 @@ #include <utility> -#include "base/task_runner.h" #include "base/time/time.h" #include "build/build_config.h" #include "chrome/common/chrome_constants.h" @@ -80,15 +79,16 @@ } // namespace -CrashUploadListCrashpad::CrashUploadListCrashpad( - Delegate* delegate, - scoped_refptr<base::TaskRunner> task_runner) - : CrashUploadList(delegate, base::FilePath(), std::move(task_runner)) {} +CrashUploadListCrashpad::CrashUploadListCrashpad() = default; -CrashUploadListCrashpad::~CrashUploadListCrashpad() {} +CrashUploadListCrashpad::~CrashUploadListCrashpad() = default; -void CrashUploadListCrashpad::LoadUploadList( - std::vector<UploadList::UploadInfo>* uploads) { +base::TaskTraits CrashUploadListCrashpad::LoadingTaskTraits() { + return {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}; +} + +std::vector<UploadList::UploadInfo> CrashUploadListCrashpad::LoadUploadList() { std::vector<crash_reporter::Report> reports; #if defined(OS_WIN) // On Windows, we only link crash client into chrome.exe (not the dlls), and @@ -100,16 +100,17 @@ crash_reporter::GetReports(&reports); #endif + std::vector<UploadInfo> uploads; for (const crash_reporter::Report& report : reports) { - uploads->push_back( + uploads.push_back( UploadInfo(report.remote_id, base::Time::FromTimeT(report.upload_time), report.local_id, base::Time::FromTimeT(report.capture_time), ReportUploadStateToUploadInfoState(report.state))); } + return uploads; } -void CrashUploadListCrashpad::RequestSingleCrashUpload( - const std::string& local_id) { +void CrashUploadListCrashpad::RequestSingleUpload(const std::string& local_id) { #if defined(OS_WIN) // On Windows, crash reporting is handled by chrome_elf.dll, that's why we // can't call crash_reporter::RequestSingleCrashUpload directly.
diff --git a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.h b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.h index 35eb567..8fa05ca 100644 --- a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.h +++ b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.h
@@ -6,26 +6,20 @@ #define CHROME_BROWSER_CRASH_UPLOAD_LIST_CRASH_UPLOAD_LIST_CRASHPAD_H_ #include "base/macros.h" -#include "components/upload_list/crash_upload_list.h" +#include "components/upload_list/upload_list.h" -namespace base { -class TaskRunner; -} - -// A CrashUploadList that retrieves the list of uploaded reports from the +// An UploadList that retrieves the list of crash reports from the // Crashpad database. -class CrashUploadListCrashpad : public CrashUploadList { +class CrashUploadListCrashpad : public UploadList { public: - CrashUploadListCrashpad(Delegate* delegate, - scoped_refptr<base::TaskRunner> task_runner); + CrashUploadListCrashpad(); protected: ~CrashUploadListCrashpad() override; - // Called on a blocking pool thread. - void LoadUploadList(std::vector<UploadInfo>* uploads) override; - - void RequestSingleCrashUpload(const std::string& local_id) override; + base::TaskTraits LoadingTaskTraits() override; + std::vector<UploadInfo> LoadUploadList() override; + void RequestSingleUpload(const std::string& local_id) override; DISALLOW_COPY_AND_ASSIGN(CrashUploadListCrashpad); };
diff --git a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc index cad5edd8..747a442 100644 --- a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc
@@ -28,7 +28,7 @@ CrashIdsSource::CrashIdsSource() : SystemLogsSource("CrashId"), - crash_upload_list_(CreateCrashUploadList(this)), + crash_upload_list_(CreateCrashUploadList()), pending_crash_list_loading_(false) {} CrashIdsSource::~CrashIdsSource() {} @@ -42,7 +42,8 @@ return; pending_crash_list_loading_ = true; - crash_upload_list_->LoadUploadListAsynchronously(); + crash_upload_list_->Load(base::BindOnce( + &CrashIdsSource::OnUploadListAvailable, base::Unretained(this))); } void CrashIdsSource::OnUploadListAvailable() {
diff --git a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.h b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.h index 60839cd..6339c5fb 100644 --- a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.h +++ b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.h
@@ -9,13 +9,12 @@ #include "base/callback_forward.h" #include "chrome/browser/feedback/system_logs/system_logs_source.h" -#include "components/upload_list/crash_upload_list.h" #include "components/upload_list/upload_list.h" namespace system_logs { // Extract the most recent crash IDs (if any) and adds them to the system logs. -class CrashIdsSource : public SystemLogsSource, public UploadList::Delegate { +class CrashIdsSource : public SystemLogsSource { public: CrashIdsSource(); ~CrashIdsSource() override; @@ -23,13 +22,11 @@ // SystemLogsSource: void Fetch(const SysLogsSourceCallback& callback) override; - // UploadList::Delegate: - void OnUploadListAvailable() override; - private: + void OnUploadListAvailable(); void RespondWithCrashIds(const SysLogsSourceCallback& callback) const; - scoped_refptr<CrashUploadList> crash_upload_list_; + scoped_refptr<UploadList> crash_upload_list_; // A comma-separated list of crash IDs as expected by the server. std::string crash_ids_list_;
diff --git a/chrome/browser/media/media_engagement_contents_observer.cc b/chrome/browser/media/media_engagement_contents_observer.cc index 3c32dcb..99ca935 100644 --- a/chrome/browser/media/media_engagement_contents_observer.cc +++ b/chrome/browser/media/media_engagement_contents_observer.cc
@@ -39,6 +39,7 @@ for (auto const& p : player_states_) delete p.second; player_states_.clear(); + significant_players_.clear(); } void MediaEngagementContentsObserver::DidFinishNavigation( @@ -49,9 +50,7 @@ return; } - DCHECK(!playback_timer_->IsRunning()); - DCHECK(significant_players_.empty()); - + playback_timer_->Stop(); ClearPlayerStates(); url::Origin new_origin(navigation_handle->GetURL());
diff --git a/chrome/browser/media/media_engagement_contents_observer_unittest.cc b/chrome/browser/media/media_engagement_contents_observer_unittest.cc index 7a509d11..3e3bebf 100644 --- a/chrome/browser/media/media_engagement_contents_observer_unittest.cc +++ b/chrome/browser/media/media_engagement_contents_observer_unittest.cc
@@ -136,6 +136,16 @@ ->SetWasRecentlyAudible(false); } + void SimulateSignificantPlayer(int id) { + SimulatePlaybackStarted(id); + SimulateIsVisible(); + SimulateAudible(); + web_contents()->SetAudioMuted(false); + SimulateResizeEvent(id, MediaEngagementContentsObserver::kSignificantSize); + } + + void ForceUpdateTimer() { contents_observer_->UpdateTimer(); } + private: // contents_observer_ auto-destroys when WebContents is destroyed. MediaEngagementContentsObserver* contents_observer_; @@ -266,11 +276,7 @@ TEST_F(MediaEngagementContentsObserverTest, SignificantPlaybackRecordedWhenTimerFires) { - SimulatePlaybackStarted(0); - SimulateIsVisible(); - SimulateAudible(); - web_contents()->SetAudioMuted(false); - SimulateResizeEvent(0, MediaEngagementContentsObserver::kSignificantSize); + SimulateSignificantPlayer(0); EXPECT_TRUE(IsTimerRunning()); EXPECT_FALSE(WasSignificantPlaybackRecorded()); @@ -307,3 +313,16 @@ SimulatePlaybackStarted(player_info, 0); EXPECT_EQ(0u, GetSignificantActivePlayersCount()); } + +TEST_F(MediaEngagementContentsObserverTest, + ResetStateOnNavigationWithPlayingPlayers) { + Navigate(GURL("https://www.google.com")); + SimulateSignificantPlayer(0); + ForceUpdateTimer(); + EXPECT_TRUE(IsTimerRunning()); + + Navigate(GURL("https://www.example.com")); + EXPECT_FALSE(GetSignificantActivePlayersCount()); + EXPECT_FALSE(GetStoredPlayerStatesCount()); + EXPECT_FALSE(IsTimerRunning()); +}
diff --git a/chrome/browser/media/webrtc/webrtc_log_list.cc b/chrome/browser/media/webrtc/webrtc_log_list.cc index 4187086..4663966 100644 --- a/chrome/browser/media/webrtc/webrtc_log_list.cc +++ b/chrome/browser/media/webrtc/webrtc_log_list.cc
@@ -5,26 +5,24 @@ #include "chrome/browser/media/webrtc/webrtc_log_list.h" #include "base/files/file.h" -#include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/task_scheduler/post_task.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_paths.h" +#include "components/upload_list/text_log_upload_list.h" namespace { const char kWebRtcLogDirectory[] = "WebRTC Logs"; const char kWebRtcLogListFilename[] = "Log List"; -} +} // namespace // static -UploadList* WebRtcLogList::CreateWebRtcLogList(UploadList::Delegate* delegate, - Profile* profile) { +UploadList* WebRtcLogList::CreateWebRtcLogList(Profile* profile) { base::FilePath log_list_path = GetWebRtcLogListFileForDirectory( GetWebRtcLogDirectoryForProfile(profile->GetPath())); - return new UploadList(delegate, log_list_path, - base::CreateTaskRunnerWithTraits({base::MayBlock()})); + return new TextLogUploadList(log_list_path); } // static
diff --git a/chrome/browser/media/webrtc/webrtc_log_list.h b/chrome/browser/media/webrtc/webrtc_log_list.h index c5c56a5..07d5cf12 100644 --- a/chrome/browser/media/webrtc/webrtc_log_list.h +++ b/chrome/browser/media/webrtc/webrtc_log_list.h
@@ -5,17 +5,17 @@ #ifndef CHROME_BROWSER_MEDIA_WEBRTC_WEBRTC_LOG_LIST_H_ #define CHROME_BROWSER_MEDIA_WEBRTC_WEBRTC_LOG_LIST_H_ -#include "components/upload_list/upload_list.h" +#include "base/files/file_path.h" class Profile; +class UploadList; class WebRtcLogList { public: // Creates the upload list with the given callback delegate for a // profile. The upload list loads and parses a text file list of WebRTC // logs stored locally and/or uploaded. - static UploadList* CreateWebRtcLogList(UploadList::Delegate* delegate, - Profile* profile); + static UploadList* CreateWebRtcLogList(Profile* profile); // Get the file path for the log directory for a profile. static base::FilePath GetWebRtcLogDirectoryForProfile(
diff --git a/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc b/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc index 2d385ad..4e49c10 100644 --- a/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc +++ b/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc
@@ -19,6 +19,7 @@ namespace { using testing::Contains; +using testing::Not; std::string PrintTile(const std::string& title, const std::string& url, @@ -102,4 +103,28 @@ TileSource::TOP_SITES))); } +// Tests that after navigating to a URL with a server redirect, ntp tiles will +// include the correct URL. +IN_PROC_BROWSER_TEST_F(NTPTilesTest, ServerRedirect) { + ASSERT_TRUE(embedded_test_server()->Start()); + GURL final_url = embedded_test_server()->GetURL("/defaultresponse"); + GURL first_url = + embedded_test_server()->GetURL("/server-redirect?" + final_url.spec()); + + ui_test_utils::NavigateToURLWithDisposition( + browser(), first_url, WindowOpenDisposition::CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + MostVisitedSitesWaiter waiter; + most_visited_sites_->SetMostVisitedURLsObserver(&waiter, /*num_sites=*/8); + + NTPTilesVector tiles = waiter.WaitForTiles(); + + // TopSites uses the start of the redirect chain, so verify the first URL + // is listed, but not the final URL. + EXPECT_THAT(tiles, Contains(MatchesTile("", first_url.spec().c_str(), + TileSource::TOP_SITES))); + EXPECT_THAT(tiles, Not(Contains(MatchesTile("", final_url.spec().c_str(), + TileSource::TOP_SITES)))); +} + } // namespace ntp_tiles
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc index 28e50f8..4c5297e3 100644 --- a/chrome/browser/password_manager/password_store_factory.cc +++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -28,6 +28,7 @@ #include "components/os_crypt/os_crypt_switches.h" #include "components/password_manager/core/browser/http_data_cleaner.h" #include "components/password_manager/core/browser/login_database.h" +#include "components/password_manager/core/browser/password_reuse_defines.h" #include "components/password_manager/core/browser/password_store.h" #include "components/password_manager/core/browser/password_store_default.h" #include "components/password_manager/core/browser/password_store_factory_util.h" @@ -58,8 +59,7 @@ #include "chrome/browser/password_manager/password_store_x.h" #endif -#if defined(OS_WIN) || defined(OS_MACOSX) || \ - (defined(OS_LINUX) && !defined(OS_CHROMEOS)) +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) #include "chrome/browser/password_manager/password_store_signin_notifier_impl.h" #endif @@ -115,8 +115,7 @@ "PasswordStore", BrowserContextDependencyManager::GetInstance()) { DependsOn(WebDataServiceFactory::GetInstance()); -#if defined(OS_WIN) || defined(OS_MACOSX) || \ - (defined(OS_LINUX) && !defined(OS_CHROMEOS)) +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) // TODO(crbug.com/715987). Remove when PasswordReuseDetector is decoupled // from PasswordStore. DependsOn(SigninManagerFactory::GetInstance());
diff --git a/chrome/browser/profiles/avatar_menu.h b/chrome/browser/profiles/avatar_menu.h index bb72593..cada138 100644 --- a/chrome/browser/profiles/avatar_menu.h +++ b/chrome/browser/profiles/avatar_menu.h
@@ -116,7 +116,9 @@ // an item. void EditProfile(size_t index); - // Rebuilds the menu from the cache. + // Rebuilds the menu from the cache. Note: If this is done in response to the + // active browser changing, ActiveBrowserChanged() should be called first to + // update this object's internal state. void RebuildMenu(); // Gets the number of profiles. @@ -136,8 +138,9 @@ // string will be returned. base::string16 GetSupervisedUserInformation() const; - // This menu is also used for the always-present Mac system menubar. If the - // last active browser changes, the menu will need to reference that browser. + // This menu is also used for the always-present Mac and Linux system menubar. + // If the last active browser changes, the menu will need to reference that + // browser. void ActiveBrowserChanged(Browser* browser); // Returns true if the add profile link should be shown.
diff --git a/chrome/browser/resources/media_router/elements/route_controls/route_controls.html b/chrome/browser/resources/media_router/elements/route_controls/route_controls.html index b6ca6c4..4037460e 100644 --- a/chrome/browser/resources/media_router/elements/route_controls/route_controls.html +++ b/chrome/browser/resources/media_router/elements/route_controls/route_controls.html
@@ -17,6 +17,7 @@ <div> <div id="route-time-controls" hidden="[[!routeStatus.canSeek]]"> <paper-slider + dir="ltr" id="route-time-slider" on-change="onSeekComplete_" on-immediate-value-change="onSeekStart_" @@ -51,6 +52,7 @@ </span> <span id="volume-holder"> <paper-slider + dir="ltr" id="route-volume-slider" hidden="[[!routeStatus.canSetVolume]]" disabled="[[!routeStatus.canSetVolume]]"
diff --git a/chrome/browser/resources/settings/people_page/change_picture.html b/chrome/browser/resources/settings/people_page/change_picture.html index 12dd0624..17a1453 100644 --- a/chrome/browser/resources/settings/people_page/change_picture.html +++ b/chrome/browser/resources/settings/people_page/change_picture.html
@@ -1,8 +1,8 @@ <link rel="import" href="chrome://resources/html/polymer.html"> -<link rel="import" href="chrome://resources/cr_elements/chromeos/change_picture/cr_picture_list.html"> -<link rel="import" href="chrome://resources/cr_elements/chromeos/change_picture/cr_picture_preview.html"> -<link rel="import" href="chrome://resources/cr_elements/chromeos/change_picture/cr_picture_types.html"> +<link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_picture_list.html"> +<link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html"> +<link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_picture_types.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/util.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> @@ -25,7 +25,7 @@ margin-top: 8px; } - cr-picture-preview { + cr-picture-pane { -webkit-margin-end: 10px; flex-shrink: 0; width: 228px; @@ -52,7 +52,7 @@ </a> </div> </div> - <cr-picture-preview id="picturePreview" + <cr-picture-pane id="picturePane" camera-present="[[cameraPresent_]]", image-src="[[getImageSrc_(selectedItem_)]]" image-type="[[getImageType_(selectedItem_)]]" @@ -60,7 +60,7 @@ flip-photo-label="$i18n{flipPhoto}" preview-alt-text="$i18n{previewAltText}" take-photo-label="$i18n{takePhoto}"> - </cr-picture-preview> + </cr-picture-pane> </div> </template> <script src="change_picture.js"></script>
diff --git a/chrome/browser/resources/settings/people_page/change_picture.js b/chrome/browser/resources/settings/people_page/change_picture.js index 26902bdf..fe9f948 100644 --- a/chrome/browser/resources/settings/people_page/change_picture.js +++ b/chrome/browser/resources/settings/people_page/change_picture.js
@@ -153,7 +153,7 @@ selectImage_: function(image) { switch (image.dataset.type) { case CrPicture.SelectionTypes.CAMERA: - /** CrPicturePreviewElement */ (this.$.picturePreview).takePhoto(); + /** CrPicturePaneElement */ (this.$.picturePane).takePhoto(); break; case CrPicture.SelectionTypes.FILE: this.browserProxy_.chooseFile();
diff --git a/chrome/browser/resources/settings/people_page/compiled_resources2.gyp b/chrome/browser/resources/settings/people_page/compiled_resources2.gyp index e6609691..50e79e4 100644 --- a/chrome/browser/resources/settings/people_page/compiled_resources2.gyp +++ b/chrome/browser/resources/settings/people_page/compiled_resources2.gyp
@@ -6,9 +6,9 @@ { 'target_name': 'change_picture', 'dependencies': [ - '<(DEPTH)/ui/webui/resources/cr_elements/chromeos/change_picture/compiled_resources2.gyp:cr_picture_list', - '<(DEPTH)/ui/webui/resources/cr_elements/chromeos/change_picture/compiled_resources2.gyp:cr_picture_preview', - '<(DEPTH)/ui/webui/resources/cr_elements/chromeos/change_picture/compiled_resources2.gyp:cr_picture_types', + '<(DEPTH)/ui/webui/resources/cr_elements/chromeos/cr_picture/compiled_resources2.gyp:cr_picture_list', + '<(DEPTH)/ui/webui/resources/cr_elements/chromeos/cr_picture/compiled_resources2.gyp:cr_picture_pane', + '<(DEPTH)/ui/webui/resources/cr_elements/chromeos/cr_picture/compiled_resources2.gyp:cr_picture_types', '<(DEPTH)/third_party/polymer/v1_0/components-chromium/iron-selector/compiled_resources2.gyp:iron-selector-extracted', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:i18n_behavior', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:load_time_data',
diff --git a/chrome/browser/signin/dice_browsertest.cc b/chrome/browser/signin/dice_browsertest.cc index bfd44a3e..3c327e0e 100644 --- a/chrome/browser/signin/dice_browsertest.cc +++ b/chrome/browser/signin/dice_browsertest.cc
@@ -192,10 +192,16 @@ browser()->profile()); } + // Returns the account tracker service. AccountTrackerService* GetAccountTrackerService() { return AccountTrackerServiceFactory::GetForProfile(browser()->profile()); } + // Returns the signin manager. + SigninManager* GetSigninManager() { + return SigninManagerFactory::GetForProfile(browser()->profile()); + } + // Returns the account ID associated with kMainEmail, kMainGaiaID. std::string GetMainAccountID() { return GetAccountTrackerService()->PickAccountIdForAccount(kMainGaiaID, @@ -211,8 +217,7 @@ // Signin with a main account and add token for a secondary account. void SetupSignedInAccounts() { // Signin main account. - SigninManager* signin_manager = - SigninManagerFactory::GetForProfile(browser()->profile()); + SigninManager* signin_manager = GetSigninManager(); signin_manager->StartSignInWithRefreshToken( "refresh_token", kMainGaiaID, kMainEmail, "password", SigninManager::OAuthTokenFetchedCallback()); @@ -221,9 +226,9 @@ // Add a token for a secondary account. std::string secondary_account_id = - GetAccountTrackerService()->SeedAccountInfo(kSecondaryEmail, - kSecondaryGaiaID); - GetTokenService()->UpdateCredentials(kSecondaryEmail, "other_token"); + GetAccountTrackerService()->SeedAccountInfo(kSecondaryGaiaID, + kSecondaryEmail); + GetTokenService()->UpdateCredentials(secondary_account_id, "other_token"); ASSERT_TRUE( GetTokenService()->RefreshTokenIsAvailable(secondary_account_id)); } @@ -295,6 +300,35 @@ EXPECT_TRUE(token_requested_); EXPECT_TRUE(refresh_token_available_); EXPECT_TRUE(GetTokenService()->RefreshTokenIsAvailable(GetMainAccountID())); + // Sync should not be enabled. + EXPECT_TRUE(GetSigninManager()->GetAuthenticatedAccountId().empty()); +} + +// Checks that re-auth on Gaia triggers the fetch for a refresh token. +IN_PROC_BROWSER_TEST_F(DiceBrowserTest, Reauth) { + // Start from a signed-in state. + SetupSignedInAccounts(); + + // Navigate to Gaia and sign in again with the main account. + NavigateToURL(kSigninURL); + + // Check that the Dice request header was sent. + std::string header_value; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + browser()->tab_strip_model()->GetActiveWebContents(), + "window.domAutomationController.send(document.body.textContent);", + &header_value)); + EXPECT_EQ(base::StringPrintf( + "client_id=%s", + GaiaUrls::GetInstance()->oauth2_chrome_client_id().c_str()), + header_value); + + // Check that the token was requested and added to the token service. + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(token_requested_); + EXPECT_TRUE(refresh_token_available_); + EXPECT_EQ(GetMainAccountID(), + GetSigninManager()->GetAuthenticatedAccountId()); } // Checks that the Dice signout flow works and deletes all tokens. @@ -306,9 +340,7 @@ SignOutWithDice(kMainAccount); // Check that the user is signed out and all tokens are deleted. - SigninManager* signin_manager = - SigninManagerFactory::GetForProfile(browser()->profile()); - EXPECT_TRUE(signin_manager->GetAuthenticatedAccountId().empty()); + EXPECT_TRUE(GetSigninManager()->GetAuthenticatedAccountId().empty()); EXPECT_FALSE(GetTokenService()->RefreshTokenIsAvailable(GetMainAccountID())); EXPECT_FALSE( GetTokenService()->RefreshTokenIsAvailable(GetSecondaryAccountID())); @@ -325,9 +357,8 @@ // Check that the user is still signed in from main account, but secondary // token is deleted. - SigninManager* signin_manager = - SigninManagerFactory::GetForProfile(browser()->profile()); - EXPECT_EQ(GetMainAccountID(), signin_manager->GetAuthenticatedAccountId()); + EXPECT_EQ(GetMainAccountID(), + GetSigninManager()->GetAuthenticatedAccountId()); EXPECT_TRUE(GetTokenService()->RefreshTokenIsAvailable(GetMainAccountID())); EXPECT_FALSE( GetTokenService()->RefreshTokenIsAvailable(GetSecondaryAccountID())); @@ -342,9 +373,7 @@ SignOutWithDice(kAllAccounts); // Check that the user is signed out and all tokens are deleted. - SigninManager* signin_manager = - SigninManagerFactory::GetForProfile(browser()->profile()); - EXPECT_TRUE(signin_manager->GetAuthenticatedAccountId().empty()); + EXPECT_TRUE(GetSigninManager()->GetAuthenticatedAccountId().empty()); EXPECT_FALSE(GetTokenService()->RefreshTokenIsAvailable(GetMainAccountID())); EXPECT_FALSE( GetTokenService()->RefreshTokenIsAvailable(GetSecondaryAccountID()));
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.mm b/chrome/browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.mm index 2daba8c..b080f93 100644 --- a/chrome/browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.mm +++ b/chrome/browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.mm
@@ -4,9 +4,11 @@ #import "chrome/browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.h" +#import "base/mac/scoped_nsobject.h" #include "chrome/browser/ui/autofill/autofill_popup_view_delegate.h" #include "chrome/browser/ui/autofill/popup_constants.h" #include "ui/base/cocoa/window_size_constants.h" +#include "ui/gfx/mac/coordinate_conversion.h" @implementation AutofillPopupBaseViewCocoa @@ -131,31 +133,69 @@ } #pragma mark - +#pragma mark Private methods: + +// Returns the full frame needed by the content, which may exceed the available +// vertical space (see clippedPopupFrame). +- (NSRect)fullPopupFrame { + // Flip the y-origin back into Cocoa-land. The controller's platform-neutral + // coordinate space places the origin at the top-left of the first screen + // (e.g. 300 from the top), whereas Cocoa's coordinate space expects the + // origin to be at the bottom-left of this same screen (e.g. 1200 from the + // bottom, when including the height of the popup). + return gfx::ScreenRectToNSRect(popup_delegate_->popup_bounds()); +} + +// Returns the frame of the popup that should be displayed, which is basically +// the bounds of the popup, clipped if there is not enough available vertical +// space. +- (NSRect)clippedPopupFrame { + NSRect clippedPopupFrame = [self fullPopupFrame]; + + // The y-origin of the popup may be outside the application window. If this + // happens, it is corrected to be at the application window's bottom edge, and + // the popup height is adjusted. + NSWindow* appWindow = [popup_delegate_->container_view() window]; + CGFloat appWindowBottomEdge = NSMinY([appWindow frame]); + if (clippedPopupFrame.origin.y < appWindowBottomEdge) { + clippedPopupFrame.origin.y = appWindowBottomEdge; + + // Both the popup frame and [appWindow frame] are in screen coordinates. + CGFloat dY = NSMaxY([appWindow frame]) - NSMaxY([self fullPopupFrame]); + clippedPopupFrame.size.height = NSHeight([appWindow frame]) - dY; + } + return clippedPopupFrame; +} + +#pragma mark - #pragma mark Messages from AutofillPopupViewBridge: - (void)updateBoundsAndRedrawPopup { - NSRect frame = NSRectFromCGRect(popup_delegate_->popup_bounds().ToCGRect()); + [[[self superview] window] setFrame:[self clippedPopupFrame] display:YES]; - // Flip coordinates back into Cocoa-land. The controller's platform-neutral - // coordinate space places the origin at the top-left of the first screen, - // whereas Cocoa's coordinate space expects the origin to be at the - // bottom-left of this same screen. - NSScreen* screen = [[NSScreen screens] firstObject]; - frame.origin.y = NSMaxY([screen frame]) - NSMaxY(frame); - - // TODO(isherman): The view should support scrolling if the popup gets too - // big to fit on the screen. - [[self window] setFrame:frame display:YES]; [self setNeedsDisplay:YES]; } - (void)showPopup { + NSRect clippedPopupFrame = [self clippedPopupFrame]; + // The window contains a scroll view, and both are the same size, which is + // may be clipped at the application window's bottom edge (see + // clippedPopupFrame). NSWindow* window = - [[NSWindow alloc] initWithContentRect:ui::kWindowSizeDeterminedLater + [[NSWindow alloc] initWithContentRect:clippedPopupFrame styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; - [window setContentView:self]; + base::scoped_nsobject<NSScrollView> scrollView( + [[NSScrollView alloc] initWithFrame:clippedPopupFrame]); + // Configure the scroller to have no visible border. + [scrollView setBorderType:NSNoBorder]; + + // The |window| contains the |scrollView|, which contains |self|, the full + // popup view (which is not clipped and may be longer than |scrollView|). + [self setFrame:[self fullPopupFrame]]; + [scrollView setDocumentView:self]; + [window setContentView:scrollView]; // Telling Cocoa that the window is opaque enables some drawing optimizations. [window setOpaque:YES];
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm index 947adde1b..12ac67f 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
@@ -7,6 +7,7 @@ #include "base/metrics/user_metrics.h" #include "chrome/browser/profiles/profile.h" #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" +#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_window.h" #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" #import "chrome/browser/ui/cocoa/browser_window_controller.h" #include "components/bookmarks/browser/bookmark_pasteboard_helper_mac.h" @@ -215,4 +216,9 @@ } } +- (void)drawRect:(NSRect)rect { + [[BookmarkBarFolderWindowContentView backgroundColor] set]; + NSRectFill([self bounds]); +} + @end
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm b/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm index dc61742..fdb74647 100644 --- a/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm
@@ -13,6 +13,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/cocoa/browser_window_layout.h" #import "chrome/browser/ui/cocoa/fast_resize_view.h" #include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h" #include "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" @@ -761,7 +762,13 @@ // view's frame and autoresizing mask. // TODO(sdy): Turn back on (or remove) after investigating a performance // regression: https://crbug.com/706931 - EXPECT_EQ(0u, [[[controller_ chromeContentView] constraints] count]); + if (chrome::ShouldUseFullSizeContentView()) { + // FramedBrowserWindow relies on Auto Layout to position the window buttons + // when using a full size content view. + EXPECT_NE(0u, [[[controller_ chromeContentView] constraints] count]); + } else { + EXPECT_EQ(0u, [[[controller_ chromeContentView] constraints] count]); + } } @interface BrowserWindowControllerFakeFullscreen : BrowserWindowController {
diff --git a/chrome/browser/ui/cocoa/browser_window_layout.mm b/chrome/browser/ui/cocoa/browser_window_layout.mm index dbee384..6df8307 100644 --- a/chrome/browser/ui/cocoa/browser_window_layout.mm +++ b/chrome/browser/ui/cocoa/browser_window_layout.mm
@@ -18,18 +18,13 @@ const CGFloat kTabStripHeight = 37; bool ShouldUseFullSizeContentView() { - // Chrome has added a subview above the window's content view, which the - // Appkit warns about at runtime. This was done to make sure that window - // buttons are always displayed above the content. Presumably, doing so may - // break in a future macOS release. Using NSFullSizeContentViewWindowMask - // makes window buttons displayed inside the titlebar, so they are not covered - // by the content view. - // TODO(crbug.com/666415): This should return base::mac::IsAtLeastOS10_11() - // once we are satisfied there are no regressions when doing this. The concern - // is that by making the browser view hierarchy a child view of NSThemeFrame - // rather than a sibling, the views are exposed to autolayout in new ways that - // may cause performance regressions and layout glitches. - return false; + // Chrome historically added a subview to the window's frame view + // (window.contentView.superview), which AppKit warns about at runtime. This + // stopped the window buttons from being covered by the content view. This + // may break in a future macOS release. NSFullSizeContentViewWindowMask is a + // new (10.10+), supported way to make the content view the full size of the + // window without covering the controls. + return base::mac::IsAtLeastOS10_11(); } } // namespace chrome
diff --git a/chrome/browser/ui/cocoa/framed_browser_window_unittest.mm b/chrome/browser/ui/cocoa/framed_browser_window_unittest.mm index a5d342e..0ee3491 100644 --- a/chrome/browser/ui/cocoa/framed_browser_window_unittest.mm +++ b/chrome/browser/ui/cocoa/framed_browser_window_unittest.mm
@@ -3,8 +3,10 @@ // found in the LICENSE file. #import <Cocoa/Cocoa.h> +#import <QuartzCore/QuartzCore.h> #include "base/debug/debugger.h" +#include "base/mac/scoped_cftyperef.h" #include "base/mac/scoped_nsobject.h" #include "chrome/app/chrome_command_ids.h" #import "chrome/browser/ui/cocoa/browser_window_controller.h" @@ -43,27 +45,13 @@ // Returns a canonical snapshot of the window. NSData* WindowContentsAsTIFF() { - [window_ display]; + [CATransaction flush]; - NSView* frameView = [window_ contentView]; - while ([frameView superview]) { - frameView = [frameView superview]; - } - - // Inset to mask off left and right edges which vary in HighDPI. - NSRect bounds = NSInsetRect([frameView bounds], 4, 0); - - // On 10.6, the grippy changes appearance slightly when painted the second - // time in a textured window. Since this test cares about the window title, - // cut off the bottom of the window. - bounds.size.height -= 40; - bounds.origin.y += 40; - - [frameView lockFocus]; - base::scoped_nsobject<NSBitmapImageRep> bitmap( - [[NSBitmapImageRep alloc] initWithFocusedViewRect:bounds]); - [frameView unlockFocus]; - + base::ScopedCFTypeRef<CGImageRef> cgImage(CGWindowListCreateImage( + CGRectNull, kCGWindowListOptionIncludingWindow, [window_ windowNumber], + kCGWindowImageBoundsIgnoreFraming)); + base::scoped_nsobject<NSImage> bitmap( + [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize]); return [bitmap TIFFRepresentation]; }
diff --git a/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm index b524fd3..dd6c1f6 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm +++ b/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
@@ -466,13 +466,10 @@ [visualEffectWrapperView addSubview:visualEffectView_]; - if (chrome::ShouldUseFullSizeContentView()) { - [[window contentView] addSubview:visualEffectWrapperView]; - } else { - [rootView addSubview:visualEffectWrapperView - positioned:NSWindowBelow - relativeTo:nil]; - } + [chrome::ShouldUseFullSizeContentView() ? [window contentView] : rootView + addSubview:visualEffectWrapperView + positioned:NSWindowBelow + relativeTo:nil]; // Make the |tabStripBackgroundView_| a child of the NSVisualEffectView. [tabStripBackgroundView_ setFrame:[visualEffectView_ bounds]];
diff --git a/chrome/browser/ui/views/frame/global_menu_bar_x11.cc b/chrome/browser/ui/views/frame/global_menu_bar_x11.cc index ef4d2f6..af197f3 100644 --- a/chrome/browser/ui/views/frame/global_menu_bar_x11.cc +++ b/chrome/browser/ui/views/frame/global_menu_bar_x11.cc
@@ -712,9 +712,10 @@ } void GlobalMenuBarX11::OnBrowserSetLastActive(Browser* browser) { - // Rebuild the avatar menu so that the items have the correct active state. - avatar_menu_->RebuildMenu(); + // Notify the avatar menu of the change and rebuild the menu. Note: The + // ActiveBrowserChanged() call needs to happen first to update the state. avatar_menu_->ActiveBrowserChanged(browser); + avatar_menu_->RebuildMenu(); RebuildProfilesMenu(); }
diff --git a/chrome/browser/ui/views/profiles/avatar_button.cc b/chrome/browser/ui/views/profiles/avatar_button.cc index 480d679..e5b7f53d 100644 --- a/chrome/browser/ui/views/profiles/avatar_button.cc +++ b/chrome/browser/ui/views/profiles/avatar_button.cc
@@ -173,7 +173,8 @@ error_controller_(this, profile), profile_(profile), profile_observer_(this), - button_style_(button_style) { + button_style_(button_style), + widget_observer_(this) { set_notify_action(CustomButton::NOTIFY_ON_PRESS); set_triggerable_event_flags(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON); @@ -330,8 +331,8 @@ LabelButton::NotifyClick(event); views::Widget* bubble_widget = ProfileChooserView::GetCurrentBubbleWidget(); - if (bubble_widget && !bubble_widget->HasObserver(this)) { - ProfileChooserView::GetCurrentBubbleWidget()->AddObserver(this); + if (bubble_widget && !widget_observer_.IsObserving(bubble_widget)) { + widget_observer_.Add(bubble_widget); AnimateInkDrop(views::InkDropState::ACTIVATED, ui::LocatedEvent::FromIfValid(&event)); } @@ -377,8 +378,9 @@ Update(); } -void AvatarButton::OnWidgetClosing(views::Widget* widget) { +void AvatarButton::OnWidgetDestroying(views::Widget* widget) { AnimateInkDrop(views::InkDropState::DEACTIVATED, nullptr); + widget_observer_.Remove(widget); } void AvatarButton::OnProfileShutdown() {
diff --git a/chrome/browser/ui/views/profiles/avatar_button.h b/chrome/browser/ui/views/profiles/avatar_button.h index 38acfa6..a9c599e 100644 --- a/chrome/browser/ui/views/profiles/avatar_button.h +++ b/chrome/browser/ui/views/profiles/avatar_button.h
@@ -62,7 +62,7 @@ const base::FilePath& profile_path) override; // views::WidgetObserver - void OnWidgetClosing(views::Widget* widget) override; + void OnWidgetDestroying(views::Widget* widget) override; // Called when |profile_| is shutting down. void OnProfileShutdown(); @@ -94,6 +94,8 @@ AvatarButtonStyle button_style_; + ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_; + DISALLOW_COPY_AND_ASSIGN(AvatarButton); };
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc index 91c527e..b3e6c3a2 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
@@ -22,6 +22,8 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_metrics.h" #include "chrome/browser/profiles/profiles_state.h" +#include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/themes/theme_service_factory.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/user_manager.h" #include "chrome/browser/ui/views/frame/browser_view.h" @@ -200,6 +202,27 @@ EXPECT_TRUE(signin_current_profile_button()->HasFocus()); } +// Make sure nothing bad happens when the browser theme changes while the +// ProfileChooserView is visible. Regression test for crbug.com/737470 +IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, ThemeChanged) { + ASSERT_TRUE(profiles::IsMultipleProfilesEnabled()); + ASSERT_NO_FATAL_FAILURE(OpenProfileChooserView(browser())); + + // The theme change destroys the avatar button. Make sure the profile chooser + // widget doesn't try to reference a stale observer during its shutdown. + InstallExtension(test_data_dir_.AppendASCII("theme"), 1); + content::WindowedNotificationObserver theme_change_observer( + chrome::NOTIFICATION_BROWSER_THEME_CHANGED, + content::Source<ThemeService>( + ThemeServiceFactory::GetForProfile(profile()))); + theme_change_observer.Wait(); + + EXPECT_TRUE(ProfileChooserView::IsShowing()); + current_profile_bubble()->GetWidget()->Close(); + base::RunLoop().RunUntilIdle(); + EXPECT_FALSE(ProfileChooserView::IsShowing()); +} + IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, ViewProfileUMA) { ASSERT_TRUE(profiles::IsMultipleProfilesEnabled());
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index 9e9a644b..2e1dd19 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -370,7 +370,7 @@ if (url.host() == chrome::kChromeUIQuotaInternalsHost) return &NewWebUI<QuotaInternalsUI>; if (url.host() == safe_browsing::kChromeUISafeBrowsingHost) - return &NewWebUI<safe_browsing::SafeBrowsingUI>; + return &NewWebUI<SafeBrowsingUI>; if (url.host() == chrome::kChromeUISignInInternalsHost) return &NewWebUI<SignInInternalsUI>; if (url.host_piece() == chrome::kChromeUISuggestionsHost)
diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/crashes_ui.cc index 730f03d6..684c4aa 100644 --- a/chrome/browser/ui/webui/crashes_ui.cc +++ b/chrome/browser/ui/webui/crashes_ui.cc
@@ -66,8 +66,7 @@ //////////////////////////////////////////////////////////////////////////////// // The handler for Javascript messages for the chrome://crashes/ page. -class CrashesDOMHandler : public WebUIMessageHandler, - public CrashUploadList::Delegate { +class CrashesDOMHandler : public WebUIMessageHandler { public: CrashesDOMHandler(); ~CrashesDOMHandler() override; @@ -75,10 +74,9 @@ // WebUIMessageHandler implementation. void RegisterMessages() override; - // CrashUploadList::Delegate implemenation. - void OnUploadListAvailable() override; - private: + void OnUploadListAvailable(); + // Asynchronously fetches the list of crashes. Called from JS. void HandleRequestCrashes(const base::ListValue* args); @@ -93,7 +91,7 @@ // Asynchronously requests a user triggered upload. Called from JS. void HandleRequestSingleCrashUpload(const base::ListValue* args); - scoped_refptr<CrashUploadList> upload_list_; + scoped_refptr<UploadList> upload_list_; bool list_available_; bool first_load_; @@ -102,15 +100,16 @@ CrashesDOMHandler::CrashesDOMHandler() : list_available_(false), first_load_(true) { - upload_list_ = CreateCrashUploadList(this); + upload_list_ = CreateCrashUploadList(); } CrashesDOMHandler::~CrashesDOMHandler() { - upload_list_->ClearDelegate(); + upload_list_->CancelCallback(); } void CrashesDOMHandler::RegisterMessages() { - upload_list_->LoadUploadListAsynchronously(); + upload_list_->Load(base::BindOnce(&CrashesDOMHandler::OnUploadListAvailable, + base::Unretained(this))); web_ui()->RegisterMessageCallback( crash::kCrashesUIRequestCrashList, base::Bind(&CrashesDOMHandler::HandleRequestCrashes, @@ -136,7 +135,8 @@ UpdateUI(); } else { list_available_ = false; - upload_list_->LoadUploadListAsynchronously(); + upload_list_->Load(base::BindOnce(&CrashesDOMHandler::OnUploadListAvailable, + base::Unretained(this))); } } @@ -215,7 +215,7 @@ IsMetricsReportingPolicyManaged()) { return; } - upload_list_->RequestSingleCrashUploadAsync(local_id); + upload_list_->RequestSingleUploadAsync(local_id); } } // namespace
diff --git a/chrome/browser/ui/webui/flash_ui.cc b/chrome/browser/ui/webui/flash_ui.cc index 451ca50..19b2ec96 100644 --- a/chrome/browser/ui/webui/flash_ui.cc +++ b/chrome/browser/ui/webui/flash_ui.cc
@@ -87,7 +87,6 @@ // The handler for JavaScript messages for the about:flags page. class FlashDOMHandler : public WebUIMessageHandler, - public CrashUploadList::Delegate, public content::GpuDataManagerObserver { public: FlashDOMHandler(); @@ -96,9 +95,6 @@ // WebUIMessageHandler implementation. void RegisterMessages() override; - // CrashUploadList::Delegate implementation. - void OnUploadListAvailable() override; - // GpuDataManager::Observer implementation. void OnGpuInfoUpdate() override; @@ -109,6 +105,9 @@ void OnGotPlugins(const std::vector<content::WebPluginInfo>& plugins); private: + // UploadList callback. + void OnUploadListAvailable(); + // Called when we think we might have enough information to return data back // to the page. void MaybeRespondToPage(); @@ -124,7 +123,7 @@ base::OneShotTimer timeout_; // Crash list. - scoped_refptr<CrashUploadList> upload_list_; + scoped_refptr<UploadList> upload_list_; // Whether the list of all crashes is available. bool crash_list_available_; @@ -146,9 +145,10 @@ has_gpu_info_(false), has_plugin_info_(false), weak_ptr_factory_(this) { - // Request Crash data asynchronously. - upload_list_ = CreateCrashUploadList(this); - upload_list_->LoadUploadListAsynchronously(); + // Request Crash data asynchronously. + upload_list_ = CreateCrashUploadList(); + upload_list_->Load(base::BindOnce(&FlashDOMHandler::OnUploadListAvailable, + weak_ptr_factory_.GetWeakPtr())); // Watch for changes in GPUInfo. GpuDataManager::GetInstance()->AddObserver(this); @@ -157,23 +157,23 @@ // GPU process has not run yet, this will trigger its launch. GpuDataManager::GetInstance()->RequestCompleteGpuInfoIfNeeded(); - // GPU access might not be allowed at all, which will cause us not to get a - // call back. + // GPU access might not be allowed at all, which will cause us not to + // get a call back. if (!GpuDataManager::GetInstance()->GpuAccessAllowed(NULL)) OnGpuInfoUpdate(); PluginService::GetInstance()->GetPlugins(base::Bind( &FlashDOMHandler::OnGotPlugins, weak_ptr_factory_.GetWeakPtr())); - // And lastly, we fire off a timer to make sure we never get stuck at the - // "Loading..." message. + // And lastly, we fire off a timer to make sure we never get stuck at + // the "Loading..." message. timeout_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kTimeout), this, &FlashDOMHandler::OnTimeout); } FlashDOMHandler::~FlashDOMHandler() { GpuDataManager::GetInstance()->RemoveObserver(this); - upload_list_->ClearDelegate(); + upload_list_->CancelCallback(); } void FlashDOMHandler::RegisterMessages() { @@ -303,10 +303,10 @@ bool crash_reporting_enabled = ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(); if (crash_reporting_enabled) { - std::vector<CrashUploadList::UploadInfo> crashes; + std::vector<UploadList::UploadInfo> crashes; upload_list_->GetUploads(10, &crashes); - for (std::vector<CrashUploadList::UploadInfo>::iterator i = crashes.begin(); + for (std::vector<UploadList::UploadInfo>::iterator i = crashes.begin(); i != crashes.end(); ++i) { base::string16 crash_string(ASCIIToUTF16(i->upload_id)); crash_string += ASCIIToUTF16(" ");
diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc index 6e712e0..c6d37bb 100644 --- a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc +++ b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
@@ -495,8 +495,8 @@ supervised_user_error_page::DEFAULT; std::string reason_string; if (net::GetValueForKeyInQuery(url, "reason", &reason_string)) { - if (reason_string == "safe_sites") { - reason = supervised_user_error_page::BLACKLIST; + if (reason_string == "safe_sites" && is_child_account) { + reason = supervised_user_error_page::ASYNC_CHECKER; } else if (reason_string == "manual") { reason = supervised_user_error_page::MANUAL; } else if (reason_string == "not_signed_in") {
diff --git a/chrome/browser/ui/webui/media/webrtc_logs_ui.cc b/chrome/browser/ui/webui/media/webrtc_logs_ui.cc index 5a3355f..70e7060 100644 --- a/chrome/browser/ui/webui/media/webrtc_logs_ui.cc +++ b/chrome/browser/ui/webui/media/webrtc_logs_ui.cc
@@ -76,8 +76,7 @@ //////////////////////////////////////////////////////////////////////////////// // The handler for Javascript messages for the chrome://webrtc-logs/ page. -class WebRtcLogsDOMHandler : public WebUIMessageHandler, - public UploadList::Delegate { +class WebRtcLogsDOMHandler : public WebUIMessageHandler { public: explicit WebRtcLogsDOMHandler(Profile* profile); ~WebRtcLogsDOMHandler() override; @@ -85,10 +84,9 @@ // WebUIMessageHandler implementation. void RegisterMessages() override; - // UploadList::Delegate implemenation. - void OnUploadListAvailable() override; - private: + void OnUploadListAvailable(); + // Asynchronously fetches the list of upload WebRTC logs. Called from JS. void HandleRequestWebRtcLogs(const base::ListValue* args); @@ -116,15 +114,16 @@ WebRtcLogList::GetWebRtcLogDirectoryForProfile(profile->GetPath())), list_available_(false), js_request_pending_(false) { - upload_list_ = WebRtcLogList::CreateWebRtcLogList(this, profile); + upload_list_ = WebRtcLogList::CreateWebRtcLogList(profile); } WebRtcLogsDOMHandler::~WebRtcLogsDOMHandler() { - upload_list_->ClearDelegate(); + upload_list_->CancelCallback(); } void WebRtcLogsDOMHandler::RegisterMessages() { - upload_list_->LoadUploadListAsynchronously(); + upload_list_->Load(base::BindOnce( + &WebRtcLogsDOMHandler::OnUploadListAvailable, base::Unretained(this))); web_ui()->RegisterMessageCallback("requestWebRtcLogsList", base::Bind(&WebRtcLogsDOMHandler::HandleRequestWebRtcLogs,
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn new file mode 100644 index 0000000..4ec50df --- /dev/null +++ b/chrome/browser/vr/BUILD.gn
@@ -0,0 +1,156 @@ +# 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("//chrome/common/features.gni") +import("//device/vr/features/features.gni") +import("//testing/test.gni") + +if (is_android) { + import("//build/config/android/rules.gni") +} + +assert(enable_vr) + +static_library("vr_common") { + sources = [ + "animation.cc", + "animation.h", + "color_scheme.cc", + "color_scheme.h", + "easing.cc", + "easing.h", + "elements/button.cc", + "elements/button.h", + "elements/button_texture.cc", + "elements/button_texture.h", + "elements/close_button_texture.cc", + "elements/close_button_texture.h", + "elements/exclusive_screen_toast.cc", + "elements/exclusive_screen_toast.h", + "elements/exclusive_screen_toast_texture.cc", + "elements/exclusive_screen_toast_texture.h", + "elements/exit_prompt.cc", + "elements/exit_prompt.h", + "elements/exit_prompt_backplane.cc", + "elements/exit_prompt_backplane.h", + "elements/exit_prompt_texture.cc", + "elements/exit_prompt_texture.h", + "elements/exit_warning_texture.cc", + "elements/exit_warning_texture.h", + "elements/insecure_content_permanent_texture.cc", + "elements/insecure_content_permanent_texture.h", + "elements/insecure_content_transient_texture.cc", + "elements/insecure_content_transient_texture.h", + "elements/loading_indicator.cc", + "elements/loading_indicator.h", + "elements/loading_indicator_texture.cc", + "elements/loading_indicator_texture.h", + "elements/render_text_wrapper.cc", + "elements/render_text_wrapper.h", + "elements/screen_dimmer.cc", + "elements/screen_dimmer.h", + "elements/simple_textured_element.h", + "elements/splash_screen_icon.cc", + "elements/splash_screen_icon.h", + "elements/splash_screen_icon_texture.cc", + "elements/splash_screen_icon_texture.h", + "elements/system_indicator.cc", + "elements/system_indicator.h", + "elements/system_indicator_texture.cc", + "elements/system_indicator_texture.h", + "elements/textured_element.cc", + "elements/textured_element.h", + "elements/transience_manager.cc", + "elements/transience_manager.h", + "elements/transient_url_bar.cc", + "elements/transient_url_bar.h", + "elements/ui_element.cc", + "elements/ui_element.h", + "elements/ui_element_debug_id.h", + "elements/ui_texture.cc", + "elements/ui_texture.h", + "elements/url_bar.cc", + "elements/url_bar.h", + "elements/url_bar_texture.cc", + "elements/url_bar_texture.h", + "font_fallback.cc", + "font_fallback.h", + "fps_meter.cc", + "fps_meter.h", + "gltf_asset.cc", + "gltf_asset.h", + "gltf_parser.cc", + "gltf_parser.h", + "toolbar_helper.cc", + "toolbar_helper.h", + "toolbar_state.cc", + "toolbar_state.h", + "ui_browser_interface.h", + "ui_input_manager.cc", + "ui_input_manager.h", + "ui_interface.h", + "ui_scene.cc", + "ui_scene.h", + "ui_scene_manager.cc", + "ui_scene_manager.h", + "ui_unsupported_mode.h", + ] + + deps = [ + "//base", + "//cc/paint", + "//chrome/app:generated_resources", + "//components/security_state/core", + "//components/strings", + "//components/toolbar", + "//components/url_formatter", + "//components/vector_icons", + "//skia", + "//ui/base", + "//ui/display", + "//ui/gl", + "//ui/gl/init", + "//ui/vector_icons", + ] +} + +test("vr_common_unittests") { + sources = [ + "elements/close_button_texture_unittest.cc", + "elements/exit_prompt_unittest.cc", + "elements/transience_manager_unittest.cc", + "elements/ui_element_unittest.cc", + "elements/url_bar_texture_unittest.cc", + "fps_meter_unittest.cc", + "gltf_parser_unittest.cc", + "run_all_unittests.cc", + "test/paths.cc", + "test/paths.h", + "ui_scene_manager_unittest.cc", + "ui_scene_unittest.cc", + ] + + deps = [ + ":vr_common", + "//base/test:test_support", + "//components:components_tests_pak", + "//components/security_state/core", + "//components/toolbar:vector_icons", + "//skia", + "//testing/gmock", + "//testing/gtest", + "//ui/gfx:test_support", + "//ui/gfx/geometry", + "//ui/gl", + ] + + if (is_android) { + deps += [ "//ui/android:ui_java" ] + } + + data = [ + "test/data/", + "$root_out_dir/components_tests_resources.pak", + ] +}
diff --git a/chrome/browser/vr/OWNERS b/chrome/browser/vr/OWNERS new file mode 100644 index 0000000..f388bb38 --- /dev/null +++ b/chrome/browser/vr/OWNERS
@@ -0,0 +1,7 @@ +bajones@chromium.org +bshe@chromium.org +mthiesse@chromium.org +cjgrant@chromium.org +vollick@chromium.org + +# COMPONENT: UI>Browser>VR
diff --git a/chrome/browser/vr/PRESUBMIT.py b/chrome/browser/vr/PRESUBMIT.py new file mode 100644 index 0000000..69da4ae1 --- /dev/null +++ b/chrome/browser/vr/PRESUBMIT.py
@@ -0,0 +1,41 @@ +# 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. + +"""Presubmit script for changes affecting chrome/browser/vr + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +for more details about the presubmit API built into depot_tools. +""" + +import re + +# chrome/PRESUBMIT.py blocks several linters due to the infeasibility of +# enforcing them on a large codebase. Here we'll start by enforcing all +# linters, and add exclusions if necessary. +# +# Note that this list must be non-empty, or cpplint will use its default set of +# filters. +LINT_FILTERS = [ + '-build/include', +] + +VERBOSITY_LEVEL = 4 + +INCLUDE_CPP_FILES_ONLY = (r'.*\.(cc|h)$',) + +def _CheckChangeLintsClean(input_api, output_api): + sources = lambda x: input_api.FilterSourceFile( + x, white_list=INCLUDE_CPP_FILES_ONLY) + return input_api.canned_checks.CheckChangeLintsClean( + input_api, output_api, sources, LINT_FILTERS, VERBOSITY_LEVEL) + +def CheckChangeOnUpload(input_api, output_api): + results = [] + results.extend(_CheckChangeLintsClean(input_api, output_api)) + return results + +def CheckChangeOnCommit(input_api, output_api): + results = [] + results.extend(_CheckChangeLintsClean(input_api, output_api)) + return results
diff --git a/chrome/browser/android/vr_shell/animation.cc b/chrome/browser/vr/animation.cc similarity index 81% rename from chrome/browser/android/vr_shell/animation.cc rename to chrome/browser/vr/animation.cc index d193def6..53483a2 100644 --- a/chrome/browser/android/vr_shell/animation.cc +++ b/chrome/browser/vr/animation.cc
@@ -2,13 +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/android/vr_shell/animation.h" +#include "chrome/browser/vr/animation.h" #include <utility> -#include "chrome/browser/android/vr_shell/easing.h" +#include "chrome/browser/vr/easing.h" -namespace vr_shell { +namespace vr { Animation::Animation(int id, Property property, @@ -27,4 +27,4 @@ Animation::~Animation() {} -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/animation.h b/chrome/browser/vr/animation.h similarity index 84% rename from chrome/browser/android/vr_shell/animation.h rename to chrome/browser/vr/animation.h index db062bbc..9ab84b32 100644 --- a/chrome/browser/android/vr_shell/animation.h +++ b/chrome/browser/vr/animation.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_ANDROID_VR_SHELL_ANIMATION_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_ANIMATION_H_ +#ifndef CHROME_BROWSER_VR_ANIMATION_H_ +#define CHROME_BROWSER_VR_ANIMATION_H_ #include <memory> #include <vector> @@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/time/time.h" -namespace vr_shell { +namespace vr { namespace easing { class Easing; @@ -51,6 +51,6 @@ DISALLOW_COPY_AND_ASSIGN(Animation); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_ANIMATION_H_ +#endif // CHROME_BROWSER_VR_ANIMATION_H_
diff --git a/chrome/browser/android/vr_shell/color_scheme.cc b/chrome/browser/vr/color_scheme.cc similarity index 97% rename from chrome/browser/android/vr_shell/color_scheme.cc rename to chrome/browser/vr/color_scheme.cc index c65da25d..c55635f 100644 --- a/chrome/browser/android/vr_shell/color_scheme.cc +++ b/chrome/browser/vr/color_scheme.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/android/vr_shell/color_scheme.h" +#include "chrome/browser/vr/color_scheme.h" #include "ui/gfx/color_palette.h" -namespace vr_shell { +namespace vr { namespace { @@ -132,4 +132,4 @@ return kColorSchemes[static_cast<int>(mode)]; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/color_scheme.h b/chrome/browser/vr/color_scheme.h similarity index 91% rename from chrome/browser/android/vr_shell/color_scheme.h rename to chrome/browser/vr/color_scheme.h index ccefb8bb..afafcba 100644 --- a/chrome/browser/android/vr_shell/color_scheme.h +++ b/chrome/browser/vr/color_scheme.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_COLOR_SCHEME_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_COLOR_SCHEME_H_ +#ifndef CHROME_BROWSER_VR_COLOR_SCHEME_H_ +#define CHROME_BROWSER_VR_COLOR_SCHEME_H_ #include "third_party/skia/include/core/SkColor.h" -namespace vr_shell { +namespace vr { struct ColorScheme { enum Mode : int { @@ -83,6 +83,6 @@ SkColor splash_screen_background; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_COLOR_SCHEME_H_ +#endif // CHROME_BROWSER_VR_COLOR_SCHEME_H_
diff --git a/chrome/browser/android/vr_shell/easing.cc b/chrome/browser/vr/easing.cc similarity index 92% rename from chrome/browser/android/vr_shell/easing.cc rename to chrome/browser/vr/easing.cc index 137bcb5f..5e1c896 100644 --- a/chrome/browser/android/vr_shell/easing.cc +++ b/chrome/browser/vr/easing.cc
@@ -2,13 +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/android/vr_shell/easing.h" +#include "chrome/browser/vr/easing.h" #include <cmath> #include "base/logging.h" -namespace vr_shell { +namespace vr { namespace easing { double Easing::CalculateValue(double input) { @@ -47,4 +47,4 @@ } } // namespace easing -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/easing.h b/chrome/browser/vr/easing.h similarity index 90% rename from chrome/browser/android/vr_shell/easing.h rename to chrome/browser/vr/easing.h index 0698154..6278184d 100644 --- a/chrome/browser/android/vr_shell/easing.h +++ b/chrome/browser/vr/easing.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_ANDROID_VR_SHELL_EASING_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_EASING_H_ +#ifndef CHROME_BROWSER_VR_EASING_H_ +#define CHROME_BROWSER_VR_EASING_H_ #include "base/macros.h" #include "ui/gfx/geometry/cubic_bezier.h" -namespace vr_shell { +namespace vr { namespace easing { enum EasingType { @@ -91,6 +91,6 @@ }; } // namespace easing -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_EASING_H_ +#endif // CHROME_BROWSER_VR_EASING_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/button.cc b/chrome/browser/vr/elements/button.cc similarity index 88% rename from chrome/browser/android/vr_shell/ui_elements/button.cc rename to chrome/browser/vr/elements/button.cc index 0f300aa..3214e0c8 100644 --- a/chrome/browser/android/vr_shell/ui_elements/button.cc +++ b/chrome/browser/vr/elements/button.cc
@@ -2,13 +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/android/vr_shell/ui_elements/button.h" +#include "chrome/browser/vr/elements/button.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/button_texture.h" +#include "chrome/browser/vr/elements/button_texture.h" #include "ui/gfx/geometry/point_f.h" -namespace vr_shell { +namespace vr { Button::Button(base::Callback<void()> click_handler, std::unique_ptr<ButtonTexture> texture) @@ -60,4 +60,4 @@ UpdateTexture(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/button.h b/chrome/browser/vr/elements/button.h similarity index 76% rename from chrome/browser/android/vr_shell/ui_elements/button.h rename to chrome/browser/vr/elements/button.h index 923c6e5..e16d68d3 100644 --- a/chrome/browser/android/vr_shell/ui_elements/button.h +++ b/chrome/browser/vr/elements/button.h
@@ -2,20 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_BUTTON_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_BUTTON_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_BUTTON_H_ +#define CHROME_BROWSER_VR_ELEMENTS_BUTTON_H_ #include <memory> #include "base/callback.h" #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" namespace gfx { class PointF; -} // gfx +} // namespace gfx -namespace vr_shell { +namespace vr { class ButtonTexture; @@ -43,6 +43,6 @@ DISALLOW_COPY_AND_ASSIGN(Button); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_BUTTON_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_BUTTON_H_
diff --git a/chrome/browser/android/vr_shell/textures/button_texture.cc b/chrome/browser/vr/elements/button_texture.cc similarity index 82% rename from chrome/browser/android/vr_shell/textures/button_texture.cc rename to chrome/browser/vr/elements/button_texture.cc index 3d3ff690..cb63abb 100644 --- a/chrome/browser/android/vr_shell/textures/button_texture.cc +++ b/chrome/browser/vr/elements/button_texture.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/android/vr_shell/textures/button_texture.h" +#include "chrome/browser/vr/elements/button_texture.h" -namespace vr_shell { +namespace vr { ButtonTexture::ButtonTexture() = default; @@ -26,4 +26,4 @@ hovered_ = hovered; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/button_texture.h b/chrome/browser/vr/elements/button_texture.h similarity index 62% rename from chrome/browser/android/vr_shell/textures/button_texture.h rename to chrome/browser/vr/elements/button_texture.h index 806c02d9..de10ce9 100644 --- a/chrome/browser/android/vr_shell/textures/button_texture.h +++ b/chrome/browser/vr/elements/button_texture.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_BUTTON_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_BUTTON_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_BUTTON_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_BUTTON_TEXTURE_H_ -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { class ButtonTexture : public UiTexture { public: @@ -26,6 +26,6 @@ bool hovered_ = false; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_BUTTON_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_BUTTON_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/textures/close_button_texture.cc b/chrome/browser/vr/elements/close_button_texture.cc similarity index 89% rename from chrome/browser/android/vr_shell/textures/close_button_texture.cc rename to chrome/browser/vr/elements/close_button_texture.cc index 7b57e21..1625b58 100644 --- a/chrome/browser/android/vr_shell/textures/close_button_texture.cc +++ b/chrome/browser/vr/elements/close_button_texture.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/android/vr_shell/textures/close_button_texture.h" +#include "chrome/browser/vr/elements/close_button_texture.h" #include "cc/paint/skia_paint_canvas.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" -#include "chrome/browser/android/vr_shell/ui_elements/button.h" +#include "chrome/browser/vr/color_scheme.h" +#include "chrome/browser/vr/elements/button.h" #include "ui/gfx/canvas.h" #include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/rect.h" @@ -15,7 +15,7 @@ #include "ui/gfx/vector_icon_types.h" #include "ui/vector_icons/vector_icons.h" -namespace vr_shell { +namespace vr { namespace { @@ -65,4 +65,4 @@ return (point - gfx::PointF(0.5, 0.5)).LengthSquared() < 0.25; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/close_button_texture.h b/chrome/browser/vr/elements/close_button_texture.h similarity index 64% rename from chrome/browser/android/vr_shell/textures/close_button_texture.h rename to chrome/browser/vr/elements/close_button_texture.h index 4bd4a0b..fd54f86 100644 --- a/chrome/browser/android/vr_shell/textures/close_button_texture.h +++ b/chrome/browser/vr/elements/close_button_texture.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_CLOSE_BUTTON_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_CLOSE_BUTTON_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_CLOSE_BUTTON_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_CLOSE_BUTTON_TEXTURE_H_ -#include "chrome/browser/android/vr_shell/textures/button_texture.h" +#include "chrome/browser/vr/elements/button_texture.h" namespace gfx { class PointF; } // namespace gfx -namespace vr_shell { +namespace vr { class CloseButtonTexture : public ButtonTexture { public: @@ -27,6 +27,6 @@ gfx::SizeF size_; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_CLOSE_BUTTON_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_CLOSE_BUTTON_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/textures/close_button_texture_unittest.cc b/chrome/browser/vr/elements/close_button_texture_unittest.cc similarity index 86% rename from chrome/browser/android/vr_shell/textures/close_button_texture_unittest.cc rename to chrome/browser/vr/elements/close_button_texture_unittest.cc index ffbb73df..68c2588 100644 --- a/chrome/browser/android/vr_shell/textures/close_button_texture_unittest.cc +++ b/chrome/browser/vr/elements/close_button_texture_unittest.cc
@@ -2,13 +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/android/vr_shell/textures/close_button_texture.h" +#include "chrome/browser/vr/elements/close_button_texture.h" #include "base/memory/ptr_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/geometry/point_f.h" -namespace vr_shell { +namespace vr { TEST(CloseButtonTextureTest, HitTest) { auto button = base::MakeUnique<CloseButtonTexture>(); @@ -28,4 +28,4 @@ } } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.cc b/chrome/browser/vr/elements/exclusive_screen_toast.cc similarity index 74% rename from chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.cc rename to chrome/browser/vr/elements/exclusive_screen_toast.cc index 1cffe56..374de5e 100644 --- a/chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.cc +++ b/chrome/browser/vr/elements/exclusive_screen_toast.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/android/vr_shell/ui_elements/exclusive_screen_toast.h" +#include "chrome/browser/vr/elements/exclusive_screen_toast.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { ExclusiveScreenToast::ExclusiveScreenToast(int preferred_width, const base::TimeDelta& timeout) @@ -23,4 +23,4 @@ set_size({width, size().y(), 1}); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/vr/elements/exclusive_screen_toast.h b/chrome/browser/vr/elements/exclusive_screen_toast.h new file mode 100644 index 0000000..298d70cf --- /dev/null +++ b/chrome/browser/vr/elements/exclusive_screen_toast.h
@@ -0,0 +1,28 @@ +// 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 CHROME_BROWSER_VR_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_H_ +#define CHROME_BROWSER_VR_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_H_ + +#include "base/macros.h" +#include "chrome/browser/vr/elements/exclusive_screen_toast_texture.h" +#include "chrome/browser/vr/elements/simple_textured_element.h" + +namespace vr { + +class ExclusiveScreenToast + : public TransientSimpleTexturedElement<ExclusiveScreenToastTexture> { + public: + ExclusiveScreenToast(int preferred_width, const base::TimeDelta& timeout); + ~ExclusiveScreenToast() override; + + private: + void UpdateElementSize() override; + + DISALLOW_COPY_AND_ASSIGN(ExclusiveScreenToast); +}; + +} // namespace vr + +#endif // CHROME_BROWSER_VR_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_H_
diff --git a/chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.cc b/chrome/browser/vr/elements/exclusive_screen_toast_texture.cc similarity index 94% rename from chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.cc rename to chrome/browser/vr/elements/exclusive_screen_toast_texture.cc index 045fbb91..0b5379c 100644 --- a/chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.cc +++ b/chrome/browser/vr/elements/exclusive_screen_toast_texture.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/android/vr_shell/textures/exclusive_screen_toast_texture.h" +#include "chrome/browser/vr/elements/exclusive_screen_toast_texture.h" #include "cc/paint/skia_paint_canvas.h" #include "chrome/grit/generated_resources.h" @@ -13,7 +13,7 @@ #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/render_text.h" -namespace vr_shell { +namespace vr { namespace { @@ -75,4 +75,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.h b/chrome/browser/vr/elements/exclusive_screen_toast_texture.h similarity index 62% rename from chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.h rename to chrome/browser/vr/elements/exclusive_screen_toast_texture.h index 6f7a49cc..0cafe33 100644 --- a/chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.h +++ b/chrome/browser/vr/elements/exclusive_screen_toast_texture.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_ANDROID_VR_SHELL_TEXTURES_EXCLUSIVE_SCREEN_TOAST_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXCLUSIVE_SCREEN_TOAST_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { class ExclusiveScreenToastTexture : public UiTexture { public: @@ -25,6 +25,6 @@ DISALLOW_COPY_AND_ASSIGN(ExclusiveScreenToastTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXCLUSIVE_SCREEN_TOAST_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_EXCLUSIVE_SCREEN_TOAST_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/exit_prompt.cc b/chrome/browser/vr/elements/exit_prompt.cc similarity index 92% rename from chrome/browser/android/vr_shell/ui_elements/exit_prompt.cc rename to chrome/browser/vr/elements/exit_prompt.cc index 909fd59..5d99491 100644 --- a/chrome/browser/android/vr_shell/ui_elements/exit_prompt.cc +++ b/chrome/browser/vr/elements/exit_prompt.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/android/vr_shell/ui_elements/exit_prompt.h" +#include "chrome/browser/vr/elements/exit_prompt.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/exit_prompt_texture.h" +#include "chrome/browser/vr/elements/exit_prompt_texture.h" -namespace vr_shell { +namespace vr { ExitPrompt::ExitPrompt(int preferred_width, const base::Callback<void()>& primary_button_callback, @@ -72,4 +72,4 @@ return texture_.get(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/exit_prompt.h b/chrome/browser/vr/elements/exit_prompt.h similarity index 78% rename from chrome/browser/android/vr_shell/ui_elements/exit_prompt.h rename to chrome/browser/vr/elements/exit_prompt.h index 51d44da7..982aebe 100644 --- a/chrome/browser/android/vr_shell/ui_elements/exit_prompt.h +++ b/chrome/browser/vr/elements/exit_prompt.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXIT_PROMPT_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXIT_PROMPT_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_H_ +#define CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_H_ #include <memory> #include "base/callback.h" #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" -namespace vr_shell { +namespace vr { class ExitPromptTexture; @@ -46,6 +46,6 @@ DISALLOW_COPY_AND_ASSIGN(ExitPrompt); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXIT_PROMPT_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.cc b/chrome/browser/vr/elements/exit_prompt_backplane.cc similarity index 86% rename from chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.cc rename to chrome/browser/vr/elements/exit_prompt_backplane.cc index 6dcd5a8..de9133e 100644 --- a/chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.cc +++ b/chrome/browser/vr/elements/exit_prompt_backplane.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/android/vr_shell/ui_elements/exit_prompt_backplane.h" +#include "chrome/browser/vr/elements/exit_prompt_backplane.h" #include "base/memory/ptr_util.h" -namespace vr_shell { +namespace vr { ExitPromptBackplane::ExitPromptBackplane( const base::Callback<void()>& click_callback) @@ -22,4 +22,4 @@ click_callback_.Run(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.h b/chrome/browser/vr/elements/exit_prompt_backplane.h similarity index 65% rename from chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.h rename to chrome/browser/vr/elements/exit_prompt_backplane.h index 8b9f7cb..d6aff604 100644 --- a/chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.h +++ b/chrome/browser/vr/elements/exit_prompt_backplane.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_ANDROID_VR_SHELL_UI_ELEMENTS_EXIT_PROMPT_BACKPLANE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXIT_PROMPT_BACKPLANE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_BACKPLANE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_BACKPLANE_H_ #include "base/callback.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" -namespace vr_shell { +namespace vr { // An invisible but hittable plane behind the exit prompt, to keep the reticle // roughly planar with the prompt when its near the prompt. @@ -25,6 +25,6 @@ DISALLOW_COPY_AND_ASSIGN(ExitPromptBackplane); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_EXIT_PROMPT_BACKPLANE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_BACKPLANE_H_
diff --git a/chrome/browser/android/vr_shell/textures/exit_prompt_texture.cc b/chrome/browser/vr/elements/exit_prompt_texture.cc similarity index 96% rename from chrome/browser/android/vr_shell/textures/exit_prompt_texture.cc rename to chrome/browser/vr/elements/exit_prompt_texture.cc index 52d59558..166c7c1 100644 --- a/chrome/browser/android/vr_shell/textures/exit_prompt_texture.cc +++ b/chrome/browser/vr/elements/exit_prompt_texture.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/android/vr_shell/textures/exit_prompt_texture.h" +#include "chrome/browser/vr/elements/exit_prompt_texture.h" #include "cc/paint/skia_paint_canvas.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" +#include "chrome/browser/vr/color_scheme.h" #include "chrome/grit/generated_resources.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -15,7 +15,7 @@ #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/render_text.h" -namespace vr_shell { +namespace vr { namespace { @@ -171,4 +171,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/exit_prompt_texture.h b/chrome/browser/vr/elements/exit_prompt_texture.h similarity index 80% rename from chrome/browser/android/vr_shell/textures/exit_prompt_texture.h rename to chrome/browser/vr/elements/exit_prompt_texture.h index 8a64040..55341f7 100644 --- a/chrome/browser/android/vr_shell/textures/exit_prompt_texture.h +++ b/chrome/browser/vr/elements/exit_prompt_texture.h
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXIT_PROMPT_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXIT_PROMPT_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" #include "ui/gfx/geometry/rect_f.h" namespace gfx { class PointF; } // namespace gfx -namespace vr_shell { +namespace vr { class ExitPromptTexture : public UiTexture { public: @@ -50,6 +50,6 @@ DISALLOW_COPY_AND_ASSIGN(ExitPromptTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXIT_PROMPT_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_EXIT_PROMPT_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/exit_prompt_unittest.cc b/chrome/browser/vr/elements/exit_prompt_unittest.cc similarity index 94% rename from chrome/browser/android/vr_shell/ui_elements/exit_prompt_unittest.cc rename to chrome/browser/vr/elements/exit_prompt_unittest.cc index 8d651168..e38036f 100644 --- a/chrome/browser/android/vr_shell/ui_elements/exit_prompt_unittest.cc +++ b/chrome/browser/vr/elements/exit_prompt_unittest.cc
@@ -2,19 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_elements/exit_prompt.h" +#include "chrome/browser/vr/elements/exit_prompt.h" #include "base/bind.h" #include "base/macros.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/exit_prompt_texture.h" +#include "chrome/browser/vr/elements/exit_prompt_texture.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/test/gfx_util.h" using ::testing::Return; -namespace vr_shell { +namespace vr { namespace { @@ -99,4 +99,4 @@ EXPECT_TRUE(prompt.secondary_button_pressed()); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/exit_warning_texture.cc b/chrome/browser/vr/elements/exit_warning_texture.cc similarity index 94% rename from chrome/browser/android/vr_shell/textures/exit_warning_texture.cc rename to chrome/browser/vr/elements/exit_warning_texture.cc index b74a3302..746430f4 100644 --- a/chrome/browser/android/vr_shell/textures/exit_warning_texture.cc +++ b/chrome/browser/vr/elements/exit_warning_texture.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/android/vr_shell/textures/exit_warning_texture.h" +#include "chrome/browser/vr/elements/exit_warning_texture.h" #include "cc/paint/skia_paint_canvas.h" #include "components/strings/grit/components_strings.h" @@ -16,7 +16,7 @@ #include "ui/gfx/vector_icon_types.h" #include "ui/vector_icons/vector_icons.h" -namespace vr_shell { +namespace vr { namespace { @@ -73,4 +73,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/exit_warning_texture.h b/chrome/browser/vr/elements/exit_warning_texture.h similarity index 63% rename from chrome/browser/android/vr_shell/textures/exit_warning_texture.h rename to chrome/browser/vr/elements/exit_warning_texture.h index 53dfc8e..9c4d60e 100644 --- a/chrome/browser/android/vr_shell/textures/exit_warning_texture.h +++ b/chrome/browser/vr/elements/exit_warning_texture.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_ANDROID_VR_SHELL_TEXTURES_EXIT_WARNING_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXIT_WARNING_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_EXIT_WARNING_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_EXIT_WARNING_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { class ExitWarningTexture : public UiTexture { public: @@ -25,6 +25,6 @@ DISALLOW_COPY_AND_ASSIGN(ExitWarningTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_EXIT_WARNING_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_EXIT_WARNING_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.cc b/chrome/browser/vr/elements/insecure_content_permanent_texture.cc similarity index 95% rename from chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.cc rename to chrome/browser/vr/elements/insecure_content_permanent_texture.cc index f43c061..6210b2c 100644 --- a/chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.cc +++ b/chrome/browser/vr/elements/insecure_content_permanent_texture.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/android/vr_shell/textures/insecure_content_permanent_texture.h" +#include "chrome/browser/vr/elements/insecure_content_permanent_texture.h" #include "cc/paint/skia_paint_canvas.h" #include "components/strings/grit/components_strings.h" @@ -16,7 +16,7 @@ #include "ui/gfx/vector_icon_types.h" #include "ui/vector_icons/vector_icons.h" -namespace vr_shell { +namespace vr { namespace { @@ -91,4 +91,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.h b/chrome/browser/vr/elements/insecure_content_permanent_texture.h similarity index 62% rename from chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.h rename to chrome/browser/vr/elements/insecure_content_permanent_texture.h index ae48322..cc4c9d47 100644 --- a/chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.h +++ b/chrome/browser/vr/elements/insecure_content_permanent_texture.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_ANDROID_VR_SHELL_TEXTURES_INSECURE_CONTENT_PERMANENT_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_INSECURE_CONTENT_PERMANENT_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_INSECURE_CONTENT_PERMANENT_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_INSECURE_CONTENT_PERMANENT_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { class InsecureContentPermanentTexture : public UiTexture { public: @@ -25,6 +25,6 @@ DISALLOW_COPY_AND_ASSIGN(InsecureContentPermanentTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_INSECURE_CONTENT_PERMANENT_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_INSECURE_CONTENT_PERMANENT_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.cc b/chrome/browser/vr/elements/insecure_content_transient_texture.cc similarity index 94% rename from chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.cc rename to chrome/browser/vr/elements/insecure_content_transient_texture.cc index ea82914..8008c7f 100644 --- a/chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.cc +++ b/chrome/browser/vr/elements/insecure_content_transient_texture.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/android/vr_shell/textures/insecure_content_transient_texture.h" +#include "chrome/browser/vr/elements/insecure_content_transient_texture.h" #include "cc/paint/skia_paint_canvas.h" #include "components/strings/grit/components_strings.h" @@ -16,7 +16,7 @@ #include "ui/gfx/vector_icon_types.h" #include "ui/vector_icons/vector_icons.h" -namespace vr_shell { +namespace vr { namespace { @@ -73,4 +73,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.h b/chrome/browser/vr/elements/insecure_content_transient_texture.h similarity index 62% rename from chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.h rename to chrome/browser/vr/elements/insecure_content_transient_texture.h index 8cabcab..1179fba 100644 --- a/chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.h +++ b/chrome/browser/vr/elements/insecure_content_transient_texture.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_ANDROID_VR_SHELL_TEXTURES_INSECURE_CONTENT_TRANSIENT_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_INSECURE_CONTENT_TRANSIENT_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_INSECURE_CONTENT_TRANSIENT_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_INSECURE_CONTENT_TRANSIENT_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { class InsecureContentTransientTexture : public UiTexture { public: @@ -25,6 +25,6 @@ DISALLOW_COPY_AND_ASSIGN(InsecureContentTransientTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_INSECURE_CONTENT_TRANSIENT_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_INSECURE_CONTENT_TRANSIENT_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/loading_indicator.cc b/chrome/browser/vr/elements/loading_indicator.cc similarity index 87% rename from chrome/browser/android/vr_shell/ui_elements/loading_indicator.cc rename to chrome/browser/vr/elements/loading_indicator.cc index c255fae..8a14088 100644 --- a/chrome/browser/android/vr_shell/ui_elements/loading_indicator.cc +++ b/chrome/browser/vr/elements/loading_indicator.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/android/vr_shell/ui_elements/loading_indicator.h" +#include "chrome/browser/vr/elements/loading_indicator.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/loading_indicator_texture.h" +#include "chrome/browser/vr/elements/loading_indicator_texture.h" -namespace vr_shell { +namespace vr { namespace { @@ -61,4 +61,4 @@ set_visible(enabled_ && (loading_ || visibility_timer_.IsRunning())); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/loading_indicator.h b/chrome/browser/vr/elements/loading_indicator.h similarity index 70% rename from chrome/browser/android/vr_shell/ui_elements/loading_indicator.h rename to chrome/browser/vr/elements/loading_indicator.h index 31c3c50..7d4b58f 100644 --- a/chrome/browser/android/vr_shell/ui_elements/loading_indicator.h +++ b/chrome/browser/vr/elements/loading_indicator.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_LOADING_INDICATOR_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_LOADING_INDICATOR_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_LOADING_INDICATOR_H_ +#define CHROME_BROWSER_VR_ELEMENTS_LOADING_INDICATOR_H_ #include <memory> #include "base/macros.h" #include "base/timer/timer.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" -namespace vr_shell { +namespace vr { class LoadingIndicatorTexture; @@ -39,6 +39,6 @@ DISALLOW_COPY_AND_ASSIGN(LoadingIndicator); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_LOADING_INDICATOR_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_LOADING_INDICATOR_H_
diff --git a/chrome/browser/android/vr_shell/textures/loading_indicator_texture.cc b/chrome/browser/vr/elements/loading_indicator_texture.cc similarity index 93% rename from chrome/browser/android/vr_shell/textures/loading_indicator_texture.cc rename to chrome/browser/vr/elements/loading_indicator_texture.cc index bdc78793..84527437 100644 --- a/chrome/browser/android/vr_shell/textures/loading_indicator_texture.cc +++ b/chrome/browser/vr/elements/loading_indicator_texture.cc
@@ -2,13 +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/android/vr_shell/textures/loading_indicator_texture.h" +#include "chrome/browser/vr/elements/loading_indicator_texture.h" #include "base/logging.h" #include "cc/paint/skia_paint_canvas.h" #include "third_party/skia/include/core/SkCanvas.h" -namespace vr_shell { +namespace vr { namespace { @@ -69,4 +69,4 @@ canvas->restore(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/loading_indicator_texture.h b/chrome/browser/vr/elements/loading_indicator_texture.h similarity index 66% rename from chrome/browser/android/vr_shell/textures/loading_indicator_texture.h rename to chrome/browser/vr/elements/loading_indicator_texture.h index 2f0a8f3..39302e4 100644 --- a/chrome/browser/android/vr_shell/textures/loading_indicator_texture.h +++ b/chrome/browser/vr/elements/loading_indicator_texture.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_ANDROID_VR_SHELL_TEXTURES_LOADING_INDICATOR_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_LOADING_INDICATOR_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_LOADING_INDICATOR_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_LOADING_INDICATOR_TEXTURE_H_ -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" #include "ui/gfx/geometry/size.h" class SkCanvas; -namespace vr_shell { +namespace vr { class LoadingIndicatorTexture : public UiTexture { public: @@ -29,6 +29,6 @@ float progress_ = 0; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_LOADING_INDICATOR_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_LOADING_INDICATOR_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/textures/render_text_wrapper.cc b/chrome/browser/vr/elements/render_text_wrapper.cc similarity index 88% rename from chrome/browser/android/vr_shell/textures/render_text_wrapper.cc rename to chrome/browser/vr/elements/render_text_wrapper.cc index 4576bed4..99102517 100644 --- a/chrome/browser/android/vr_shell/textures/render_text_wrapper.cc +++ b/chrome/browser/vr/elements/render_text_wrapper.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/android/vr_shell/textures/render_text_wrapper.h" +#include "chrome/browser/vr/elements/render_text_wrapper.h" -namespace vr_shell { +namespace vr { RenderTextWrapper::RenderTextWrapper(gfx::RenderText* render_text) : render_text_(render_text) {} @@ -33,4 +33,4 @@ render_text_->set_strike_thickness_factor(factor); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/render_text_wrapper.h b/chrome/browser/vr/elements/render_text_wrapper.h similarity index 77% rename from chrome/browser/android/vr_shell/textures/render_text_wrapper.h rename to chrome/browser/vr/elements/render_text_wrapper.h index c959f4d6..11da3df2 100644 --- a/chrome/browser/android/vr_shell/textures/render_text_wrapper.h +++ b/chrome/browser/vr/elements/render_text_wrapper.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_ANDROID_VR_SHELL_TEXTURES_RENDER_TEXT_WRAPPER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_RENDER_TEXT_WRAPPER_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_RENDER_TEXT_WRAPPER_H_ +#define CHROME_BROWSER_VR_ELEMENTS_RENDER_TEXT_WRAPPER_H_ #include "base/macros.h" #include "ui/gfx/render_text.h" -namespace vr_shell { +namespace vr { // A minimal, mockable wrapper around gfx::RenderText, to facilitate testing of // RenderText users. @@ -33,6 +33,6 @@ DISALLOW_COPY_AND_ASSIGN(RenderTextWrapper); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_RENDER_TEXT_WRAPPER_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_RENDER_TEXT_WRAPPER_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/screen_dimmer.cc b/chrome/browser/vr/elements/screen_dimmer.cc similarity index 79% rename from chrome/browser/android/vr_shell/ui_elements/screen_dimmer.cc rename to chrome/browser/vr/elements/screen_dimmer.cc index 9e1a034..facc7b5 100644 --- a/chrome/browser/android/vr_shell/ui_elements/screen_dimmer.cc +++ b/chrome/browser/vr/elements/screen_dimmer.cc
@@ -2,15 +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/android/vr_shell/ui_elements/screen_dimmer.h" +#include "chrome/browser/vr/elements/screen_dimmer.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" -#include "chrome/browser/android/vr_shell/ui_element_renderer.h" +#include "chrome/browser/vr/color_scheme.h" +#include "chrome/browser/vr/ui_element_renderer.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/geometry/quaternion.h" #include "ui/gfx/transform.h" -namespace vr_shell { +namespace vr { namespace { static const float kDimmerOpacity = 0.9f; @@ -36,4 +36,4 @@ color_scheme.dimmer_inner, kDimmerOpacity); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/screen_dimmer.h b/chrome/browser/vr/elements/screen_dimmer.h similarity index 60% rename from chrome/browser/android/vr_shell/ui_elements/screen_dimmer.h rename to chrome/browser/vr/elements/screen_dimmer.h index 47dbac1..dd1112a 100644 --- a/chrome/browser/android/vr_shell/ui_elements/screen_dimmer.h +++ b/chrome/browser/vr/elements/screen_dimmer.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_ANDROID_VR_SHELL_UI_ELEMENTS_SCREEN_DIMMER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SCREEN_DIMMER_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_SCREEN_DIMMER_H_ +#define CHROME_BROWSER_VR_ELEMENTS_SCREEN_DIMMER_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" -namespace vr_shell { +namespace vr { class ScreenDimmer : public UiElement { public: @@ -24,6 +24,6 @@ DISALLOW_COPY_AND_ASSIGN(ScreenDimmer); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SCREEN_DIMMER_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_SCREEN_DIMMER_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/simple_textured_element.h b/chrome/browser/vr/elements/simple_textured_element.h similarity index 68% rename from chrome/browser/android/vr_shell/ui_elements/simple_textured_element.h rename to chrome/browser/vr/elements/simple_textured_element.h index c4467c9..9fe2fed 100644 --- a/chrome/browser/android/vr_shell/ui_elements/simple_textured_element.h +++ b/chrome/browser/vr/elements/simple_textured_element.h
@@ -2,22 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SIMPLE_TEXTURED_ELEMENT_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SIMPLE_TEXTURED_ELEMENT_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_SIMPLE_TEXTURED_ELEMENT_H_ +#define CHROME_BROWSER_VR_ELEMENTS_SIMPLE_TEXTURED_ELEMENT_H_ #include <memory> #include "base/macros.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/exclusive_screen_toast_texture.h" -#include "chrome/browser/android/vr_shell/textures/exit_warning_texture.h" -#include "chrome/browser/android/vr_shell/textures/insecure_content_permanent_texture.h" -#include "chrome/browser/android/vr_shell/textures/insecure_content_transient_texture.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" -#include "chrome/browser/android/vr_shell/ui_elements/transience_manager.h" +#include "chrome/browser/vr/elements/exclusive_screen_toast_texture.h" +#include "chrome/browser/vr/elements/exit_warning_texture.h" +#include "chrome/browser/vr/elements/insecure_content_permanent_texture.h" +#include "chrome/browser/vr/elements/insecure_content_transient_texture.h" +#include "chrome/browser/vr/elements/textured_element.h" +#include "chrome/browser/vr/elements/transience_manager.h" +#include "chrome/browser/vr/elements/ui_texture.h" -namespace vr_shell { +namespace vr { template <class T> class SimpleTexturedElement : public TexturedElement { @@ -64,6 +64,6 @@ typedef TransientSimpleTexturedElement<InsecureContentTransientTexture> TransientSecurityWarning; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SIMPLE_TEXTURED_ELEMENT_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_SIMPLE_TEXTURED_ELEMENT_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.cc b/chrome/browser/vr/elements/splash_screen_icon.cc similarity index 75% rename from chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.cc rename to chrome/browser/vr/elements/splash_screen_icon.cc index dc67480..037fb44 100644 --- a/chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.cc +++ b/chrome/browser/vr/elements/splash_screen_icon.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/android/vr_shell/ui_elements/splash_screen_icon.h" +#include "chrome/browser/vr/elements/splash_screen_icon.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.h" +#include "chrome/browser/vr/elements/splash_screen_icon_texture.h" -namespace vr_shell { +namespace vr { SplashScreenIcon::SplashScreenIcon(int preferred_width) : TexturedElement(preferred_width), @@ -24,4 +24,4 @@ return texture_.get(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.h b/chrome/browser/vr/elements/splash_screen_icon.h similarity index 64% rename from chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.h rename to chrome/browser/vr/elements/splash_screen_icon.h index feaf6be..3de9af27e 100644 --- a/chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.h +++ b/chrome/browser/vr/elements/splash_screen_icon.h
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SPLASH_SCREEN_ICON_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SPLASH_SCREEN_ICON_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_SPLASH_SCREEN_ICON_H_ +#define CHROME_BROWSER_VR_ELEMENTS_SPLASH_SCREEN_ICON_H_ #include <memory> #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" class SkBitmap; -namespace vr_shell { +namespace vr { class SplashScreenIconTexture; @@ -31,6 +31,6 @@ DISALLOW_COPY_AND_ASSIGN(SplashScreenIcon); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SPLASH_SCREEN_ICON_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_SPLASH_SCREEN_ICON_H_
diff --git a/chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.cc b/chrome/browser/vr/elements/splash_screen_icon_texture.cc similarity index 88% rename from chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.cc rename to chrome/browser/vr/elements/splash_screen_icon_texture.cc index 6bc62a4..8cee70a5 100644 --- a/chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.cc +++ b/chrome/browser/vr/elements/splash_screen_icon_texture.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/android/vr_shell/textures/splash_screen_icon_texture.h" +#include "chrome/browser/vr/elements/splash_screen_icon_texture.h" #include "ui/gfx/canvas.h" -namespace vr_shell { +namespace vr { SplashScreenIconTexture::SplashScreenIconTexture() = default; @@ -35,4 +35,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.h b/chrome/browser/vr/elements/splash_screen_icon_texture.h similarity index 67% rename from chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.h rename to chrome/browser/vr/elements/splash_screen_icon_texture.h index d2a4959..df9f984 100644 --- a/chrome/browser/android/vr_shell/textures/splash_screen_icon_texture.h +++ b/chrome/browser/vr/elements/splash_screen_icon_texture.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_ANDROID_VR_SHELL_TEXTURES_SPLASH_SCREEN_ICON_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_SPLASH_SCREEN_ICON_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_SPLASH_SCREEN_ICON_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_SPLASH_SCREEN_ICON_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" #include "third_party/skia/include/core/SkImage.h" -namespace vr_shell { +namespace vr { class SplashScreenIconTexture : public UiTexture { public: @@ -29,6 +29,6 @@ DISALLOW_COPY_AND_ASSIGN(SplashScreenIconTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_SPLASH_SCREEN_ICON_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_SPLASH_SCREEN_ICON_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/system_indicator.cc b/chrome/browser/vr/elements/system_indicator.cc similarity index 83% rename from chrome/browser/android/vr_shell/ui_elements/system_indicator.cc rename to chrome/browser/vr/elements/system_indicator.cc index bc3a53a..d5691dc 100644 --- a/chrome/browser/android/vr_shell/ui_elements/system_indicator.cc +++ b/chrome/browser/vr/elements/system_indicator.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/android/vr_shell/ui_elements/system_indicator.h" +#include "chrome/browser/vr/elements/system_indicator.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/system_indicator_texture.h" +#include "chrome/browser/vr/elements/system_indicator_texture.h" -namespace vr_shell { +namespace vr { SystemIndicator::SystemIndicator(int preferred_width, float height_meters, @@ -33,4 +33,4 @@ return texture_.get(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/system_indicator.h b/chrome/browser/vr/elements/system_indicator.h similarity index 69% rename from chrome/browser/android/vr_shell/ui_elements/system_indicator.h rename to chrome/browser/vr/elements/system_indicator.h index d103abb..8440765e 100644 --- a/chrome/browser/android/vr_shell/ui_elements/system_indicator.h +++ b/chrome/browser/vr/elements/system_indicator.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SYSTEM_INDICATOR_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SYSTEM_INDICATOR_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_SYSTEM_INDICATOR_H_ +#define CHROME_BROWSER_VR_ELEMENTS_SYSTEM_INDICATOR_H_ #include <memory> #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" #include "ui/gfx/vector_icon_types.h" -namespace vr_shell { +namespace vr { class UiTexture; @@ -34,6 +34,6 @@ DISALLOW_COPY_AND_ASSIGN(SystemIndicator); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_SYSTEM_INDICATOR_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_SYSTEM_INDICATOR_H_
diff --git a/chrome/browser/android/vr_shell/textures/system_indicator_texture.cc b/chrome/browser/vr/elements/system_indicator_texture.cc similarity index 96% rename from chrome/browser/android/vr_shell/textures/system_indicator_texture.cc rename to chrome/browser/vr/elements/system_indicator_texture.cc index d87c6b94..b92622a 100644 --- a/chrome/browser/android/vr_shell/textures/system_indicator_texture.cc +++ b/chrome/browser/vr/elements/system_indicator_texture.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/android/vr_shell/textures/system_indicator_texture.h" +#include "chrome/browser/vr/elements/system_indicator_texture.h" #include "base/strings/utf_string_conversions.h" #include "cc/paint/skia_paint_canvas.h" @@ -15,7 +15,7 @@ #include "ui/gfx/render_text.h" #include "ui/gfx/vector_icon_types.h" -namespace vr_shell { +namespace vr { namespace { @@ -109,4 +109,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/system_indicator_texture.h b/chrome/browser/vr/elements/system_indicator_texture.h similarity index 69% rename from chrome/browser/android/vr_shell/textures/system_indicator_texture.h rename to chrome/browser/vr/elements/system_indicator_texture.h index ab03721..ea6fd86 100644 --- a/chrome/browser/android/vr_shell/textures/system_indicator_texture.h +++ b/chrome/browser/vr/elements/system_indicator_texture.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_ANDROID_VR_SHELL_TEXTURES_SYSTEM_INDICATOR_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_SYSTEM_INDICATOR_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_SYSTEM_INDICATOR_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_SYSTEM_INDICATOR_TEXTURE_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" #include "ui/gfx/vector_icon_types.h" -namespace vr_shell { +namespace vr { class SystemIndicatorTexture : public UiTexture { public: @@ -30,6 +30,6 @@ DISALLOW_COPY_AND_ASSIGN(SystemIndicatorTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_SYSTEM_INDICATOR_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_SYSTEM_INDICATOR_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/textured_element.cc b/chrome/browser/vr/elements/textured_element.cc similarity index 91% rename from chrome/browser/android/vr_shell/ui_elements/textured_element.cc rename to chrome/browser/vr/elements/textured_element.cc index afe2ae8..f15fcb4 100644 --- a/chrome/browser/android/vr_shell/ui_elements/textured_element.cc +++ b/chrome/browser/vr/elements/textured_element.cc
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" +#include "chrome/browser/vr/elements/textured_element.h" #include "base/trace_event/trace_event.h" #include "cc/paint/skia_paint_canvas.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" -#include "chrome/browser/android/vr_shell/ui_element_renderer.h" +#include "chrome/browser/vr/elements/ui_texture.h" +#include "chrome/browser/vr/ui_element_renderer.h" #include "third_party/skia/include/core/SkSurface.h" #include "ui/gfx/geometry/rect_f.h" -namespace vr_shell { +namespace vr { TexturedElement::TexturedElement(int maximum_width) : texture_handle_(-1), maximum_width_(maximum_width) {} @@ -82,4 +82,4 @@ UpdateTexture(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/textured_element.h b/chrome/browser/vr/elements/textured_element.h similarity index 78% rename from chrome/browser/android/vr_shell/ui_elements/textured_element.h rename to chrome/browser/vr/elements/textured_element.h index 848fe425..97b14e5 100644 --- a/chrome/browser/android/vr_shell/ui_elements/textured_element.h +++ b/chrome/browser/vr/elements/textured_element.h
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TEXTURED_ELEMENT_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TEXTURED_ELEMENT_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_TEXTURED_ELEMENT_H_ +#define CHROME_BROWSER_VR_ELEMENTS_TEXTURED_ELEMENT_H_ #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" #include "ui/gfx/geometry/size.h" #include "ui/gl/gl_bindings.h" class SkSurface; -namespace vr_shell { +namespace vr { class UiTexture; @@ -50,6 +50,6 @@ DISALLOW_COPY_AND_ASSIGN(TexturedElement); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TEXTURED_ELEMENT_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_TEXTURED_ELEMENT_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/transience_manager.cc b/chrome/browser/vr/elements/transience_manager.cc similarity index 90% rename from chrome/browser/android/vr_shell/ui_elements/transience_manager.cc rename to chrome/browser/vr/elements/transience_manager.cc index 94ce01e..40d1ff5a 100644 --- a/chrome/browser/android/vr_shell/ui_elements/transience_manager.cc +++ b/chrome/browser/vr/elements/transience_manager.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/android/vr_shell/ui_elements/transience_manager.h" +#include "chrome/browser/vr/elements/transience_manager.h" -namespace vr_shell { +namespace vr { TransienceManager::TransienceManager(UiElement* element, const base::TimeDelta& timeout) @@ -49,4 +49,4 @@ element_->set_visible(false); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/transience_manager.h b/chrome/browser/vr/elements/transience_manager.h similarity index 66% rename from chrome/browser/android/vr_shell/ui_elements/transience_manager.h rename to chrome/browser/vr/elements/transience_manager.h index b248f479..0d5434c36c 100644 --- a/chrome/browser/android/vr_shell/ui_elements/transience_manager.h +++ b/chrome/browser/vr/elements/transience_manager.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TRANSIENCE_MANAGER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TRANSIENCE_MANAGER_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_TRANSIENCE_MANAGER_H_ +#define CHROME_BROWSER_VR_ELEMENTS_TRANSIENCE_MANAGER_H_ #include <memory> #include "base/macros.h" #include "base/timer/timer.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" -namespace vr_shell { +namespace vr { class TransienceManager { public: @@ -32,6 +32,6 @@ base::OneShotTimer visibility_timer_; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TRANSIENCE_MANAGER_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_TRANSIENCE_MANAGER_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/transience_manager_unittest.cc b/chrome/browser/vr/elements/transience_manager_unittest.cc similarity index 90% rename from chrome/browser/android/vr_shell/ui_elements/transience_manager_unittest.cc rename to chrome/browser/vr/elements/transience_manager_unittest.cc index 6fc1e72..dea1519d 100644 --- a/chrome/browser/android/vr_shell/ui_elements/transience_manager_unittest.cc +++ b/chrome/browser/vr/elements/transience_manager_unittest.cc
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_elements/transience_manager.h" +#include "chrome/browser/vr/elements/transience_manager.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" #include "base/test/scoped_mock_time_message_loop_task_runner.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" #include "testing/gtest/include/gtest/gtest.h" -namespace vr_shell { +namespace vr { TEST(TransienceManager, Visibility) { base::MessageLoop message_loop_; @@ -56,4 +56,4 @@ EXPECT_EQ(element.visible(), false); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/transient_url_bar.cc b/chrome/browser/vr/elements/transient_url_bar.cc similarity index 81% rename from chrome/browser/android/vr_shell/ui_elements/transient_url_bar.cc rename to chrome/browser/vr/elements/transient_url_bar.cc index ad4c4e5..8909e29 100644 --- a/chrome/browser/android/vr_shell/ui_elements/transient_url_bar.cc +++ b/chrome/browser/vr/elements/transient_url_bar.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/android/vr_shell/ui_elements/transient_url_bar.h" +#include "chrome/browser/vr/elements/transient_url_bar.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/url_bar_texture.h" +#include "chrome/browser/vr/elements/url_bar_texture.h" -namespace vr_shell { +namespace vr { TransientUrlBar::TransientUrlBar( int preferred_width, @@ -31,4 +31,4 @@ texture_->SetToolbarState(state); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/transient_url_bar.h b/chrome/browser/vr/elements/transient_url_bar.h similarity index 67% rename from chrome/browser/android/vr_shell/ui_elements/transient_url_bar.h rename to chrome/browser/vr/elements/transient_url_bar.h index b28d1662..c7c8ec7 100644 --- a/chrome/browser/android/vr_shell/ui_elements/transient_url_bar.h +++ b/chrome/browser/vr/elements/transient_url_bar.h
@@ -2,21 +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_ANDROID_VR_SHELL_UI_ELEMENTS_TRANSIENT_URL_BAR_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TRANSIENT_URL_BAR_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_TRANSIENT_URL_BAR_H_ +#define CHROME_BROWSER_VR_ELEMENTS_TRANSIENT_URL_BAR_H_ #include <memory> #include "base/callback.h" #include "base/macros.h" #include "base/time/time.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" -#include "chrome/browser/android/vr_shell/ui_elements/transience_manager.h" -#include "chrome/browser/android/vr_shell/ui_unsupported_mode.h" +#include "chrome/browser/vr/elements/textured_element.h" +#include "chrome/browser/vr/elements/transience_manager.h" +#include "chrome/browser/vr/ui_unsupported_mode.h" #include "components/security_state/core/security_state.h" #include "url/gurl.h" -namespace vr_shell { +namespace vr { class UrlBarTexture; struct ToolbarState; @@ -44,6 +44,6 @@ DISALLOW_COPY_AND_ASSIGN(TransientUrlBar); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_TRANSIENT_URL_BAR_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_TRANSIENT_URL_BAR_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/ui_element.cc b/chrome/browser/vr/elements/ui_element.cc similarity index 96% rename from chrome/browser/android/vr_shell/ui_elements/ui_element.cc rename to chrome/browser/vr/elements/ui_element.cc index 3183a159..0ddc77d 100644 --- a/chrome/browser/android/vr_shell/ui_elements/ui_element.cc +++ b/chrome/browser/vr/elements/ui_element.cc
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" #include <limits> #include "base/logging.h" #include "base/time/time.h" -#include "chrome/browser/android/vr_shell/animation.h" -#include "chrome/browser/android/vr_shell/easing.h" +#include "chrome/browser/vr/animation.h" +#include "chrome/browser/vr/easing.h" -namespace vr_shell { +namespace vr { namespace { @@ -206,4 +206,4 @@ void UiElement::OnSetMode() {} -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/ui_element.h b/chrome/browser/vr/elements/ui_element.h similarity index 96% rename from chrome/browser/android/vr_shell/ui_elements/ui_element.h rename to chrome/browser/vr/elements/ui_element.h index 140677b9..faf88f7 100644 --- a/chrome/browser/android/vr_shell/ui_elements/ui_element.h +++ b/chrome/browser/vr/elements/ui_element.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_UI_ELEMENT_H_ +#define CHROME_BROWSER_VR_ELEMENTS_UI_ELEMENT_H_ #include <memory> #include <string> #include <vector> #include "base/macros.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h" +#include "chrome/browser/vr/color_scheme.h" +#include "chrome/browser/vr/elements/ui_element_debug_id.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/geometry/point3_f.h" #include "ui/gfx/geometry/quaternion.h" @@ -22,7 +22,7 @@ class TimeTicks; } -namespace vr_shell { +namespace vr { class Animation; class UiElementRenderer; @@ -329,6 +329,6 @@ DISALLOW_COPY_AND_ASSIGN(UiElement); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_UI_ELEMENT_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h b/chrome/browser/vr/elements/ui_element_debug_id.h similarity index 73% rename from chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h rename to chrome/browser/vr/elements/ui_element_debug_id.h index 7051e44c..51d6668f 100644 --- a/chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h +++ b/chrome/browser/vr/elements/ui_element_debug_id.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_DEBUG_ID_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_DEBUG_ID_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_UI_ELEMENT_DEBUG_ID_H_ +#define CHROME_BROWSER_VR_ELEMENTS_UI_ELEMENT_DEBUG_ID_H_ -namespace vr_shell { +namespace vr { // These identifiers may be used by UI elements to tag themselves for purposes // of testing or debugging. @@ -34,6 +34,6 @@ kBluetoothConnectedIndicator, }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_DEBUG_ID_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_UI_ELEMENT_DEBUG_ID_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/ui_element_unittest.cc b/chrome/browser/vr/elements/ui_element_unittest.cc similarity index 96% rename from chrome/browser/android/vr_shell/ui_elements/ui_element_unittest.cc rename to chrome/browser/vr/elements/ui_element_unittest.cc index e6ecdbb0..eb22978 100644 --- a/chrome/browser/android/vr_shell/ui_elements/ui_element_unittest.cc +++ b/chrome/browser/vr/elements/ui_element_unittest.cc
@@ -2,13 +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/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element.h" #include <utility> #include "base/macros.h" -#include "chrome/browser/android/vr_shell/animation.h" -#include "chrome/browser/android/vr_shell/easing.h" +#include "chrome/browser/vr/animation.h" +#include "chrome/browser/vr/easing.h" #include "testing/gtest/include/gtest/gtest.h" #define EXPECT_VEC3F_EQ(a, b) \ @@ -28,7 +28,7 @@ EXPECT_FLOAT_EQ(a.z(), b.z()); \ EXPECT_FLOAT_EQ(a.w(), b.w()); -namespace vr_shell { +namespace vr { namespace { @@ -165,4 +165,4 @@ EXPECT_VEC3F_EQ(gfx::Vector3dF(50, 500, 5000), rect.translation()); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/ui_texture.cc b/chrome/browser/vr/elements/ui_texture.cc similarity index 96% rename from chrome/browser/android/vr_shell/textures/ui_texture.cc rename to chrome/browser/vr/elements/ui_texture.cc index 26434c88..e34fb11 100644 --- a/chrome/browser/android/vr_shell/textures/ui_texture.cc +++ b/chrome/browser/vr/elements/ui_texture.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/android/vr_shell/textures/ui_texture.h" +#include "chrome/browser/vr/elements/ui_texture.h" #include <set> #include <string> @@ -13,7 +13,7 @@ #include "base/memory/ptr_util.h" #include "base/strings/string_util.h" #include "base/trace_event/trace_event.h" -#include "chrome/browser/android/vr_shell/font_fallback.h" +#include "chrome/browser/vr/font_fallback.h" #include "third_party/icu/source/common/unicode/uscript.h" #include "third_party/skia/include/core/SkCanvas.h" #include "ui/gfx/canvas.h" @@ -22,7 +22,7 @@ #include "ui/gfx/text_elider.h" #include "ui/gl/gl_bindings.h" -namespace vr_shell { +namespace vr { namespace { @@ -207,4 +207,4 @@ force_font_fallback_failure_for_testing_ = force; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/ui_texture.h b/chrome/browser/vr/elements/ui_texture.h similarity index 89% rename from chrome/browser/android/vr_shell/textures/ui_texture.h rename to chrome/browser/vr/elements/ui_texture.h index 4f5e008..9bb77c58 100644 --- a/chrome/browser/android/vr_shell/textures/ui_texture.h +++ b/chrome/browser/vr/elements/ui_texture.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_ANDROID_VR_SHELL_TEXTURES_UI_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_UI_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_UI_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_UI_TEXTURE_H_ #include <memory> #include <vector> #include "base/macros.h" #include "base/strings/string16.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" +#include "chrome/browser/vr/color_scheme.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" @@ -26,7 +26,7 @@ } // namespace gfx -namespace vr_shell { +namespace vr { class UiTexture { public: @@ -97,6 +97,6 @@ DISALLOW_COPY_AND_ASSIGN(UiTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_UI_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_UI_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/ui_elements/url_bar.cc b/chrome/browser/vr/elements/url_bar.cc similarity index 92% rename from chrome/browser/android/vr_shell/ui_elements/url_bar.cc rename to chrome/browser/vr/elements/url_bar.cc index 18369ad..8544006 100644 --- a/chrome/browser/android/vr_shell/ui_elements/url_bar.cc +++ b/chrome/browser/vr/elements/url_bar.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/android/vr_shell/ui_elements/url_bar.h" +#include "chrome/browser/vr/elements/url_bar.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/url_bar_texture.h" +#include "chrome/browser/vr/elements/url_bar_texture.h" -namespace vr_shell { +namespace vr { UrlBar::UrlBar(int preferred_width, const base::Callback<void()>& back_button_callback, @@ -77,4 +77,4 @@ UpdateTexture(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_elements/url_bar.h b/chrome/browser/vr/elements/url_bar.h similarity index 79% rename from chrome/browser/android/vr_shell/ui_elements/url_bar.h rename to chrome/browser/vr/elements/url_bar.h index d7651bbd..8240f38 100644 --- a/chrome/browser/android/vr_shell/ui_elements/url_bar.h +++ b/chrome/browser/vr/elements/url_bar.h
@@ -2,20 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_URL_BAR_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_URL_BAR_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_URL_BAR_H_ +#define CHROME_BROWSER_VR_ELEMENTS_URL_BAR_H_ #include <memory> #include "base/callback.h" #include "base/macros.h" #include "base/time/time.h" -#include "chrome/browser/android/vr_shell/ui_elements/textured_element.h" -#include "chrome/browser/android/vr_shell/ui_unsupported_mode.h" +#include "chrome/browser/vr/elements/textured_element.h" +#include "chrome/browser/vr/ui_unsupported_mode.h" #include "components/security_state/core/security_state.h" #include "url/gurl.h" -namespace vr_shell { +namespace vr { class UrlBarTexture; struct ToolbarState; @@ -52,6 +52,6 @@ DISALLOW_COPY_AND_ASSIGN(UrlBar); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_URL_BAR_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_URL_BAR_H_
diff --git a/chrome/browser/android/vr_shell/textures/url_bar_texture.cc b/chrome/browser/vr/elements/url_bar_texture.cc similarity index 95% rename from chrome/browser/android/vr_shell/textures/url_bar_texture.cc rename to chrome/browser/vr/elements/url_bar_texture.cc index 5b35f4f..8854f845 100644 --- a/chrome/browser/android/vr_shell/textures/url_bar_texture.cc +++ b/chrome/browser/vr/elements/url_bar_texture.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/android/vr_shell/textures/url_bar_texture.h" +#include "chrome/browser/vr/elements/url_bar_texture.h" #include "base/strings/utf_string_conversions.h" #include "cc/paint/skia_paint_canvas.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" -#include "chrome/browser/android/vr_shell/textures/render_text_wrapper.h" +#include "chrome/browser/vr/color_scheme.h" +#include "chrome/browser/vr/elements/render_text_wrapper.h" #include "components/url_formatter/url_formatter.h" #include "ui/gfx/canvas.h" #include "ui/gfx/font.h" @@ -18,7 +18,7 @@ #include "ui/gfx/render_text.h" #include "ui/vector_icons/vector_icons.h" -namespace vr_shell { +namespace vr { namespace { @@ -65,7 +65,7 @@ : GetSchemeColor(level, color_scheme); } -void setEmphasis(vr_shell::RenderTextWrapper* render_text, +void setEmphasis(vr::RenderTextWrapper* render_text, bool emphasis, const gfx::Range& range, const ColorScheme& color_scheme) { @@ -87,8 +87,7 @@ UrlBarTexture::UrlBarTexture( bool web_vr, const base::Callback<void(UiUnsupportedMode)>& failure_callback) - : has_back_button_(!web_vr), - failure_callback_(failure_callback) {} + : has_back_button_(!web_vr), failure_callback_(failure_callback) {} UrlBarTexture::~UrlBarTexture() = default; @@ -247,8 +246,8 @@ canvas->restore(); // The security chip text consumes a significant percentage of URL bar text - // space, so they are currently disabled (see crbug.com/734206). The offline - // chip is an exception, and must be shown (see crbug.com/735770). + // space, so it is currently disabled (see crbug.com/734206). The offline + // state is an exception, and must be shown (see crbug.com/735770). bool draw_security_chip = state_.offline_page; // Possibly draw security chip text (eg. "Not secure") next to the security @@ -350,7 +349,7 @@ failure_callback_.Run(UiUnsupportedMode::kCouldNotElideURL); } - vr_shell::RenderTextWrapper vr_render_text(render_text.get()); + vr::RenderTextWrapper vr_render_text(render_text.get()); ApplyUrlStyling(text, parsed, state_.security_level, &vr_render_text, color_scheme()); @@ -364,7 +363,7 @@ const base::string16& formatted_url, const url::Parsed& parsed, const security_state::SecurityLevel security_level, - vr_shell::RenderTextWrapper* render_text, + vr::RenderTextWrapper* render_text, const ColorScheme& color_scheme) { const url::Component& scheme = parsed.scheme; const url::Component& host = parsed.host; @@ -433,4 +432,4 @@ return size_; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/textures/url_bar_texture.h b/chrome/browser/vr/elements/url_bar_texture.h similarity index 81% rename from chrome/browser/android/vr_shell/textures/url_bar_texture.h rename to chrome/browser/vr/elements/url_bar_texture.h index ed721e5..58e88d5 100644 --- a/chrome/browser/android/vr_shell/textures/url_bar_texture.h +++ b/chrome/browser/vr/elements/url_bar_texture.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_ANDROID_VR_SHELL_TEXTURES_URL_BAR_TEXTURE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_URL_BAR_TEXTURE_H_ +#ifndef CHROME_BROWSER_VR_ELEMENTS_URL_BAR_TEXTURE_H_ +#define CHROME_BROWSER_VR_ELEMENTS_URL_BAR_TEXTURE_H_ #include <memory> #include <vector> @@ -11,10 +11,10 @@ #include "base/callback.h" #include "base/macros.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" -#include "chrome/browser/android/vr_shell/toolbar_state.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" -#include "chrome/browser/android/vr_shell/ui_unsupported_mode.h" +#include "chrome/browser/vr/elements/ui_texture.h" +#include "chrome/browser/vr/toolbar_state.h" +#include "chrome/browser/vr/ui_interface.h" +#include "chrome/browser/vr/ui_unsupported_mode.h" #include "components/security_state/core/security_state.h" #include "ui/gfx/geometry/rect_f.h" #include "url/gurl.h" @@ -24,7 +24,7 @@ class RenderText; } // namespace gfx -namespace vr_shell { +namespace vr { class RenderTextWrapper; struct ColorScheme; @@ -57,7 +57,7 @@ static void ApplyUrlStyling(const base::string16& formatted_url, const url::Parsed& parsed, security_state::SecurityLevel security_level, - vr_shell::RenderTextWrapper* render_text, + vr::RenderTextWrapper* render_text, const ColorScheme& color_scheme); std::unique_ptr<gfx::RenderText> url_render_text_; @@ -89,6 +89,6 @@ DISALLOW_COPY_AND_ASSIGN(UrlBarTexture); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TEXTURES_URL_BAR_TEXTURE_H_ +#endif // CHROME_BROWSER_VR_ELEMENTS_URL_BAR_TEXTURE_H_
diff --git a/chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc b/chrome/browser/vr/elements/url_bar_texture_unittest.cc similarity index 96% rename from chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc rename to chrome/browser/vr/elements/url_bar_texture_unittest.cc index f9701a40..1f36bee 100644 --- a/chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc +++ b/chrome/browser/vr/elements/url_bar_texture_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/android/vr_shell/textures/url_bar_texture.h" +#include "chrome/browser/vr/elements/url_bar_texture.h" #include "base/bind.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/android/vr_shell/textures/render_text_wrapper.h" -#include "chrome/browser/android/vr_shell/toolbar_state.h" +#include "build/build_config.h" +#include "chrome/browser/vr/elements/render_text_wrapper.h" +#include "chrome/browser/vr/toolbar_state.h" #include "components/security_state/core/security_state.h" #include "components/toolbar/vector_icons.h" #include "components/url_formatter/url_formatter.h" @@ -22,7 +23,7 @@ using security_state::SecurityLevel; -namespace vr_shell { +namespace vr { // TODO(cjgrant): Use ColorScheme instead of hardcoded values // where it makes sense. @@ -59,7 +60,7 @@ static void TestUrlStyling(const base::string16& formatted_url, const url::Parsed& parsed, security_state::SecurityLevel security_level, - vr_shell::RenderTextWrapper* render_text, + vr::RenderTextWrapper* render_text, const ColorScheme& color_scheme) { ApplyUrlStyling(formatted_url, parsed, security_level, render_text, color_scheme); @@ -292,4 +293,4 @@ EXPECT_EQ(UiUnsupportedMode::kCount, texture.unsupported_mode()); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/font_fallback.cc b/chrome/browser/vr/font_fallback.cc similarity index 97% rename from chrome/browser/android/vr_shell/font_fallback.cc rename to chrome/browser/vr/font_fallback.cc index 5c0f997..bd5fee5 100644 --- a/chrome/browser/android/vr_shell/font_fallback.cc +++ b/chrome/browser/vr/font_fallback.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/android/vr_shell/font_fallback.h" +#include "chrome/browser/vr/font_fallback.h" #include <map> #include <set> @@ -17,7 +17,7 @@ #include "third_party/skia/include/ports/SkFontMgr.h" #include "ui/gfx/platform_font_linux.h" -namespace vr_shell { +namespace vr { namespace { @@ -150,4 +150,4 @@ return cached_font_set.GetFallbackFontNameForChar(c, font_name); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/font_fallback.h b/chrome/browser/vr/font_fallback.h similarity index 83% rename from chrome/browser/android/vr_shell/font_fallback.h rename to chrome/browser/vr/font_fallback.h index c0104aa1..72738bb 100644 --- a/chrome/browser/android/vr_shell/font_fallback.h +++ b/chrome/browser/vr/font_fallback.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_ANDROID_VR_SHELL_FONT_FALLBACK_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_FONT_FALLBACK_H_ +#ifndef CHROME_BROWSER_VR_FONT_FALLBACK_H_ +#define CHROME_BROWSER_VR_FONT_FALLBACK_H_ #include <string> @@ -13,7 +13,7 @@ class Font; } // namespace gfx -namespace vr_shell { +namespace vr { // Return a font name which provides a glyph for the Unicode code point // specified by character. @@ -36,6 +36,6 @@ const std::string& preferred_locale, std::string* font_name); -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_FONT_FALLBACK_H_ +#endif // CHROME_BROWSER_VR_FONT_FALLBACK_H_
diff --git a/chrome/browser/android/vr_shell/fps_meter.cc b/chrome/browser/vr/fps_meter.cc similarity index 94% rename from chrome/browser/android/vr_shell/fps_meter.cc rename to chrome/browser/vr/fps_meter.cc index c6d03126..c4a79526 100644 --- a/chrome/browser/android/vr_shell/fps_meter.cc +++ b/chrome/browser/vr/fps_meter.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/android/vr_shell/fps_meter.h" +#include "chrome/browser/vr/fps_meter.h" #include <algorithm> -namespace vr_shell { +namespace vr { namespace { @@ -84,4 +84,4 @@ return values_.GetSum() / values_.GetCount(); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/fps_meter.h b/chrome/browser/vr/fps_meter.h similarity index 86% rename from chrome/browser/android/vr_shell/fps_meter.h rename to chrome/browser/vr/fps_meter.h index 86da976..4fd90821 100644 --- a/chrome/browser/android/vr_shell/fps_meter.h +++ b/chrome/browser/vr/fps_meter.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_ANDROID_VR_SHELL_FPS_METER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_FPS_METER_H_ +#ifndef CHROME_BROWSER_VR_FPS_METER_H_ +#define CHROME_BROWSER_VR_FPS_METER_H_ #include <vector> #include "base/macros.h" #include "base/time/time.h" -namespace vr_shell { +namespace vr { class SampleQueue { public: @@ -68,6 +68,6 @@ SampleQueue values_; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_FPS_METER_H_ +#endif // CHROME_BROWSER_VR_FPS_METER_H_
diff --git a/chrome/browser/android/vr_shell/fps_meter_unittest.cc b/chrome/browser/vr/fps_meter_unittest.cc similarity index 96% rename from chrome/browser/android/vr_shell/fps_meter_unittest.cc rename to chrome/browser/vr/fps_meter_unittest.cc index 18403f3..481086b 100644 --- a/chrome/browser/android/vr_shell/fps_meter_unittest.cc +++ b/chrome/browser/vr/fps_meter_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/android/vr_shell/fps_meter.h" +#include "chrome/browser/vr/fps_meter.h" #include "base/macros.h" #include "testing/gtest/include/gtest/gtest.h" -namespace vr_shell { +namespace vr { namespace { @@ -110,4 +110,4 @@ EXPECT_EQ(30, meter.GetAverage()); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/gltf_asset.cc b/chrome/browser/vr/gltf_asset.cc similarity index 95% rename from chrome/browser/android/vr_shell/gltf_asset.cc rename to chrome/browser/vr/gltf_asset.cc index 752cd7cb..4591715 100644 --- a/chrome/browser/android/vr_shell/gltf_asset.cc +++ b/chrome/browser/vr/gltf_asset.cc
@@ -2,13 +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/android/vr_shell/gltf_asset.h" +#include "chrome/browser/vr/gltf_asset.h" #include <unordered_map> #include "base/logging.h" -namespace vr_shell { +namespace vr { namespace gltf { @@ -115,4 +115,4 @@ } // namespace gltf -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/gltf_asset.h b/chrome/browser/vr/gltf_asset.h similarity index 92% rename from chrome/browser/android/vr_shell/gltf_asset.h rename to chrome/browser/vr/gltf_asset.h index 599c02f..45bbc5d 100644 --- a/chrome/browser/android/vr_shell/gltf_asset.h +++ b/chrome/browser/vr/gltf_asset.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_ANDROID_VR_SHELL_GLTF_ASSET_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_ASSET_H_ +#ifndef CHROME_BROWSER_VR_GLTF_ASSET_H_ +#define CHROME_BROWSER_VR_GLTF_ASSET_H_ #include <map> #include <memory> @@ -12,7 +12,7 @@ #include "ui/gl/gl_bindings.h" -namespace vr_shell { +namespace vr { namespace gltf { @@ -119,6 +119,6 @@ } // namespace gltf -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_ASSET_H_ +#endif // CHROME_BROWSER_VR_GLTF_ASSET_H_
diff --git a/chrome/browser/android/vr_shell/gltf_parser.cc b/chrome/browser/vr/gltf_parser.cc similarity index 98% rename from chrome/browser/android/vr_shell/gltf_parser.cc rename to chrome/browser/vr/gltf_parser.cc index 210afcd..b5e8aa2 100644 --- a/chrome/browser/android/vr_shell/gltf_parser.cc +++ b/chrome/browser/vr/gltf_parser.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/android/vr_shell/gltf_parser.h" +#include "chrome/browser/vr/gltf_parser.h" #include "base/bind.h" #include "base/bind_helpers.h" @@ -18,7 +18,7 @@ #include "net/base/filename_util.h" #include "url/gurl.h" -namespace vr_shell { +namespace vr { namespace { constexpr const char kFailedtoReadBinaryGltfMsg[] = @@ -428,4 +428,4 @@ return gltf_asset; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/gltf_parser.h b/chrome/browser/vr/gltf_parser.h similarity index 91% rename from chrome/browser/android/vr_shell/gltf_parser.h rename to chrome/browser/vr/gltf_parser.h index 3c4406f..8d9931c3 100644 --- a/chrome/browser/android/vr_shell/gltf_parser.h +++ b/chrome/browser/vr/gltf_parser.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_ANDROID_VR_SHELL_GLTF_PARSER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_PARSER_H_ +#ifndef CHROME_BROWSER_VR_GLTF_PARSER_H_ +#define CHROME_BROWSER_VR_GLTF_PARSER_H_ #include <memory> #include <string> @@ -11,9 +11,9 @@ #include "base/files/file_path.h" #include "base/values.h" -#include "chrome/browser/android/vr_shell/gltf_asset.h" +#include "chrome/browser/vr/gltf_asset.h" -namespace vr_shell { +namespace vr { // Parser for glTF 1.0 specification // https://github.com/KhronosGroup/glTF/tree/master/specification/1.0 @@ -77,6 +77,6 @@ const base::FilePath& path = base::FilePath()); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_PARSER_H_ +#endif // CHROME_BROWSER_VR_GLTF_PARSER_H_
diff --git a/chrome/browser/android/vr_shell/gltf_parser_unittest.cc b/chrome/browser/vr/gltf_parser_unittest.cc similarity index 97% rename from chrome/browser/android/vr_shell/gltf_parser_unittest.cc rename to chrome/browser/vr/gltf_parser_unittest.cc index 657bcd34..c1ffa435 100644 --- a/chrome/browser/android/vr_shell/gltf_parser_unittest.cc +++ b/chrome/browser/vr/gltf_parser_unittest.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/android/vr_shell/gltf_parser.h" +#include "chrome/browser/vr/gltf_parser.h" #include <memory> @@ -11,10 +11,10 @@ #include "base/json/json_file_value_serializer.h" #include "base/memory/ptr_util.h" #include "base/values.h" -#include "chrome/browser/android/vr_shell/test/paths.h" +#include "chrome/browser/vr/test/paths.h" #include "testing/gtest/include/gtest/gtest.h" -namespace vr_shell { +namespace vr { class DataDrivenTest : public testing::Test { protected: @@ -173,4 +173,4 @@ EXPECT_EQ(0, buffer_view->buffer); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/run_all_unittests.cc b/chrome/browser/vr/run_all_unittests.cc similarity index 97% rename from chrome/browser/android/vr_shell/run_all_unittests.cc rename to chrome/browser/vr/run_all_unittests.cc index 7c615de..9cfe7d8 100644 --- a/chrome/browser/android/vr_shell/run_all_unittests.cc +++ b/chrome/browser/vr/run_all_unittests.cc
@@ -7,6 +7,7 @@ #include "base/path_service.h" #include "base/test/launcher/unit_test_launcher.h" #include "base/test/test_suite.h" +#include "build/build_config.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/ui_base_paths.h"
diff --git a/chrome/browser/android/vr_shell/test/data/sample.bin b/chrome/browser/vr/test/data/sample.bin similarity index 100% rename from chrome/browser/android/vr_shell/test/data/sample.bin rename to chrome/browser/vr/test/data/sample.bin
diff --git a/chrome/browser/android/vr_shell/test/data/sample.glb b/chrome/browser/vr/test/data/sample.glb similarity index 100% rename from chrome/browser/android/vr_shell/test/data/sample.glb rename to chrome/browser/vr/test/data/sample.glb Binary files differ
diff --git a/chrome/browser/android/vr_shell/test/data/sample_external.gltf b/chrome/browser/vr/test/data/sample_external.gltf similarity index 100% rename from chrome/browser/android/vr_shell/test/data/sample_external.gltf rename to chrome/browser/vr/test/data/sample_external.gltf
diff --git a/chrome/browser/android/vr_shell/test/data/sample_inline.gltf b/chrome/browser/vr/test/data/sample_inline.gltf similarity index 100% rename from chrome/browser/android/vr_shell/test/data/sample_inline.gltf rename to chrome/browser/vr/test/data/sample_inline.gltf
diff --git a/chrome/browser/android/vr_shell/test/paths.cc b/chrome/browser/vr/test/paths.cc similarity index 77% rename from chrome/browser/android/vr_shell/test/paths.cc rename to chrome/browser/vr/test/paths.cc index b06cabd..068921f 100644 --- a/chrome/browser/android/vr_shell/test/paths.cc +++ b/chrome/browser/vr/test/paths.cc
@@ -2,13 +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/android/vr_shell/test/paths.h" +#include "chrome/browser/vr/test/paths.h" #include "base/files/file_util.h" #include "base/path_service.h" #include "testing/gtest/include/gtest/gtest.h" -namespace vr_shell { +namespace vr { namespace test { void GetTestDataPath(base::FilePath* result) { @@ -16,8 +16,7 @@ ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &path)); path = path.Append(FILE_PATH_LITERAL("chrome")) .Append(FILE_PATH_LITERAL("browser")) - .Append(FILE_PATH_LITERAL("android")) - .Append(FILE_PATH_LITERAL("vr_shell")) + .Append(FILE_PATH_LITERAL("vr")) .Append(FILE_PATH_LITERAL("test")) .Append(FILE_PATH_LITERAL("data")); ASSERT_TRUE(base::PathExists(path)); @@ -25,4 +24,4 @@ } } // namespace test -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/vr/test/paths.h b/chrome/browser/vr/test/paths.h new file mode 100644 index 0000000..4a14a92 --- /dev/null +++ b/chrome/browser/vr/test/paths.h
@@ -0,0 +1,18 @@ +// 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 CHROME_BROWSER_VR_TEST_PATHS_H_ +#define CHROME_BROWSER_VR_TEST_PATHS_H_ + +#include "base/files/file_path.h" + +namespace vr { +namespace test { + +void GetTestDataPath(base::FilePath* result); + +} // namespace test +} // namespace vr + +#endif // CHROME_BROWSER_VR_TEST_PATHS_H_
diff --git a/chrome/browser/android/vr_shell/toolbar_helper.cc b/chrome/browser/vr/toolbar_helper.cc similarity index 90% rename from chrome/browser/android/vr_shell/toolbar_helper.cc rename to chrome/browser/vr/toolbar_helper.cc index b776a57..e7f5e12c5 100644 --- a/chrome/browser/android/vr_shell/toolbar_helper.cc +++ b/chrome/browser/vr/toolbar_helper.cc
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/toolbar_helper.h" +#include "chrome/browser/vr/toolbar_helper.h" #include "base/memory/ptr_util.h" #include "components/toolbar/toolbar_model_impl.h" class ToolbarModelDelegate; -namespace vr_shell { +namespace vr { namespace { @@ -38,4 +38,4 @@ ui_->SetToolbarState(state); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/toolbar_helper.h b/chrome/browser/vr/toolbar_helper.h similarity index 67% rename from chrome/browser/android/vr_shell/toolbar_helper.h rename to chrome/browser/vr/toolbar_helper.h index c87491d8..d29e184c 100644 --- a/chrome/browser/android/vr_shell/toolbar_helper.h +++ b/chrome/browser/vr/toolbar_helper.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_TOOLBAR_HELPER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TOOLBAR_HELPER_H_ +#ifndef CHROME_BROWSER_VR_TOOLBAR_HELPER_H_ +#define CHROME_BROWSER_VR_TOOLBAR_HELPER_H_ -#include "chrome/browser/android/vr_shell/toolbar_state.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" +#include "chrome/browser/vr/toolbar_state.h" +#include "chrome/browser/vr/ui_interface.h" class ToolbarModel; class ToolbarModelDelegate; -namespace vr_shell { +namespace vr { class UiInterface; @@ -31,6 +31,6 @@ ToolbarState current_state_; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TOOLBAR_HELPER_H_ +#endif // CHROME_BROWSER_VR_TOOLBAR_HELPER_H_
diff --git a/chrome/browser/android/vr_shell/toolbar_state.cc b/chrome/browser/vr/toolbar_state.cc similarity index 92% rename from chrome/browser/android/vr_shell/toolbar_state.cc rename to chrome/browser/vr/toolbar_state.cc index 2d684527..f22180d 100644 --- a/chrome/browser/android/vr_shell/toolbar_state.cc +++ b/chrome/browser/vr/toolbar_state.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/android/vr_shell/toolbar_state.h" +#include "chrome/browser/vr/toolbar_state.h" -namespace vr_shell { +namespace vr { ToolbarState::ToolbarState() : gurl(GURL()), @@ -40,4 +40,4 @@ return !(*this == other); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/toolbar_state.h b/chrome/browser/vr/toolbar_state.h similarity index 81% rename from chrome/browser/android/vr_shell/toolbar_state.h rename to chrome/browser/vr/toolbar_state.h index 0a1eb78..dcfeaa3 100644 --- a/chrome/browser/android/vr_shell/toolbar_state.h +++ b/chrome/browser/vr/toolbar_state.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_ANDROID_VR_SHELL_TOOLBAR_STATE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_TOOLBAR_STATE_H_ +#ifndef CHROME_BROWSER_VR_TOOLBAR_STATE_H_ +#define CHROME_BROWSER_VR_TOOLBAR_STATE_H_ #include "components/security_state/core/security_state.h" #include "url/gurl.h" @@ -12,7 +12,7 @@ struct VectorIcon; } -namespace vr_shell { +namespace vr { // Passes information obtained from ToolbarModel to the VR UI framework. struct ToolbarState { @@ -37,6 +37,6 @@ bool offline_page; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_TOOLBAR_STATE_H_ +#endif // CHROME_BROWSER_VR_TOOLBAR_STATE_H_
diff --git a/chrome/browser/android/vr_shell/ui_browser_interface.h b/chrome/browser/vr/ui_browser_interface.h similarity index 65% rename from chrome/browser/android/vr_shell/ui_browser_interface.h rename to chrome/browser/vr/ui_browser_interface.h index d0456055..c787e8a 100644 --- a/chrome/browser/android/vr_shell/ui_browser_interface.h +++ b/chrome/browser/vr/ui_browser_interface.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_BROWSER_INTERFACE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_BROWSER_INTERFACE_H_ +#ifndef CHROME_BROWSER_VR_UI_BROWSER_INTERFACE_H_ +#define CHROME_BROWSER_VR_UI_BROWSER_INTERFACE_H_ -#include "chrome/browser/android/vr_shell/ui_unsupported_mode.h" +#include "chrome/browser/vr/ui_unsupported_mode.h" -namespace vr_shell { +namespace vr { // An interface for the UI to communicate with VrShell. Many of the functions // in this interface are proxies to methods on VrShell. @@ -22,6 +22,6 @@ virtual void OnUnsupportedMode(UiUnsupportedMode mode) = 0; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_BROWSER_INTERFACE_H_ +#endif // CHROME_BROWSER_VR_UI_BROWSER_INTERFACE_H_
diff --git a/chrome/browser/android/vr_shell/ui_element_renderer.h b/chrome/browser/vr/ui_element_renderer.h similarity index 79% rename from chrome/browser/android/vr_shell/ui_element_renderer.h rename to chrome/browser/vr/ui_element_renderer.h index 24fd174..bf7bfcf 100644 --- a/chrome/browser/android/vr_shell/ui_element_renderer.h +++ b/chrome/browser/vr/ui_element_renderer.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_ANDROID_VR_SHELL_UI_ELEMENT_RENDERER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENT_RENDERER_H_ +#ifndef CHROME_BROWSER_VR_UI_ELEMENT_RENDERER_H_ +#define CHROME_BROWSER_VR_UI_ELEMENT_RENDERER_H_ #include "third_party/skia/include/core/SkColor.h" @@ -12,7 +12,7 @@ class Transform; } // namespace gfx -namespace vr_shell { +namespace vr { // This is the interface offered by VrShell's GL system to UI elements. class UiElementRenderer { @@ -30,6 +30,6 @@ float opacity) = 0; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENT_RENDERER_H_ +#endif // CHROME_BROWSER_VR_UI_ELEMENT_RENDERER_H_
diff --git a/chrome/browser/android/vr_shell/ui_input_manager.cc b/chrome/browser/vr/ui_input_manager.cc similarity index 97% rename from chrome/browser/android/vr_shell/ui_input_manager.cc rename to chrome/browser/vr/ui_input_manager.cc index 1a82987..7e96486a 100644 --- a/chrome/browser/android/vr_shell/ui_input_manager.cc +++ b/chrome/browser/vr/ui_input_manager.cc
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_input_manager.h" +#include "chrome/browser/vr/ui_input_manager.h" #include "base/macros.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" -#include "chrome/browser/android/vr_shell/ui_scene.h" +#include "chrome/browser/vr/elements/ui_element.h" +#include "chrome/browser/vr/ui_scene.h" // TODO(tiborg): Remove include once we use a generic type to pass scroll/fling // gestures. #include "third_party/WebKit/public/platform/WebGestureEvent.h" -namespace vr_shell { +namespace vr { namespace { @@ -343,4 +343,4 @@ return true; } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_input_manager.h b/chrome/browser/vr/ui_input_manager.h similarity index 92% rename from chrome/browser/android/vr_shell/ui_input_manager.h rename to chrome/browser/vr/ui_input_manager.h index 10e9d4b1..a333a79 100644 --- a/chrome/browser/android/vr_shell/ui_input_manager.h +++ b/chrome/browser/vr/ui_input_manager.h
@@ -2,23 +2,27 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_INPUT_MANAGER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_INPUT_MANAGER_H_ +#ifndef CHROME_BROWSER_VR_UI_INPUT_MANAGER_H_ +#define CHROME_BROWSER_VR_UI_INPUT_MANAGER_H_ #include <memory> +#include <vector> -// TODO(tiborg): Remove include once we use a generic type to pass scroll/fling -// gestures. -#include "chrome/browser/android/vr_shell/vr_controller.h" #include "ui/gfx/geometry/point3_f.h" #include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/vector3d_f.h" -namespace vr_shell { +namespace blink { +class WebGestureEvent; +} + +namespace vr { class UiScene; class UiElement; +using GestureList = std::vector<std::unique_ptr<blink::WebGestureEvent>>; + // Receives interaction events with the web content from the UiInputManager. class UiInputManagerDelegate { public: @@ -115,6 +119,6 @@ ButtonState previous_button_state_ = ButtonState::UP; }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_INPUT_MANAGER_H_ +#endif // CHROME_BROWSER_VR_UI_INPUT_MANAGER_H_
diff --git a/chrome/browser/android/vr_shell/ui_interface.h b/chrome/browser/vr/ui_interface.h similarity index 88% rename from chrome/browser/android/vr_shell/ui_interface.h rename to chrome/browser/vr/ui_interface.h index 29c3bf3..fde6f7f 100644 --- a/chrome/browser/android/vr_shell/ui_interface.h +++ b/chrome/browser/vr/ui_interface.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_ANDROID_VR_SHELL_UI_INTERFACE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_INTERFACE_H_ +#ifndef CHROME_BROWSER_VR_UI_INTERFACE_H_ +#define CHROME_BROWSER_VR_UI_INTERFACE_H_ #include "components/security_state/core/security_state.h" class SkBitmap; -namespace vr_shell { +namespace vr { struct ToolbarState; @@ -53,6 +53,6 @@ virtual void RemoveTab(bool incognito, int id) {} }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_INTERFACE_H_ +#endif // CHROME_BROWSER_VR_UI_INTERFACE_H_
diff --git a/chrome/browser/android/vr_shell/ui_scene.cc b/chrome/browser/vr/ui_scene.cc similarity index 96% rename from chrome/browser/android/vr_shell/ui_scene.cc rename to chrome/browser/vr/ui_scene.cc index 5956b75..3c65f5d 100644 --- a/chrome/browser/android/vr_shell/ui_scene.cc +++ b/chrome/browser/vr/ui_scene.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/android/vr_shell/ui_scene.h" +#include "chrome/browser/vr/ui_scene.h" #include <string> #include <utility> @@ -10,11 +10,11 @@ #include "base/memory/ptr_util.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/android/vr_shell/animation.h" -#include "chrome/browser/android/vr_shell/easing.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/animation.h" +#include "chrome/browser/vr/easing.h" +#include "chrome/browser/vr/elements/ui_element.h" -namespace vr_shell { +namespace vr { namespace { @@ -280,4 +280,4 @@ } } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_scene.h b/chrome/browser/vr/ui_scene.h similarity index 89% rename from chrome/browser/android/vr_shell/ui_scene.h rename to chrome/browser/vr/ui_scene.h index 12bf9df..d7f52163 100644 --- a/chrome/browser/android/vr_shell/ui_scene.h +++ b/chrome/browser/vr/ui_scene.h
@@ -2,24 +2,24 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_SCENE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_SCENE_H_ +#ifndef CHROME_BROWSER_VR_UI_SCENE_H_ +#define CHROME_BROWSER_VR_UI_SCENE_H_ #include <memory> #include <vector> #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h" +#include "chrome/browser/vr/color_scheme.h" +#include "chrome/browser/vr/elements/ui_element_debug_id.h" #include "third_party/skia/include/core/SkColor.h" namespace base { class ListValue; class TimeTicks; -} +} // namespace base -namespace vr_shell { +namespace vr { class Animation; class UiElement; @@ -105,6 +105,6 @@ DISALLOW_COPY_AND_ASSIGN(UiScene); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_SCENE_H_ +#endif // CHROME_BROWSER_VR_UI_SCENE_H_
diff --git a/chrome/browser/android/vr_shell/ui_scene_manager.cc b/chrome/browser/vr/ui_scene_manager.cc similarity index 93% rename from chrome/browser/android/vr_shell/ui_scene_manager.cc rename to chrome/browser/vr/ui_scene_manager.cc index 5e756c6..9dbf83cb 100644 --- a/chrome/browser/android/vr_shell/ui_scene_manager.cc +++ b/chrome/browser/vr/ui_scene_manager.cc
@@ -2,31 +2,31 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_scene_manager.h" +#include "chrome/browser/vr/ui_scene_manager.h" #include "base/callback.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/android/vr_shell/textures/close_button_texture.h" -#include "chrome/browser/android/vr_shell/textures/ui_texture.h" -#include "chrome/browser/android/vr_shell/ui_browser_interface.h" -#include "chrome/browser/android/vr_shell/ui_elements/button.h" -#include "chrome/browser/android/vr_shell/ui_elements/exclusive_screen_toast.h" -#include "chrome/browser/android/vr_shell/ui_elements/exit_prompt.h" -#include "chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.h" -#include "chrome/browser/android/vr_shell/ui_elements/loading_indicator.h" -#include "chrome/browser/android/vr_shell/ui_elements/screen_dimmer.h" -#include "chrome/browser/android/vr_shell/ui_elements/splash_screen_icon.h" -#include "chrome/browser/android/vr_shell/ui_elements/system_indicator.h" -#include "chrome/browser/android/vr_shell/ui_elements/transient_url_bar.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h" -#include "chrome/browser/android/vr_shell/ui_elements/url_bar.h" -#include "chrome/browser/android/vr_shell/ui_scene.h" +#include "chrome/browser/vr/elements/button.h" +#include "chrome/browser/vr/elements/close_button_texture.h" +#include "chrome/browser/vr/elements/exclusive_screen_toast.h" +#include "chrome/browser/vr/elements/exit_prompt.h" +#include "chrome/browser/vr/elements/exit_prompt_backplane.h" +#include "chrome/browser/vr/elements/loading_indicator.h" +#include "chrome/browser/vr/elements/screen_dimmer.h" +#include "chrome/browser/vr/elements/splash_screen_icon.h" +#include "chrome/browser/vr/elements/system_indicator.h" +#include "chrome/browser/vr/elements/transient_url_bar.h" +#include "chrome/browser/vr/elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element_debug_id.h" +#include "chrome/browser/vr/elements/ui_texture.h" +#include "chrome/browser/vr/elements/url_bar.h" +#include "chrome/browser/vr/ui_browser_interface.h" +#include "chrome/browser/vr/ui_scene.h" #include "chrome/grit/generated_resources.h" #include "components/vector_icons/vector_icons.h" #include "ui/vector_icons/vector_icons.h" -namespace vr_shell { +namespace vr { namespace { @@ -165,7 +165,7 @@ element = base::MakeUnique<ScreenDimmer>(); element->set_debug_id(kScreenDimmer); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_visible(false); element->set_hit_testable(false); element->set_is_overlay(true); @@ -181,7 +181,7 @@ element = base::MakeUnique<PermanentSecurityWarning>(512); element->set_debug_id(kWebVrPermanentHttpSecurityWarning); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kPermanentWarningWidth, kPermanentWarningHeight, 1}); element->set_scale({kWarningDistance, kWarningDistance, 1}); element->set_translation( @@ -201,7 +201,7 @@ element = std::move(transient_warning); element->set_debug_id(kWebVrTransientHttpSecurityWarning); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kTransientWarningWidth, kTransientWarningHeight, 1}); element->set_scale({kWarningDistance, kWarningDistance, 1}); element->set_translation({0, 0, -kWarningDistance}); @@ -213,7 +213,7 @@ element = base::MakeUnique<ExitWarning>(1024); element->set_debug_id(kExitWarning); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kExitWarningWidth, kExitWarningHeight, 1}); element->set_scale({kExitWarningDistance, kExitWarningDistance, 1}); element->set_translation({0, 0, -kExitWarningDistance}); @@ -268,7 +268,7 @@ element = base::MakeUnique<UiElement>(); element->set_debug_id(kContentQuad); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::CONTENT); + element->set_fill(vr::Fill::CONTENT); element->set_size({kContentWidth, kContentHeight, 1}); element->set_translation({0, kContentVerticalOffset, -kContentDistance}); element->set_visible(false); @@ -282,7 +282,7 @@ element = base::MakeUnique<UiElement>(); element->set_debug_id(kBackplane); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kBackplaneSize, kBackplaneSize, 1.0}); element->set_translation({0.0, 0.0, -kTextureOffset}); element->set_parent_id(main_content_->id()); @@ -318,7 +318,7 @@ element->set_size({kSceneSize, kSceneSize, 1.0}); element->set_translation({0.0, -kSceneHeight / 2, 0.0}); element->set_rotation(gfx::Quaternion(gfx::Vector3dF(1, 0, 0), -M_PI / 2)); - element->set_fill(vr_shell::Fill::GRID_GRADIENT); + element->set_fill(vr::Fill::GRID_GRADIENT); element->set_draw_phase(0); element->set_gridline_count(kFloorGridlineCount); floor_ = element.get(); @@ -332,7 +332,7 @@ element->set_size({kSceneSize, kSceneSize, 1.0}); element->set_translation({0.0, kSceneHeight / 2, 0.0}); element->set_rotation(gfx::Quaternion(gfx::Vector3dF(1, 0, 0), M_PI / 2)); - element->set_fill(vr_shell::Fill::OPAQUE_GRADIENT); + element->set_fill(vr::Fill::OPAQUE_GRADIENT); element->set_draw_phase(0); ceiling_ = element.get(); background_elements_.push_back(element.get()); @@ -396,7 +396,7 @@ base::MakeUnique<CloseButtonTexture>()); element->set_debug_id(kCloseButton); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_translation( gfx::Vector3dF(0, kContentVerticalOffset - (kContentHeight / 2) - 0.3, -kCloseButtonDistance)); @@ -414,7 +414,7 @@ base::Unretained(this))); element->set_debug_id(kExitPrompt); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kExitPromptWidth, kExitPromptHeight, 1}); element->set_translation({0.0, kExitPromptVerticalOffset, kTextureOffset}); element->set_parent_id(main_content_->id()); @@ -428,7 +428,7 @@ &UiSceneManager::OnExitPromptBackplaneClicked, base::Unretained(this))); element->set_debug_id(kExitPromptBackplane); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kExitPromptBackplaneSize, kExitPromptBackplaneSize, 1.0}); element->set_translation({0.0, 0.0, -kTextureOffset}); element->set_parent_id(exit_prompt_->id()); @@ -442,7 +442,7 @@ 512, base::TimeDelta::FromSeconds(kToastTimeoutSeconds)); element->set_debug_id(kExclusiveScreenToast); element->set_id(AllocateId()); - element->set_fill(vr_shell::Fill::NONE); + element->set_fill(vr::Fill::NONE); element->set_size({kToastWidthDMM, kToastHeightDMM, 1}); element->set_visible(false); element->set_hit_testable(false); @@ -786,4 +786,4 @@ return ColorScheme::GetColorScheme(mode()); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_scene_manager.h b/chrome/browser/vr/ui_scene_manager.h similarity index 89% rename from chrome/browser/android/vr_shell/ui_scene_manager.h rename to chrome/browser/vr/ui_scene_manager.h index 81e5615..c306026 100644 --- a/chrome/browser/android/vr_shell/ui_scene_manager.h +++ b/chrome/browser/vr/ui_scene_manager.h
@@ -2,20 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_SCENE_MANAGER_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_SCENE_MANAGER_H_ +#ifndef CHROME_BROWSER_VR_UI_SCENE_MANAGER_H_ +#define CHROME_BROWSER_VR_UI_SCENE_MANAGER_H_ #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/values.h" -#include "chrome/browser/android/vr_shell/color_scheme.h" -#include "chrome/browser/android/vr_shell/ui_elements/simple_textured_element.h" -#include "chrome/browser/android/vr_shell/ui_interface.h" -#include "chrome/browser/android/vr_shell/ui_unsupported_mode.h" +#include "chrome/browser/vr/color_scheme.h" +#include "chrome/browser/vr/elements/simple_textured_element.h" +#include "chrome/browser/vr/ui_interface.h" +#include "chrome/browser/vr/ui_unsupported_mode.h" #include "third_party/skia/include/core/SkBitmap.h" -namespace vr_shell { +namespace vr { class ExclusiveScreenToast; class LoadingIndicator; @@ -144,6 +144,6 @@ DISALLOW_COPY_AND_ASSIGN(UiSceneManager); }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_SCENE_MANAGER_H_ +#endif // CHROME_BROWSER_VR_UI_SCENE_MANAGER_H_
diff --git a/chrome/browser/android/vr_shell/ui_scene_manager_unittest.cc b/chrome/browser/vr/ui_scene_manager_unittest.cc similarity index 97% rename from chrome/browser/android/vr_shell/ui_scene_manager_unittest.cc rename to chrome/browser/vr/ui_scene_manager_unittest.cc index 197bfea..22923339 100644 --- a/chrome/browser/android/vr_shell/ui_scene_manager_unittest.cc +++ b/chrome/browser/vr/ui_scene_manager_unittest.cc
@@ -2,20 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/vr_shell/ui_scene_manager.h" +#include "chrome/browser/vr/ui_scene_manager.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" #include "base/test/scoped_mock_time_message_loop_task_runner.h" -#include "chrome/browser/android/vr_shell/ui_browser_interface.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element_debug_id.h" -#include "chrome/browser/android/vr_shell/ui_scene.h" +#include "chrome/browser/vr/elements/ui_element.h" +#include "chrome/browser/vr/elements/ui_element_debug_id.h" +#include "chrome/browser/vr/ui_browser_interface.h" +#include "chrome/browser/vr/ui_scene.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace vr_shell { +namespace vr { namespace { @@ -449,4 +449,4 @@ EXPECT_TRUE(VerifyVisibility(indicators, false)); } -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_scene_unittest.cc b/chrome/browser/vr/ui_scene_unittest.cc similarity index 95% rename from chrome/browser/android/vr_shell/ui_scene_unittest.cc rename to chrome/browser/vr/ui_scene_unittest.cc index fe09178..b9afd76 100644 --- a/chrome/browser/android/vr_shell/ui_scene_unittest.cc +++ b/chrome/browser/vr/ui_scene_unittest.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/android/vr_shell/ui_scene.h" +#include "chrome/browser/vr/ui_scene.h" #define _USE_MATH_DEFINES // For M_PI in MSVC. #include <cmath> @@ -11,9 +11,9 @@ #include "base/memory/ptr_util.h" #include "base/values.h" -#include "chrome/browser/android/vr_shell/animation.h" -#include "chrome/browser/android/vr_shell/easing.h" -#include "chrome/browser/android/vr_shell/ui_elements/ui_element.h" +#include "chrome/browser/vr/animation.h" +#include "chrome/browser/vr/easing.h" +#include "chrome/browser/vr/elements/ui_element.h" #include "testing/gtest/include/gtest/gtest.h" #define TOLERANCE 0.0001 @@ -23,7 +23,7 @@ EXPECT_NEAR(a.y(), b.y(), TOLERANCE); \ EXPECT_NEAR(a.z(), b.z(), TOLERANCE); -namespace vr_shell { +namespace vr { namespace { @@ -226,4 +226,4 @@ AnchoringTest, ::testing::ValuesIn(anchoring_test_cases)); -} // namespace vr_shell +} // namespace vr
diff --git a/chrome/browser/android/vr_shell/ui_unsupported_mode.h b/chrome/browser/vr/ui_unsupported_mode.h similarity index 69% rename from chrome/browser/android/vr_shell/ui_unsupported_mode.h rename to chrome/browser/vr/ui_unsupported_mode.h index 67c93fe..b144670 100644 --- a/chrome/browser/android/vr_shell/ui_unsupported_mode.h +++ b/chrome/browser/vr/ui_unsupported_mode.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_UNSUPPORTED_MODE_H_ -#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_UNSUPPORTED_MODE_H_ +#ifndef CHROME_BROWSER_VR_UI_UNSUPPORTED_MODE_H_ +#define CHROME_BROWSER_VR_UI_UNSUPPORTED_MODE_H_ -namespace vr_shell { +namespace vr { // Ensure that this stays in sync with VRUnsupportedMode in enums.xml // These values are written to logs. New enum values can be added, but existing @@ -20,6 +20,6 @@ kCount, }; -} // namespace vr_shell +} // namespace vr -#endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_UNSUPPORTED_MODE_H_ +#endif // CHROME_BROWSER_VR_UI_UNSUPPORTED_MODE_H_
diff --git a/chrome/browser/win/jumplist.cc b/chrome/browser/win/jumplist.cc index a2c1d20..810bca60 100644 --- a/chrome/browser/win/jumplist.cc +++ b/chrome/browser/win/jumplist.cc
@@ -750,9 +750,6 @@ &recently_closed_icons_next); } - // TODO(chengx): Remove the UMA histogram after fixing http://crbug.com/40407. - SCOPED_UMA_HISTOGRAM_TIMER("WinJumplist.UpdateJumpListDuration"); - base::ElapsedTimer add_custom_category_timer; // Update the "Most Visited" category of the JumpList if it exists.
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index 235ee70..94ccca2a 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -184,7 +184,7 @@ # output_dir [required]: Directory to output .pak files. Locale .pak files # will always be place in $output_dir/locales # additional_extra_paks: List of extra .pak sources for resources.pak. -# exclude_locale_paks: if set to true, skip chrome_repack_locales. +# locale_whitelist: if set, override repack_whitelist for locale .pak files. # copy_data_to_bundle: # deps: # output_dir: @@ -234,24 +234,26 @@ } } - if (!defined(invoker.exclude_locale_paks) || !invoker.exclude_locale_paks) { - chrome_repack_locales("${target_name}_locales") { - forward_variables_from(invoker, - [ - "copy_data_to_bundle", - "deps", - "repack_whitelist", - "visibility", - ]) + chrome_repack_locales("${target_name}_locales") { + forward_variables_from(invoker, + [ + "copy_data_to_bundle", + "deps", + "visibility", + ]) + if (defined(invoker.locale_whitelist)) { + repack_whitelist = invoker.locale_whitelist + } else if (defined(invoker.repack_whitelist)) { + repack_whitelist = invoker.repack_whitelist + } - input_locales = locales - output_dir = "${invoker.output_dir}/locales" + input_locales = locales + output_dir = "${invoker.output_dir}/locales" - if (is_mac) { - output_locales = locales_as_mac_outputs - } else { - output_locales = locales - } + if (is_mac) { + output_locales = locales_as_mac_outputs + } else { + output_locales = locales } } @@ -260,10 +262,8 @@ public_deps = [ ":${target_name}_100_percent", ":${target_name}_extra", + ":${target_name}_locales", ] - if (!defined(invoker.exclude_locale_paks) || !invoker.exclude_locale_paks) { - public_deps += [ ":${target_name}_locales" ] - } if (enable_hidpi) { public_deps += [ ":${target_name}_200_percent" ] }
diff --git a/chrome/common/crash_keys.cc b/chrome/common/crash_keys.cc index c4b563e0..2f1efe6f2 100644 --- a/chrome/common/crash_keys.cc +++ b/chrome/common/crash_keys.cc
@@ -153,11 +153,6 @@ {kInputEventFilterSendFailure, kSmallSize}, #if defined(OS_CHROMEOS) {kNumberOfUsers, kSmallSize}, - // Temporary for https://crbug.com/629521 - {"mmap_params", kSmallSize}, - {"buffer_size", kSmallSize}, - {"errno", kSmallSize}, - {"number_of_fds", kSmallSize}, #endif #if defined(OS_MACOSX) {mac::kFirstNSException, kMediumSize},
diff --git a/chrome/common/descriptors_android.h b/chrome/common/descriptors_android.h index 9dcf4a1..40c6f6d 100644 --- a/chrome/common/descriptors_android.h +++ b/chrome/common/descriptors_android.h
@@ -11,6 +11,7 @@ enum { #if defined(OS_ANDROID) kAndroidLocalePakDescriptor = kContentIPCDescriptorMax + 1, + kAndroidSecondaryLocalePakDescriptor, kAndroidChrome100PercentPakDescriptor, kAndroidUIResourcesPakDescriptor, kAndroidMinidumpDescriptor,
diff --git a/chrome/renderer/safe_browsing/DEPS b/chrome/renderer/safe_browsing/DEPS index 4db2367..e581dd3 100644 --- a/chrome/renderer/safe_browsing/DEPS +++ b/chrome/renderer/safe_browsing/DEPS
@@ -2,7 +2,6 @@ "+components/safe_browsing/common", "+components/safe_browsing/csd.pb.h", "+components/safe_browsing/renderer", - "+components/safe_browsing/features.h", "+third_party/smhasher", ]
diff --git a/chrome/renderer/safe_browsing/threat_dom_details_browsertest.cc b/chrome/renderer/safe_browsing/threat_dom_details_browsertest.cc index 53f6814..b537f33 100644 --- a/chrome/renderer/safe_browsing/threat_dom_details_browsertest.cc +++ b/chrome/renderer/safe_browsing/threat_dom_details_browsertest.cc
@@ -5,12 +5,12 @@ #include "components/safe_browsing/renderer/threat_dom_details.h" #include <memory> + #include "base/strings/string_split.h" #include "base/strings/stringprintf.h" #include "base/test/scoped_feature_list.h" #include "chrome/test/base/chrome_render_view_test.h" #include "components/safe_browsing/common/safebrowsing_messages.h" -#include "components/safe_browsing/features.h" #include "components/variations/variations_associated_data.h" #include "content/public/renderer/render_view.h" #include "net/base/escape.h"
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 624127d5..9e57343 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3469,7 +3469,6 @@ "//components/ntp_snippets:test_support", "//components/os_crypt:test_support", "//components/resources", - "//components/safe_browsing:features", "//components/safe_browsing_db", "//components/safe_browsing_db:test_database_manager", "//components/safe_json:test_support",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestRule.java index d9151d2..e2002ca 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestRule.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestRule.java
@@ -104,9 +104,9 @@ private boolean mOldChromeHomeFlagValue; protected void beforeStartingActivity() { - // TODO(dgn,mdjones): Chrome restarts when the ChromeHome feature flag value changes. That - // crashes the test so we need to manually set the preference to match the flag before - // staring Chrome. + // Chrome relies on a shared preference to determine if the ChromeHome feature is enabled + // during start up, so we need to manually set the preference to enable ChromeHome before + // starting Chrome. ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance(); mOldChromeHomeFlagValue = prefManager.isChromeHomeEnabled(); prefManager.setChromeHomeEnabled(true);
diff --git a/chrome/test/data/webui/settings/people_page_change_picture_test.js b/chrome/test/data/webui/settings/people_page_change_picture_test.js index 2035e5d1..3ffc0ca 100644 --- a/chrome/test/data/webui/settings/people_page_change_picture_test.js +++ b/chrome/test/data/webui/settings/people_page_change_picture_test.js
@@ -82,7 +82,7 @@ suite('ChangePictureTests', function() { var changePicture = null; var browserProxy = null; - var crPicturePreview = null; + var crPicturePane = null; var crPictureList = null; suiteSetup(function() { @@ -98,8 +98,8 @@ changePicture = document.createElement('settings-change-picture'); document.body.appendChild(changePicture); - crPicturePreview = changePicture.$$('cr-picture-preview'); - assertTrue(!!crPicturePreview); + crPicturePane = changePicture.$$('cr-picture-pane'); + assertTrue(!!crPicturePane); crPictureList = changePicture.$$('cr-picture-list'); assertTrue(!!crPictureList); @@ -121,9 +121,9 @@ return new Promise(function(resolve) { changePicture.async(resolve); }).then(function() { - var camera = crPicturePreview.$$('#camera'); - expectFalse(crPicturePreview.cameraPresent); - expectFalse(crPicturePreview.cameraActive_); + var camera = crPicturePane.$$('#camera'); + expectFalse(crPicturePane.cameraPresent); + expectFalse(crPicturePane.cameraActive_); expectFalse(!!camera && camera.hidden); cr.webUIListenerCallback('camera-presence-changed', true); @@ -132,9 +132,9 @@ changePicture.async(resolve); }); }).then(function() { - var camera = crPicturePreview.$$('#camera'); - expectTrue(crPicturePreview.cameraPresent); - expectFalse(crPicturePreview.cameraActive_); + var camera = crPicturePane.$$('#camera'); + expectTrue(crPicturePane.cameraPresent); + expectFalse(crPicturePane.cameraActive_); expectFalse(!!camera && camera.hidden); var cameraImage = crPictureList.$.cameraImage; @@ -144,12 +144,12 @@ changePicture.async(resolve); }); }).then(function() { - var camera = crPicturePreview.$$('#camera'); - expectTrue(crPicturePreview.cameraActive_); + var camera = crPicturePane.$$('#camera'); + expectTrue(crPicturePane.cameraActive_); assertTrue(!!camera && !camera.hidden); expectEquals(CrPicture.SelectionTypes.CAMERA, changePicture.selectedItem_.dataset.type); - var discard = crPicturePreview.$$('#discard'); + var discard = crPicturePane.$$('#discard'); expectTrue(!discard || discard.hidden); // Ensure that the camera is deactivated if user navigates away. @@ -158,7 +158,7 @@ changePicture.async(resolve); }); }).then(function() { - expectFalse(crPicturePreview.cameraActive_); + expectFalse(crPicturePane.cameraActive_); }); }); @@ -174,8 +174,8 @@ expectEquals(CrPicture.SelectionTypes.PROFILE, changePicture.selectedItem_.dataset.type); - expectFalse(crPicturePreview.cameraActive_); - var discard = crPicturePreview.$$('#discard'); + expectFalse(crPicturePane.cameraActive_); + var discard = crPicturePane.$$('#discard'); expectTrue(!discard || discard.hidden); // Ensure that the selection is restored after navigating away and @@ -200,8 +200,8 @@ expectEquals(CrPicture.SelectionTypes.OLD, changePicture.selectedItem_.dataset.type); expectFalse(oldImage.hidden); - expectFalse(crPicturePreview.cameraActive_); - var discard = crPicturePreview.$$('#discard'); + expectFalse(crPicturePane.cameraActive_); + var discard = crPicturePane.$$('#discard'); assertTrue(!!discard); expectFalse(discard.hidden); }); @@ -220,8 +220,8 @@ expectEquals(CrPicture.SelectionTypes.DEFAULT, changePicture.selectedItem_.dataset.type); expectEquals(firstDefaultImage, changePicture.selectedItem_); - expectFalse(crPicturePreview.cameraActive_); - var discard = crPicturePreview.$$('#discard'); + expectFalse(crPicturePane.cameraActive_); + var discard = crPicturePane.$$('#discard'); expectTrue(!discard || discard.hidden); // Now verify that arrow keys actually select the new image. @@ -250,7 +250,7 @@ expectEquals(CrPicture.SelectionTypes.OLD, changePicture.selectedItem_.dataset.type); - var discardButton = crPicturePreview.$$('#discard button'); + var discardButton = crPicturePane.$$('#discard button'); assertTrue(!!discardButton); MockInteractions.tap(discardButton);
diff --git a/components/favicon/core/large_icon_service.cc b/components/favicon/core/large_icon_service.cc index bb99ce88..72886e7 100644 --- a/components/favicon/core/large_icon_service.cc +++ b/components/favicon/core/large_icon_service.cc
@@ -25,6 +25,7 @@ #include "components/favicon_base/favicon_types.h" #include "components/favicon_base/favicon_util.h" #include "components/image_fetcher/core/request_metadata.h" +#include "net/base/network_change_notifier.h" #include "skia/ext/image_operations.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/size.h" @@ -129,6 +130,7 @@ int desired_size, favicon_base::FaviconRawBitmapResult* raw_result, SkBitmap* bitmap, + GURL* icon_url, favicon_base::FallbackIconStyle* fallback_icon_style) { if (IsDbResultAdequate(db_result, min_source_size)) { gfx::Image image; @@ -144,6 +146,9 @@ if (bitmap) { *bitmap = image.AsBitmap(); } + if (icon_url) { + *icon_url = db_result.icon_url; + } return; } } @@ -205,6 +210,7 @@ favicon_base::FaviconRawBitmapResult raw_bitmap_result_; SkBitmap bitmap_result_; + GURL icon_url_; std::unique_ptr<favicon_base::FallbackIconStyle> fallback_icon_style_; DISALLOW_COPY_AND_ASSIGN(LargeIconWorker); @@ -237,6 +243,7 @@ min_source_size_in_pixel_, desired_size_in_pixel_, raw_bitmap_callback_ ? &raw_bitmap_result_ : nullptr, image_callback_ ? &bitmap_result_ : nullptr, + image_callback_ ? &icon_url_ : nullptr, fallback_icon_style_.get()), base::Bind(&LargeIconWorker::OnIconProcessingComplete, this)); } @@ -256,7 +263,7 @@ if (!bitmap_result_.isNull()) { image_callback_.Run(favicon_base::LargeIconImageResult( - gfx::Image::CreateFrom1xBitmap(bitmap_result_))); + gfx::Image::CreateFrom1xBitmap(bitmap_result_), icon_url_)); return; } image_callback_.Run( @@ -367,6 +374,16 @@ const favicon_base::GoogleFaviconServerCallback& callback) { DCHECK_LE(0, min_source_size_in_pixel); + if (net::NetworkChangeNotifier::IsOffline()) { + // By exiting early when offline, we avoid caching the failure and thus + // allow icon fetches later when coming back online. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::Bind(callback, favicon_base::GoogleFaviconServerRequestStatus:: + FAILURE_CONNECTION_ERROR)); + return; + } + const GURL trimmed_page_url = TrimPageUrlForGoogleServer(page_url); const GURL server_request_url = GetRequestUrlForGoogleServerV2( trimmed_page_url, min_source_size_in_pixel, desired_size_in_pixel, @@ -401,6 +418,10 @@ traffic_annotation); } +void LargeIconService::TouchIconFromGoogleServer(const GURL& icon_url) { + favicon_service_->TouchOnDemandFavicon(icon_url); +} + base::CancelableTaskTracker::TaskId LargeIconService::GetLargeIconOrFallbackStyleImpl( const GURL& page_url,
diff --git a/components/favicon/core/large_icon_service.h b/components/favicon/core/large_icon_service.h index d44ace6..ec79fd54 100644 --- a/components/favicon/core/large_icon_service.h +++ b/components/favicon/core/large_icon_service.h
@@ -102,6 +102,14 @@ const net::NetworkTrafficAnnotationTag& traffic_annotation, const favicon_base::GoogleFaviconServerCallback& callback); + // Update the time that the icon at |icon_url| was requested. This should be + // called after obtaining the icon by GetLargeIcon*OrFallbackStyle() for any + // icon that _may_ originate from the Google favicon server (i.e. if the + // caller uses + // GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache()). This + // postpones the automatic eviction of the favicon from the database. + void TouchIconFromGoogleServer(const GURL& icon_url); + private: base::CancelableTaskTracker::TaskId GetLargeIconOrFallbackStyleImpl( const GURL& page_url,
diff --git a/components/favicon/core/large_icon_service_unittest.cc b/components/favicon/core/large_icon_service_unittest.cc index e048504..9646cd98 100644 --- a/components/favicon/core/large_icon_service_unittest.cc +++ b/components/favicon/core/large_icon_service_unittest.cc
@@ -411,6 +411,7 @@ if (!result.image.IsEmpty()) { returned_bitmap_size_ = base::MakeUnique<gfx::Size>(result.image.ToImageSkia()->size()); + ASSERT_TRUE(result.icon_url.is_valid()); } StoreFallbackStyle(result.fallback_icon_style.get()); }
diff --git a/components/favicon_base/favicon_types.cc b/components/favicon_base/favicon_types.cc index b03f0ec..3e661137 100644 --- a/components/favicon_base/favicon_types.cc +++ b/components/favicon_base/favicon_types.cc
@@ -41,8 +41,9 @@ // -------------------------------------------------------- // LargeIconImageResult -LargeIconImageResult::LargeIconImageResult(const gfx::Image& image_in) - : image(image_in) {} +LargeIconImageResult::LargeIconImageResult(const gfx::Image& image_in, + const GURL& icon_url_in) + : image(image_in), icon_url(icon_url_in) {} LargeIconImageResult::LargeIconImageResult( FallbackIconStyle* fallback_icon_style_in)
diff --git a/components/favicon_base/favicon_types.h b/components/favicon_base/favicon_types.h index 4afec6f..9f47be4 100644 --- a/components/favicon_base/favicon_types.h +++ b/components/favicon_base/favicon_types.h
@@ -103,7 +103,8 @@ // Contains either the gfx::Image if the favicon database has a sufficiently // large favicon bitmap and the style of the fallback icon otherwise. struct LargeIconImageResult { - explicit LargeIconImageResult(const gfx::Image& image_in); + explicit LargeIconImageResult(const gfx::Image& image_in, + const GURL& icon_url_in); // Takes ownership of |fallback_icon_style_in|. explicit LargeIconImageResult(FallbackIconStyle* fallback_icon_style_in); @@ -114,6 +115,9 @@ // large one. gfx::Image image; + // The URL of the containing favicon. Specified only if |image| is not empty. + GURL icon_url; + // The fallback icon style if a sufficiently large icon isn't available. This // uses the dominant color of a smaller icon as the background if available. std::unique_ptr<FallbackIconStyle> fallback_icon_style;
diff --git a/components/feature_engagement_tracker/public/event_constants.cc b/components/feature_engagement_tracker/public/event_constants.cc index 54397564..3ada90e 100644 --- a/components/feature_engagement_tracker/public/event_constants.cc +++ b/components/feature_engagement_tracker/public/event_constants.cc
@@ -9,7 +9,6 @@ namespace events { #if defined(OS_WIN) || defined(OS_LINUX) -const char kNewTabOpened[] = "new_tab_opened"; const char kOmniboxInteraction[] = "omnibox_used"; const char kHistoryDeleted[] = "history_deleted"; @@ -18,6 +17,19 @@ const char kSessionTime[] = "session_time"; #endif // defined(OS_WIN) || defined(OS_LINUX) +#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) +const char kNewTabOpened[] = "new_tab_opened"; +#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) + +#if defined(OS_IOS) +const char kChromeOpened[] = "chrome_opened"; +const char kIncognitoTabOpened[] = "incognito_tab_opened"; +const char kClearedBrowsingData[] = "cleared_browsing_data"; +const char kAddedItemToReadingList[] = "added_item_to_reading_list"; +const char kViewedReadingList[] = "viewed_reading_list"; +const char kOpenedReadingListItem[] = "opened_reading_list_item"; +#endif // defined(OS_IOS) + } // namespace events } // namespace feature_engagement_tracker
diff --git a/components/feature_engagement_tracker/public/event_constants.h b/components/feature_engagement_tracker/public/event_constants.h index 0cf15a61..d932c7e 100644 --- a/components/feature_engagement_tracker/public/event_constants.h +++ b/components/feature_engagement_tracker/public/event_constants.h
@@ -15,8 +15,6 @@ // All the events declared below are the string names // of deferred onboarding events for the New Tab. -// The user has opened a new tab. -extern const char kNewTabOpened[]; // The user has interacted with the omnibox. extern const char kOmniboxInteraction[]; @@ -36,6 +34,38 @@ #endif // defined(OS_WIN) || defined(OS_LINUX) +#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) +// This event is included in the deferred onboarding events for the New Tab +// described above, but it is also used on iOS, so it must be compiled +// separately. + +// The user has opened a new tab. +extern const char kNewTabOpened[]; + +#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) + +#if defined(OS_IOS) + +// The user has opened Chrome (cold start or from background). +extern const char kChromeOpened[]; + +// The user has opened an incognito tab. +extern const char kIncognitoTabOpened[]; + +// The user has cleared their browsing data. +extern const char kClearedBrowsingData[]; + +// The user has added an item to their reading list. +extern const char kAddedItemToReadingList[]; + +// The user has viewed their reading list. +extern const char kViewedReadingList[]; + +// The user has opened an item in their reading list. +extern const char kOpenedReadingListItem[]; + +#endif // defined(OS_IOS) + } // namespace events } // namespace feature_engagement_tracker
diff --git a/components/feature_engagement_tracker/public/feature_constants.cc b/components/feature_engagement_tracker/public/feature_constants.cc index 4b945a4..066bcdf28 100644 --- a/components/feature_engagement_tracker/public/feature_constants.cc +++ b/components/feature_engagement_tracker/public/feature_constants.cc
@@ -32,4 +32,13 @@ base::FEATURE_DISABLED_BY_DEFAULT}; #endif // defined(OS_WIN) || defined(OS_LINUX) +#if defined(OS_IOS) +const base::Feature kIPHNewTabTipFeature{"IPH_NewTabTip", + base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kIPHNewIncognitoTabTipFeature{ + "IPH_NewIncognitoTabTip", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kIPHBadgedReadingListFeature{ + "IPH_BadgedReadingList", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif // defined(OS_IOS) + } // namespace feature_engagement_tracker
diff --git a/components/feature_engagement_tracker/public/feature_constants.h b/components/feature_engagement_tracker/public/feature_constants.h index 04ff61a..c0440fc 100644 --- a/components/feature_engagement_tracker/public/feature_constants.h +++ b/components/feature_engagement_tracker/public/feature_constants.h
@@ -10,7 +10,7 @@ namespace feature_engagement_tracker { -// A feature for enabling a demonstration mode for In-Product Help. +// A feature for enabling a demonstration mode for In-Product Help (IPH). extern const base::Feature kIPHDemoMode; // A feature to ensure all arrays can contain at least one feature. @@ -32,6 +32,12 @@ extern const base::Feature kIPHNewTabFeature; #endif // defined(OS_WIN) || defined(OS_LINUX) +#if defined(OS_IOS) +extern const base::Feature kIPHNewTabTipFeature; +extern const base::Feature kIPHNewIncognitoTabTipFeature; +extern const base::Feature kIPHBadgedReadingListFeature; +#endif // defined(OS_IOS) + } // namespace feature_engagement_tracker #endif // COMPONENTS_FEATURE_ENGAGEMENT_TRACKER_PUBLIC_FEATURE_CONSTANTS_H_
diff --git a/components/network_session_configurator/browser/network_session_configurator.cc b/components/network_session_configurator/browser/network_session_configurator.cc index 050068e..865e8d84 100644 --- a/components/network_session_configurator/browser/network_session_configurator.cc +++ b/components/network_session_configurator/browser/network_session_configurator.cc
@@ -233,8 +233,9 @@ return 0; } -net::QuicVersion GetQuicVersion(const VariationParameters& quic_trial_params) { - return network_session_configurator::ParseQuicVersion( +net::QuicVersionVector GetQuicVersions( + const VariationParameters& quic_trial_params) { + return network_session_configurator::ParseQuicVersions( GetVariationParam(quic_trial_params, "quic_version")); } @@ -306,28 +307,35 @@ params->quic_user_agent_id = quic_user_agent_id; - net::QuicVersion version = GetQuicVersion(quic_trial_params); - if (version != net::QUIC_VERSION_UNSUPPORTED) { - net::QuicVersionVector supported_versions; - supported_versions.push_back(version); + net::QuicVersionVector supported_versions = + GetQuicVersions(quic_trial_params); + if (!supported_versions.empty()) params->quic_supported_versions = supported_versions; - } } } // anonymous namespace namespace network_session_configurator { -net::QuicVersion ParseQuicVersion(const std::string& quic_version) { - net::QuicVersionVector supported_versions = net::AllSupportedVersions(); - for (size_t i = 0; i < supported_versions.size(); ++i) { - net::QuicVersion version = supported_versions[i]; - if (net::QuicVersionToString(version) == quic_version) { - return version; +net::QuicVersionVector ParseQuicVersions(const std::string& quic_versions) { + net::QuicVersionVector supported_versions; + net::QuicVersionVector all_supported_versions = net::AllSupportedVersions(); + + for (const base::StringPiece& version : base::SplitStringPiece( + quic_versions, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { + auto it = all_supported_versions.begin(); + while (it != all_supported_versions.end()) { + if (net::QuicVersionToString(*it) == version) { + supported_versions.push_back(*it); + // Remove the supported version to deduplicate versions extracted from + // |quic_versions|. + all_supported_versions.erase(it); + continue; + } + it++; } } - - return net::QUIC_VERSION_UNSUPPORTED; + return supported_versions; } void ParseCommandLineAndFieldTrials(const base::CommandLine& command_line, @@ -378,13 +386,11 @@ } if (command_line.HasSwitch(switches::kQuicVersion)) { - net::QuicVersion version = network_session_configurator::ParseQuicVersion( - command_line.GetSwitchValueASCII(switches::kQuicVersion)); - if (version != net::QUIC_VERSION_UNSUPPORTED) { - net::QuicVersionVector supported_versions; - supported_versions.push_back(version); + net::QuicVersionVector supported_versions = + network_session_configurator::ParseQuicVersions( + command_line.GetSwitchValueASCII(switches::kQuicVersion)); + if (!supported_versions.empty()) params->quic_supported_versions = supported_versions; - } } if (command_line.HasSwitch(switches::kOriginToForceQuicOn)) {
diff --git a/components/network_session_configurator/browser/network_session_configurator.h b/components/network_session_configurator/browser/network_session_configurator.h index 7c7f25d..69e064bf3 100644 --- a/components/network_session_configurator/browser/network_session_configurator.h +++ b/components/network_session_configurator/browser/network_session_configurator.h
@@ -18,9 +18,8 @@ // Helper functions to configure HttpNetworkSession::Params based on field // trials and command line. -// Parse serialized QUIC version string. -// Return QUIC_VERSION_UNSUPPORTED on failure. -net::QuicVersion ParseQuicVersion(const std::string& quic_version); +// Parse serialized QUIC versions string. +net::QuicVersionVector ParseQuicVersions(const std::string& quic_versions); // Configure |params| based on field trials and command line, // and forcing (policy or other command line) arguments.
diff --git a/components/network_session_configurator/browser/network_session_configurator_unittest.cc b/components/network_session_configurator/browser/network_session_configurator_unittest.cc index 94e81d0..b04421d 100644 --- a/components/network_session_configurator/browser/network_session_configurator_unittest.cc +++ b/components/network_session_configurator/browser/network_session_configurator_unittest.cc
@@ -306,6 +306,42 @@ } TEST_F(NetworkSessionConfiguratorTest, + MultipleQuicVersionFromFieldTrialParams) { + std::map<std::string, std::string> field_trial_params; + std::string quic_versions = + net::QuicVersionToString(net::AllSupportedVersions().front()) + "," + + net::QuicVersionToString(net::AllSupportedVersions().back()); + + field_trial_params["quic_version"] = quic_versions; + variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params); + base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled"); + + ParseFieldTrials(); + + net::QuicVersionVector supported_versions; + supported_versions.push_back(net::AllSupportedVersions().front()); + supported_versions.push_back(net::AllSupportedVersions().back()); + EXPECT_EQ(supported_versions, params_.quic_supported_versions); +} + +TEST_F(NetworkSessionConfiguratorTest, SameQuicVersionsFromFieldTrialParams) { + std::map<std::string, std::string> field_trial_params; + std::string quic_versions = + net::QuicVersionToString(net::AllSupportedVersions().front()) + "," + + net::QuicVersionToString(net::AllSupportedVersions().front()); + + field_trial_params["quic_version"] = quic_versions; + variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params); + base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled"); + + ParseFieldTrials(); + + net::QuicVersionVector supported_versions; + supported_versions.push_back(net::AllSupportedVersions().front()); + EXPECT_EQ(supported_versions, params_.quic_supported_versions); +} + +TEST_F(NetworkSessionConfiguratorTest, QuicConnectionOptionsFromFieldTrialParams) { std::map<std::string, std::string> field_trial_params; field_trial_params["connection_options"] = "TIME,TBBR,REJ";
diff --git a/components/ntp_snippets/content_suggestions_service.cc b/components/ntp_snippets/content_suggestions_service.cc index aced3bb3..1ce55f30 100644 --- a/components/ntp_snippets/content_suggestions_service.cc +++ b/components/ntp_snippets/content_suggestions_service.cc
@@ -233,6 +233,9 @@ RecordFaviconFetchResult(continue_to_google_server ? FaviconFetchResult::SUCCESS_CACHED : FaviconFetchResult::SUCCESS_FETCHED); + // Update the time when the icon was last requested - postpone thus the + // automatic eviction of the favicon from the favicon database. + large_icon_service_->TouchIconFromGoogleServer(result.icon_url); return; }
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc index 8751a33..233edf1 100644 --- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc +++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
@@ -64,11 +64,11 @@ // defined by the enum FetchingInterval. The default time intervals defined in // the arrays can be overridden using different variation parameters. const double kDefaultFetchingIntervalHoursRareNtpUser[] = {192.0, 96.0, 48.0, - 24.0, 12.0, 8.0}; + 24.0, 10.0, 10.0}; const double kDefaultFetchingIntervalHoursActiveNtpUser[] = {96.0, 48.0, 48.0, - 24.0, 12.0, 8.0}; + 24.0, 10.0, 10.0}; const double kDefaultFetchingIntervalHoursActiveSuggestionsConsumer[] = { - 48.0, 24.0, 24.0, 6.0, 2.0, 1.0}; + 48.0, 24.0, 24.0, 6.0, 1.0, 1.0}; // For a simple comparision: fetching intervals that emulate the state really // rolled out to 100% M58 Stable. Used for evaluation of later changes. DBL_MAX @@ -652,6 +652,13 @@ return; } + if (net::NetworkChangeNotifier::IsOffline()) { + // Do not let a request fail due to lack of internet connection. Then, such + // a failure would get logged and further requests would be blocked for a + // while (even after becoming online). + return; + } + if (BackgroundFetchesDisabled(trigger)) { return; }
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc index e59eb4a..05902ca 100644 --- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc +++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
@@ -103,6 +103,13 @@ MOCK_METHOD0(OnSignInStateChanged, void()); }; +class FakeOfflineNetworkChangeNotifier : public net::NetworkChangeNotifier { + public: + ConnectionType GetCurrentConnectionType() const override { + return NetworkChangeNotifier::CONNECTION_NONE; + } +}; + } // namespace class RemoteSuggestionsSchedulerImplTest : public ::testing::Test { @@ -664,8 +671,6 @@ // Pretend we are on WiFi (already done in ctor, we make it explicit here). EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection()) .WillRepeatedly(Return(true)); - // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 8h time - // interval by default for shown trigger on WiFi. // Initial scheduling after being enabled. EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); @@ -680,12 +685,15 @@ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); signal_fetch_done.Run(Status::Success()); - // Open NTP again after too short delay. This time no fetch is executed. - test_clock()->Advance(base::TimeDelta::FromHours(1)); + // Open NTP again after too short delay (one minute missing). UserClassifier + // defaults to UserClass::ACTIVE_NTP_USER - we work with the default interval + // for this class here. This time no fetch is executed. + test_clock()->Advance(base::TimeDelta::FromHours(10) - + base::TimeDelta::FromMinutes(1)); scheduler()->OnNTPOpened(); // Open NTP after another delay, now together long enough to issue a fetch. - test_clock()->Advance(base::TimeDelta::FromHours(7)); + test_clock()->Advance(base::TimeDelta::FromMinutes(2)); EXPECT_CALL(*provider(), RefetchInTheBackground(_)); scheduler()->OnNTPOpened(); } @@ -892,4 +900,22 @@ scheduler()->OnBrowserColdStart(); } +TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldIgnoreSignalsWhenOffline) { + // Simulate being offline. NetworkChangeNotifier is a singleton, thus, this + // instance is actually globally accessible (from the static function + // NetworkChangeNotifier::IsOffline() that is called from the scheduler). + FakeOfflineNetworkChangeNotifier fake; + + // Activating the provider should schedule the persistent background fetches. + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); + scheduler()->OnProviderActivated(); + + // All signals are ignored because of being offline. + EXPECT_CALL(*provider(), RefetchInTheBackground(_)).Times(0); + scheduler()->OnPersistentSchedulerWakeUp(); + scheduler()->OnNTPOpened(); + scheduler()->OnBrowserForegrounded(); + scheduler()->OnBrowserColdStart(); +} + } // namespace ntp_snippets
diff --git a/components/ntp_tiles/icon_cacher_impl.cc b/components/ntp_tiles/icon_cacher_impl.cc index 48769f33..00bb3b16d 100644 --- a/components/ntp_tiles/icon_cacher_impl.cc +++ b/components/ntp_tiles/icon_cacher_impl.cc
@@ -210,9 +210,13 @@ const GURL& page_url, const favicon_base::LargeIconResult& result) { if (!HasResultDefaultBackgroundColor(result)) { - // We should only fetch for default "gray" tiles so that we never overrite - // any favicon of any size. + // There is already an icon, there is nothing to do. (We should only fetch + // for default "gray" tiles so that we never overwrite any favicon of any + // size.) FinishRequestAndNotifyIconAvailable(page_url, /*newly_available=*/false); + // Update the time when the icon was last requested - postpone thus the + // automatic eviction of the favicon from the favicon database. + large_icon_service_->TouchIconFromGoogleServer(result.bitmap.icon_url); return; }
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn index 292331a..713da91 100644 --- a/components/password_manager/core/browser/BUILD.gn +++ b/components/password_manager/core/browser/BUILD.gn
@@ -104,6 +104,7 @@ "password_manager_metrics_util.h", "password_manager_util.cc", "password_manager_util.h", + "password_reuse_defines.h", "password_store.cc", "password_store.h", "password_store_change.cc", @@ -141,8 +142,6 @@ if (password_reuse_detection_support) { sources += [ - "hash_password_manager.cc", - "hash_password_manager.h", "password_reuse_detection_manager.cc", "password_reuse_detection_manager.h", "password_reuse_detector.cc", @@ -153,6 +152,8 @@ if (is_win || is_mac || (is_linux && !is_chromeos)) { sources += [ + "hash_password_manager.cc", + "hash_password_manager.h", "password_store_signin_notifier.cc", "password_store_signin_notifier.h", ] @@ -355,11 +356,13 @@ } if (password_reuse_detection_support) { sources += [ - "hash_password_manager_unittest.cc", "password_reuse_detection_manager_unittest.cc", "password_reuse_detector_unittest.cc", ] } + if (is_win || is_mac || (is_linux && !is_chromeos)) { + sources += [ "hash_password_manager_unittest.cc" ] + } deps = [ ":test_support", ":unit_tests_bundle_data",
diff --git a/components/password_manager/core/browser/password_reuse_defines.h b/components/password_manager/core/browser/password_reuse_defines.h new file mode 100644 index 0000000..99c8f73 --- /dev/null +++ b/components/password_manager/core/browser/password_reuse_defines.h
@@ -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. + +#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_REUSE_DEFINES_H_ +#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_REUSE_DEFINES_H_ + +#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || \ + (defined(OS_LINUX) && !defined(OS_CHROMEOS)) +// Enable the detection when the sync password is typed not on the sync domain. +#define SYNC_PASSWORD_REUSE_DETECTION_ENABLED +#endif + +#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_REUSE_DEFINES_H_
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc index 6047979..44cfc53 100644 --- a/components/password_manager/core/browser/password_store.cc +++ b/components/password_manager/core/browser/password_store.cc
@@ -118,7 +118,7 @@ bool PasswordStore::Init(const syncer::SyncableService::StartSyncFlare& flare, PrefService* prefs) { ScheduleTask(base::Bind(&PasswordStore::InitOnBackgroundThread, this, flare)); -#if !defined(OS_ANDROID) && !defined(OS_IOS) +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) hash_password_manager_.set_prefs(prefs); ScheduleTask( base::Bind(&PasswordStore::SaveSyncPasswordHashImpl, this, @@ -315,7 +315,7 @@ // The AffiliationService must be destroyed from the main thread. affiliated_match_helper_.reset(); shutdown_called_ = true; -#if !defined(OS_ANDROID) && !defined(OS_IOS) && !defined(OS_CHROMEOS) +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) if (notifier_) notifier_->UnsubscribeFromSigninEvents(); #endif @@ -337,8 +337,9 @@ ScheduleTask(base::Bind(&PasswordStore::CheckReuseImpl, this, base::Passed(&check_reuse_request), input, domain)); } +#endif -#if !defined(OS_CHROMEOS) +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) void PasswordStore::SaveSyncPasswordHash(const base::string16& password) { // TODO(crbug.com/657041): Log success of saving password hash to UMA. hash_password_manager_.SavePasswordHash(password); @@ -361,7 +362,6 @@ notifier_->SubscribeToSigninEvents(this); } #endif -#endif PasswordStore::~PasswordStore() { DCHECK(shutdown_called_);
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h index 0db72af..5616935 100644 --- a/components/password_manager/core/browser/password_store.h +++ b/components/password_manager/core/browser/password_store.h
@@ -17,6 +17,7 @@ #include "base/sequenced_task_runner.h" #include "base/time/time.h" #include "components/keyed_service/core/refcounted_keyed_service.h" +#include "components/password_manager/core/browser/password_reuse_defines.h" #include "components/password_manager/core/browser/password_store_change.h" #include "components/password_manager/core/browser/password_store_sync.h" #include "components/sync/model/syncable_service.h" @@ -593,10 +594,10 @@ // TODO(crbug.com/706392): Fix password reuse detection for Android. #if !defined(OS_ANDROID) && !defined(OS_IOS) std::unique_ptr<PasswordReuseDetector> reuse_detector_; - HashPasswordManager hash_password_manager_; -#if !defined(OS_CHROMEOS) - std::unique_ptr<PasswordStoreSigninNotifier> notifier_; #endif +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) + std::unique_ptr<PasswordStoreSigninNotifier> notifier_; + HashPasswordManager hash_password_manager_; #endif bool is_propagating_password_changes_to_web_credentials_enabled_;
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc index 6d2eab58..4bf7312cc 100644 --- a/components/password_manager/core/browser/password_store_unittest.cc +++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -998,8 +998,9 @@ store->ShutdownOnUIThread(); base::RunLoop().RunUntilIdle(); } +#endif -#if !defined(OS_CHROMEOS) +#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) TEST_F(PasswordStoreTest, SavingClearingSyncPassword) { scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( base::SequencedTaskRunnerHandle::Get(), @@ -1063,6 +1064,5 @@ base::RunLoop().RunUntilIdle(); } #endif -#endif } // namespace password_manager
diff --git a/components/password_manager/core/browser/sql_table_builder.cc b/components/password_manager/core/browser/sql_table_builder.cc index caa654be..709c2add 100644 --- a/components/password_manager/core/browser/sql_table_builder.cc +++ b/components/password_manager/core/browser/sql_table_builder.cc
@@ -235,7 +235,8 @@ return ++sealed_version_; } -bool SQLTableBuilder::MigrateFrom(unsigned old_version, sql::Connection* db) { +bool SQLTableBuilder::MigrateFrom(unsigned old_version, + sql::Connection* db) const { for (; old_version < sealed_version_; ++old_version) { if (!MigrateToNextFrom(old_version, db)) return false; @@ -244,7 +245,7 @@ return true; } -bool SQLTableBuilder::CreateTable(sql::Connection* db) { +bool SQLTableBuilder::CreateTable(sql::Connection* db) const { DCHECK(IsVersionLastAndSealed(sealed_version_)); DCHECK(!constraints_.empty()); @@ -354,7 +355,7 @@ } bool SQLTableBuilder::MigrateToNextFrom(unsigned old_version, - sql::Connection* db) { + sql::Connection* db) const { DCHECK_LT(old_version, sealed_version_); DCHECK_GE(old_version, 0u); DCHECK(IsVersionLastAndSealed(sealed_version_)); @@ -456,7 +457,7 @@ } bool SQLTableBuilder::MigrateIndicesToNextFrom(unsigned old_version, - sql::Connection* db) { + sql::Connection* db) const { DCHECK_LT(old_version, sealed_version_); DCHECK(IsVersionLastAndSealed(sealed_version_)); sql::Transaction transaction(db);
diff --git a/components/password_manager/core/browser/sql_table_builder.h b/components/password_manager/core/browser/sql_table_builder.h index 6cf78cca..da1c8920 100644 --- a/components/password_manager/core/browser/sql_table_builder.h +++ b/components/password_manager/core/browser/sql_table_builder.h
@@ -100,13 +100,13 @@ // Assuming that the database connected through |db| contains a table called // |table_name_| in a state described by version |old_version|, migrates it to // the current version, which must be sealed. Returns true on success. - bool MigrateFrom(unsigned old_version, sql::Connection* db); + bool MigrateFrom(unsigned old_version, sql::Connection* db) const; // If |db| connects to a database where table |table_name_| already exists, // this is a no-op and returns true. Otherwise, |table_name_| is created in a // state described by the current version known to the builder. The current // version must be sealed. Returns true on success. - bool CreateTable(sql::Connection* db); + bool CreateTable(sql::Connection* db) const; // Returns the comma-separated list of all column names present in the last // version. The last version must be sealed. @@ -151,14 +151,15 @@ // |table_name_| in a state described by version |old_version|, migrates it to // version |old_version + 1|. The current version known to the builder must be // at least |old_version + 1| and sealed. Returns true on success. - bool MigrateToNextFrom(unsigned old_version, sql::Connection* db); + bool MigrateToNextFrom(unsigned old_version, sql::Connection* db) const; // Assuming that the database connected through |db| contains a table called // |table_name_| in a state described by version |old_version|, migrates it // indices to version |old_version + 1|. The current version known to the // builder must be at least |old_version + 1| and sealed. Returns true on // success. - bool MigrateIndicesToNextFrom(unsigned old_version, sql::Connection* db); + bool MigrateIndicesToNextFrom(unsigned old_version, + sql::Connection* db) const; // Looks up column named |name| in |columns_|. If present, returns the last // one.
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 99f9c91f..b457811 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -1536,7 +1536,9 @@ If this policy is left not set Google Sync will be available for the user to choose whether to use it or not. - To fully disable Google Sync, it is recommended that you disable the Google Sync service in the Google Admin console.''', + To fully disable Google Sync, it is recommended that you disable the Google Sync service in the Google Admin console. + + This policy should not be enabled when <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME">RoamingProfileSupportEnabled</ph> policy is set to enabled as that feature shares the same client side functionality. The Google-hosted synchronization is disabled in this case completely.''', 'arc_support': 'Disabling Google Sync will cause Android Backup and Restore to not function properly.', }, { @@ -1552,13 +1554,11 @@ 'id': 358, 'caption': '''Enable the creation of roaming copies for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profile data''', 'tags': ['local-data-access'], - 'desc': '''If you enable this setting, the settings stored in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profiles like bookmarks, autofill data, passwords, etc. will also be written to a file stored in the Roaming user profile folder or a location specified by the Administrator through the <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME">$1<ex>RoamingProfileLocation</ex></ph> policy. + 'desc': '''If you enable this setting, the settings stored in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profiles like bookmarks, autofill data, passwords, etc. will also be written to a file stored in the Roaming user profile folder or a location specified by the Administrator through the <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME">$1<ex>RoamingProfileLocation</ex></ph> policy. Enabling this policy disables cloud sync. - Google Sync is automatically disabled when this policy is enabled. + If this policy is disabled or left not set only the regular local profiles will be used. - To prevent accidental data leaks it is advisable to also set the <ph name="SIGNIN_ALLOWED_POLICY_NAME">$1<ex>SigninAllowed</ex></ph> policy to False. - - If this policy is disabled or left not set only the regular local profiles will be used.''', + The <ph name="SYNC_DISABLED_POLICY_NAME">SyncDisabled</ph> policy disables all data synchronization, overriding RoamingProfileSupportEnabled.''', 'label': '''Enable the creation of roaming copies for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profile data.''', }, {
diff --git a/components/resources/safe_browsing_resources.grdp b/components/resources/safe_browsing_resources.grdp index 1b2d2115..ae40ba6 100644 --- a/components/resources/safe_browsing_resources.grdp +++ b/components/resources/safe_browsing_resources.grdp
@@ -2,5 +2,4 @@ <grit-part> <include name="IDR_SAFE_BROWSING_HTML" file="..\..\components\safe_browsing\web_ui\resources\safe_browsing.html" type="BINDATA" /> <include name="IDR_SAFE_BROWSING_CSS" file="..\..\components\safe_browsing\web_ui\resources\safe_browsing.css" type="BINDATA" /> - <include name="IDR_SAFE_BROWSING_JS" file="..\..\components\safe_browsing\web_ui\resources\safe_browsing.js" type="BINDATA" /> </grit-part>
diff --git a/components/safe_browsing/BUILD.gn b/components/safe_browsing/BUILD.gn index 7b090bc..0f05c746 100644 --- a/components/safe_browsing/BUILD.gn +++ b/components/safe_browsing/BUILD.gn
@@ -24,7 +24,6 @@ ] deps = [ ":base_ping_manager", - ":features", "//base:base", "//base:i18n", "//components/safe_browsing/common:safe_browsing_prefs", @@ -70,14 +69,3 @@ "//testing/gtest", ] } - -static_library("features") { - sources = [ - "features.cc", - "features.h", - ] - - deps = [ - "//base:base", - ] -}
diff --git a/components/safe_browsing/features.cc b/components/safe_browsing/features.cc deleted file mode 100644 index 20a49b1..0000000 --- a/components/safe_browsing/features.cc +++ /dev/null
@@ -1,68 +0,0 @@ -// Copyright (c) 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/safe_browsing/features.h" - -#include <stddef.h> -#include <algorithm> -#include <utility> -#include <vector> -#include "base/feature_list.h" - -#include "base/macros.h" -#include "base/values.h" -namespace safe_browsing { -// Please define any new SafeBrowsing related features in this file, and add -// them to the ExperimentalFeaturesList below to start displaying their status -// on the chrome://safe-browsing page. -const base::Feature kLocalDatabaseManagerEnabled{ - "SafeBrowsingV4LocalDatabaseManagerEnabled", - base::FEATURE_DISABLED_BY_DEFAULT}; - -const base::Feature kV4OnlyEnabled{"SafeBrowsingV4OnlyEnabled", - base::FEATURE_DISABLED_BY_DEFAULT}; -// This Feature specifies which non-resource HTML Elements to collect based on -// their tag and attributes. It's a single param containing a comma-separated -// list of pairs. For example: "tag1,id,tag1,height,tag2,foo" - this will -// collect elements with tag "tag1" that have attribute "id" or "height" set, -// and elements of tag "tag2" if they have attribute "foo" set. All tag names -// and attributes should be lower case. -const base::Feature kThreatDomDetailsTagAndAttributeFeature{ - "ThreatDomDetailsTagAttributes", base::FEATURE_DISABLED_BY_DEFAULT}; - -namespace { -// List of experimental features. Boolean value for each list member should be -// set to True if the experiment is currently running at a probability other -// than 1 or 0, or to False otherwise. -std::vector<std::pair<const base::Feature*, bool>> ExperimentalFeaturesList = { - std::make_pair(&kLocalDatabaseManagerEnabled, true), - std::make_pair(&kV4OnlyEnabled, true), - std::make_pair(&kThreatDomDetailsTagAndAttributeFeature, true)}; - -// Adds the name and the enabled/disabled status of a given feature. -void AddFeatureAndAvailability(const base::Feature* expFeature, - base::ListValue* paramList) { - paramList->GetList().push_back(base::Value(expFeature->name)); - if (base::FeatureList::IsEnabled(*expFeature)) { - paramList->GetList().push_back(base::Value("Enabled")); - } else { - paramList->GetList().push_back(base::Value("Disabled")); - } -} -} // namespace -// Returns the list of the experimental features that are enabled or disabled, -// as part of currently running Safe Browsing experiments. -base::ListValue GetFeatureStatusList() { - base::ListValue paramList; - for (std::vector<std::pair<const base::Feature*, bool>>::iterator it = - ExperimentalFeaturesList.begin(); - it != ExperimentalFeaturesList.end(); ++it) { - if ((*it).second) { - AddFeatureAndAvailability((*it).first, ¶mList); - } - } - return paramList; -} - -} // namespace safe_browsing
diff --git a/components/safe_browsing/features.h b/components/safe_browsing/features.h deleted file mode 100644 index c4a0a12..0000000 --- a/components/safe_browsing/features.h +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright (c) 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_SAFE_BROWSING_FEATURES_H_ -#define COMPONENTS_SAFE_BROWSING_FEATURES_H_ - -#include <stddef.h> -#include <algorithm> -#include <utility> -#include <vector> - -#include "base/feature_list.h" -#include "base/macros.h" -#include "base/values.h" -namespace base { -class ListValue; -} // namespace base - -namespace safe_browsing { -// Features list -extern const base::Feature kLocalDatabaseManagerEnabled; -extern const base::Feature kV4OnlyEnabled; -extern const base::Feature kThreatDomDetailsTagAndAttributeFeature; - -base::ListValue GetFeatureStatusList(); - -#endif // COMPONENTS_SAFE_BROWSING_FEATURES_H_ -} // namespace safe_browsing
diff --git a/components/safe_browsing/renderer/BUILD.gn b/components/safe_browsing/renderer/BUILD.gn index 02239b4..da1a4886 100644 --- a/components/safe_browsing/renderer/BUILD.gn +++ b/components/safe_browsing/renderer/BUILD.gn
@@ -12,7 +12,6 @@ ] deps = [ "//base", - "//components/safe_browsing:features", "//components/safe_browsing/common:common", "//content/public/renderer", "//ipc",
diff --git a/components/safe_browsing/renderer/DEPS b/components/safe_browsing/renderer/DEPS index 15dc39e..b7cc985c 100644 --- a/components/safe_browsing/renderer/DEPS +++ b/components/safe_browsing/renderer/DEPS
@@ -1,8 +1,7 @@ include_rules = [ "+content/public/renderer", - "+components/safe_browsing", "+third_party/WebKit/public/platform", "+third_party/WebKit/public/web", "+ipc", "+mojo/public/cpp", -] +] \ No newline at end of file
diff --git a/components/safe_browsing/renderer/threat_dom_details.cc b/components/safe_browsing/renderer/threat_dom_details.cc index 9fd9af5..c3d712b 100644 --- a/components/safe_browsing/renderer/threat_dom_details.cc +++ b/components/safe_browsing/renderer/threat_dom_details.cc
@@ -16,7 +16,6 @@ #include "base/strings/stringprintf.h" #include "components/safe_browsing/common/safebrowsing_messages.h" #include "components/safe_browsing/common/safebrowsing_types.h" -#include "components/safe_browsing/features.h" #include "content/public/renderer/render_frame.h" #include "third_party/WebKit/public/platform/WebString.h" #include "third_party/WebKit/public/web/WebDocument.h" @@ -36,6 +35,15 @@ // messages generated by ThreatDOMDetails. using ElementToNodeMap = std::map<blink::WebNode, size_t>; +// This Feature specifies which non-resource HTML Elements to collect based on +// their tag and attributes. It's a single param containing a comma-separated +// list of pairs. For example: "tag1,id,tag1,height,tag2,foo" - this will +// collect elements with tag "tag1" that have attribute "id" or "height" set, +// and elements of tag "tag2" if they have attribute "foo" set. All tag names +// and attributes should be lower case. +const base::Feature kThreatDomDetailsTagAndAttributeFeature{ + "ThreatDomDetailsTagAttributes", base::FEATURE_DISABLED_BY_DEFAULT}; + // The name of the param containing the tags and attributes list. const char kTagAndAttributeParamName[] = "tag_attribute_csv";
diff --git a/components/safe_browsing/renderer/threat_dom_details.h b/components/safe_browsing/renderer/threat_dom_details.h index 76c32a3d..0f48d0b 100644 --- a/components/safe_browsing/renderer/threat_dom_details.h +++ b/components/safe_browsing/renderer/threat_dom_details.h
@@ -19,6 +19,7 @@ namespace safe_browsing { +extern const base::Feature kThreatDomDetailsTagAndAttributeFeature; extern const char kTagAndAttributeParamName[]; // Represents the tag name of an HTML Element and its associated attributes.
diff --git a/components/safe_browsing/web_ui/BUILD.gn b/components/safe_browsing/web_ui/BUILD.gn index f1234f9..0c24b46 100644 --- a/components/safe_browsing/web_ui/BUILD.gn +++ b/components/safe_browsing/web_ui/BUILD.gn
@@ -13,7 +13,6 @@ "//base", "//components/resources:components_resources_grit", "//components/resources:components_scaled_resources_grit", - "//components/safe_browsing:features", "//components/strings:components_strings_grit", "//content/public/browser", "//net",
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.css b/components/safe_browsing/web_ui/resources/safe_browsing.css index 93c0cfb..0bacdd7f 100644 --- a/components/safe_browsing/web_ui/resources/safe_browsing.css +++ b/components/safe_browsing/web_ui/resources/safe_browsing.css
@@ -2,28 +2,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. */ -body { - color: rgb(48, 57, 66); - margin:15px; -} + p { white-space: pre-wrap; } - -.experiments { - background-color: #fbfbfb; - border: 1px solid #cecece; - border-radius: 3px; - padding: 19px; - line-height: 1.5; -} - -#sbTitle { - font-size: 2em; - margin-bottom: 0.8em; -} - -h1, h2, h3, p { - font-weight: normal; - line-height: 1; - }
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.html b/components/safe_browsing/web_ui/resources/safe_browsing.html index 2578e08..31ae761 100644 --- a/components/safe_browsing/web_ui/resources/safe_browsing.html +++ b/components/safe_browsing/web_ui/resources/safe_browsing.html
@@ -8,17 +8,10 @@ <script src="chrome://resources/js/cr.js"></script> <script src="chrome://resources/js/load_time_data.js"></script> <script src="chrome://resources/js/util.js"></script> - <script src="safe_browsing.js"></script> </head> <body> -<div id="header"> - <h1 id="sbTitle">Safe Browsing</h1> - </div> + <h1>Safe Browsing</h1> <p>$i18n{sbUnderConstruction}</p> - <h2>Experiments</h2> - <div class="experiments"> - <p id="experimentsList"></p> - </div> <script src="chrome://resources/js/i18n_template.js"></script> </body> </html>
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.js b/components/safe_browsing/web_ui/resources/safe_browsing.js deleted file mode 100644 index d47e9a2..0000000 --- a/components/safe_browsing/web_ui/resources/safe_browsing.js +++ /dev/null
@@ -1,29 +0,0 @@ -/* Copyright 2017 The Chromium Authors. All rights reserved. -* Use of this source code is governed by a BSD-style license that can be -* found in the LICENSE file. */ - - cr.define('safe_browsing', function() { - 'use strict'; - - function initialize() { - chrome.send('expParamList',[]); - } - - function addExperiment(result) { - var resLength = result.length; - var experimentsListFormatted=""; - -for (var i = 0; i < resLength; i+=2) { - experimentsListFormatted += "<div>" + result[i+1] + " --- " + result [i] + - "</div>";} - $('experimentsList').innerHTML = experimentsListFormatted; - } - - return { - addExperiment: addExperiment, - initialize: initialize, - }; - -}); - -document.addEventListener('DOMContentLoaded', safe_browsing.initialize);
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.cc b/components/safe_browsing/web_ui/safe_browsing_ui.cc index fe19f300..761b7cb 100644 --- a/components/safe_browsing/web_ui/safe_browsing_ui.cc +++ b/components/safe_browsing/web_ui/safe_browsing_ui.cc
@@ -1,41 +1,28 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. +// Copyright (c) 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - #include "components/safe_browsing/web_ui/safe_browsing_ui.h" - -#include <algorithm> -#include <utility> -#include "base/macros.h" -#include "base/values.h" #include "components/grit/components_resources.h" #include "components/grit/components_scaled_resources.h" -#include "components/safe_browsing/features.h" #include "components/safe_browsing/web_ui/constants.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_message_handler.h" -namespace safe_browsing { +#include "content/public/browser/web_ui_data_source.h" + SafeBrowsingUI::SafeBrowsingUI(content::WebUI* web_ui) : content::WebUIController(web_ui) { // Set up the chrome://safe-browsing source. - content::WebUIDataSource* html_source = content::WebUIDataSource::Create( safe_browsing::kChromeUISafeBrowsingHost); - // Register callback handler. - // Handles messages from JavaScript to C++ via chrome.send(). - web_ui->AddMessageHandler(base::MakeUnique<SafeBrowsingUIHandler>()); - // Add localized string resources. html_source->AddLocalizedString("sbUnderConstruction", IDS_SB_UNDER_CONSTRUCTION); // Add required resources. html_source->AddResourcePath("safe_browsing.css", IDR_SAFE_BROWSING_CSS); - html_source->AddResourcePath("safe_browsing.js", IDR_SAFE_BROWSING_JS); html_source->SetDefaultResource(IDR_SAFE_BROWSING_HTML); content::BrowserContext* browser_context = @@ -44,19 +31,3 @@ } SafeBrowsingUI::~SafeBrowsingUI() {} - -SafeBrowsingUIHandler::SafeBrowsingUIHandler(){}; - -void SafeBrowsingUIHandler::ExpParamList(const base::ListValue* unused) { - AllowJavascript(); - CallJavascriptFunction("safe_browsing.addExperiment", GetFeatureStatusList()); -} - -void SafeBrowsingUIHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback( - "expParamList", - base::Bind(&SafeBrowsingUIHandler::ExpParamList, base::Unretained(this))); -} - -SafeBrowsingUIHandler::~SafeBrowsingUIHandler() {} -} // namespace safe_browsing
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.h b/components/safe_browsing/web_ui/safe_browsing_ui.h index 816c234..440fae2 100644 --- a/components/safe_browsing/web_ui/safe_browsing_ui.h +++ b/components/safe_browsing/web_ui/safe_browsing_ui.h
@@ -1,32 +1,13 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. +// Copyright (c) 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_SAFE_BROWSING_WEBUI_SAFE_BROWSING_UI_H_ -#define COMPONENTS_SAFE_BROWSING_WEBUI_SAFE_BROWSING_UI_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_SAFE_BROWSING_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_SAFE_BROWSING_UI_H_ -#include "base/bind.h" -#include "base/callback.h" #include "base/macros.h" -#include "base/values.h" #include "content/public/browser/url_data_source.h" -#include "content/public/browser/web_contents.h" -#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" -#include "content/public/browser/web_ui_data_source.h" -#include "content/public/browser/web_ui_message_handler.h" - -namespace safe_browsing { -class SafeBrowsingUIHandler : public content::WebUIMessageHandler { - public: - SafeBrowsingUIHandler(); - ~SafeBrowsingUIHandler() override; - void ExpParamList(const base::ListValue* args); - void RegisterMessages() override; - - private: - DISALLOW_COPY_AND_ASSIGN(SafeBrowsingUIHandler); -}; // The WebUI for chrome://safe-browsing class SafeBrowsingUI : public content::WebUIController { @@ -37,6 +18,5 @@ private: DISALLOW_COPY_AND_ASSIGN(SafeBrowsingUI); }; -} // namespace safe_browsing -#endif // COMPONENTS_SAFE_BROWSING_WEBUI_SAFE_BROWSING_UI_H_ +#endif // CHROME_BROWSER_UI_WEBUI_SAFE_BROWSING_UI_H_
diff --git a/components/safe_browsing_db/BUILD.gn b/components/safe_browsing_db/BUILD.gn index a0869605..031ccc7 100644 --- a/components/safe_browsing_db/BUILD.gn +++ b/components/safe_browsing_db/BUILD.gn
@@ -217,7 +217,6 @@ ] deps = [ "//base", - "//components/safe_browsing:features", ] }
diff --git a/components/safe_browsing_db/DEPS b/components/safe_browsing_db/DEPS index 341bbf0..55dc17a 100644 --- a/components/safe_browsing_db/DEPS +++ b/components/safe_browsing_db/DEPS
@@ -1,7 +1,6 @@ include_rules = [ "+components/data_use_measurement/core", "+components/safe_browsing/common/safe_browsing_prefs.h", - "+components/safe_browsing/features.h", "+components/variations", "+components/version_info", "+content/public/browser",
diff --git a/components/safe_browsing_db/v4_feature_list.cc b/components/safe_browsing_db/v4_feature_list.cc index 8185e6fc..9d166e9 100644 --- a/components/safe_browsing_db/v4_feature_list.cc +++ b/components/safe_browsing_db/v4_feature_list.cc
@@ -2,15 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/safe_browsing_db/v4_feature_list.h" - #include "base/feature_list.h" -#include "components/safe_browsing/features.h" +#include "components/safe_browsing_db/v4_feature_list.h" namespace safe_browsing { namespace V4FeatureList { +namespace { + +const base::Feature kLocalDatabaseManagerEnabled{ + "SafeBrowsingV4LocalDatabaseManagerEnabled", + base::FEATURE_DISABLED_BY_DEFAULT}; + +const base::Feature kV4OnlyEnabled{"SafeBrowsingV4OnlyEnabled", + base::FEATURE_DISABLED_BY_DEFAULT}; + bool IsV4OnlyEnabled() { return base::FeatureList::IsEnabled(kV4OnlyEnabled); } @@ -20,6 +27,8 @@ IsV4OnlyEnabled(); } +} // namespace + V4UsageStatus GetV4UsageStatus() { V4UsageStatus v4_usage_status; if (safe_browsing::V4FeatureList::IsV4OnlyEnabled()) {
diff --git a/components/supervised_user_error_page/resources/supervised_user_block_interstitial.html b/components/supervised_user_error_page/resources/supervised_user_block_interstitial.html index 04f411f..c04f9249 100644 --- a/components/supervised_user_error_page/resources/supervised_user_block_interstitial.html +++ b/components/supervised_user_error_page/resources/supervised_user_block_interstitial.html
@@ -42,16 +42,16 @@ $i18n{requestAccessButton} </button> <div id="details-button-container"> - <button id="show-details-link" class="details-button small-link" hidden> + <button id="show-details-link" class="details-button small-link"> $i18n{showDetailsLink} </button> <button id="hide-details-link" class="details-button small-link" hidden> $i18n{hideDetailsLink} </button> - <button id="back-button" class="details-button small-link" hidden> - $i18n{backButton} - </button> </div> + <button id="back-button" class="details-button small-link" hidden> + $i18n{backButton} + </button> </div> <div id="details" hidden> <p id="details-header">$i18n{blockReasonHeader}</p>
diff --git a/components/supervised_user_error_page/resources/supervised_user_block_interstitial.js b/components/supervised_user_error_page/resources/supervised_user_block_interstitial.js index e6786f6b..d6b9327 100644 --- a/components/supervised_user_error_page/resources/supervised_user_block_interstitial.js +++ b/components/supervised_user_error_page/resources/supervised_user_block_interstitial.js
@@ -37,6 +37,9 @@ document.addEventListener('DOMContentLoaded', setupMobileNav); function sendCommand(cmd) { + // TODO(bauerb): domAutomationController is not defined when this page is + // shown in chrome://interstitials. Use a MessageHandler or something to + // support interactions. window.domAutomationController.setAutomationId(1); window.domAutomationController.send(cmd); } @@ -50,11 +53,7 @@ if (allowAccessRequests) { $('request-access-button').onclick = function(event) { $('request-access-button').hidden = true; - if (window.domAutomationController) { - sendCommand('request'); - } else { - window.webRestrictions.requestPermission(setRequestStatus); - } + sendCommand('request'); }; } else { $('request-access-button').hidden = true; @@ -85,31 +84,28 @@ 'secondCustodianEmail'); } } - var showDetailsLink = loadTimeData.getString('showDetailsLink'); - $('show-details-link').hidden = !showDetailsLink; - $('back-button').hidden = showDetailsLink || !window.domAutomationController; $('back-button').onclick = function(event) { sendCommand('back'); }; - $('show-details-link').onclick = function(event) { - showDetails = true; - $('show-details-link').hidden = true; - $('hide-details-link').hidden = false; - updateDetails(); - }; - $('hide-details-link').onclick = function(event) { - showDetails = false; - $('show-details-link').hidden = false; - $('hide-details-link').hidden = true; - updateDetails(); - }; - if (window.domAutomationController && - loadTimeData.getBoolean('showFeedbackLink')) { + if (loadTimeData.getBoolean('showFeedbackLink')) { + $('show-details-link').onclick = function(event) { + showDetails = true; + $('show-details-link').hidden = true; + $('hide-details-link').hidden = false; + updateDetails(); + }; + $('hide-details-link').onclick = function(event) { + showDetails = false; + $('show-details-link').hidden = false; + $('hide-details-link').hidden = true; + updateDetails(); + }; $('feedback-link').onclick = function(event) { sendCommand('feedback'); }; } else { $('feedback').hidden = true; + $('details-button-container').hidden = true; } } @@ -128,7 +124,7 @@ if (isSuccessful) { $('request-failed-message').hidden = true; $('request-sent-message').hidden = false; - $('back-button').hidden = !window.domAutomationController; + $('back-button').hidden = false; $('request-access-button').hidden = true; $('show-details-link').hidden = true; } else {
diff --git a/components/supervised_user_error_page_strings.grdp b/components/supervised_user_error_page_strings.grdp index e8c4362..5798f26 100644 --- a/components/supervised_user_error_page_strings.grdp +++ b/components/supervised_user_error_page_strings.grdp
@@ -11,13 +11,13 @@ Ask your parent </message> <message name="IDS_BLOCK_INTERSTITIAL_HEADER_ACCESS_REQUESTS_DISABLED" desc="A heading for the supervised user when they attempt to visit a site that is not permitted by the manager (and they can't ask for permission)."> - Looks like you don't have permission to visit this site + You don't have permission to visit this site </message> <message name="IDS_BLOCK_INTERSTITIAL_HEADER_NOT_SIGNED_IN" desc="A heading for the supervised user when the status cannot be established because they haven't signed in to Chrome)."> Please start and sign in to Chrome before using this app. </message> <message name="IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE" desc="A message for the child user when they attempt to visit a site that is not permitted by their parent."> - Looks like you need permission to visit this site + You need permission to visit this site </message> <message name="IDS_BLOCK_INTERSTITIAL_MESSAGE_SUPERVISED_USERS_DEPRECATED" desc="Message to be shown to a supervised user directing them to the supervisor."> Questions? Contact the person who supervises your profile.
diff --git a/components/update_client/background_downloader_win.cc b/components/update_client/background_downloader_win.cc index 075d675a..feaef33a 100644 --- a/components/update_client/background_downloader_win.cc +++ b/components/update_client/background_downloader_win.cc
@@ -27,6 +27,8 @@ #include "base/sequenced_task_runner.h" #include "base/strings/string_piece.h" #include "base/strings/sys_string_conversions.h" +#include "base/task_scheduler/post_task.h" +#include "base/task_scheduler/task_traits.h" #include "base/win/scoped_co_mem.h" #include "components/update_client/update_client_errors.h" #include "components/update_client/utils.h" @@ -397,9 +399,11 @@ BackgroundDownloader::BackgroundDownloader( std::unique_ptr<CrxDownloader> successor, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) - : CrxDownloader(task_runner, std::move(successor)), + net::URLRequestContextGetter* context_getter) + : CrxDownloader(std::move(successor)), + com_task_runner_(base::CreateCOMSTATaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})), context_getter_(context_getter), git_cookie_bits_manager_(0), git_cookie_job_(0) {} @@ -417,21 +421,21 @@ void BackgroundDownloader::OnTimer() { DCHECK(thread_checker_.CalledOnValidThread()); - task_runner()->PostTask( + com_task_runner_->PostTask( FROM_HERE, base::Bind(&BackgroundDownloader::OnDownloading, base::Unretained(this))); } void BackgroundDownloader::DoStartDownload(const GURL& url) { DCHECK(thread_checker_.CalledOnValidThread()); - task_runner()->PostTask(FROM_HERE, - base::Bind(&BackgroundDownloader::BeginDownload, - base::Unretained(this), url)); + com_task_runner_->PostTask(FROM_HERE, + base::Bind(&BackgroundDownloader::BeginDownload, + base::Unretained(this), url)); } // Called one time when this class is asked to do a download. void BackgroundDownloader::BeginDownload(const GURL& url) { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); download_start_time_ = base::TimeTicks::Now(); job_stuck_begin_time_ = download_start_time_; @@ -477,7 +481,7 @@ // Called any time the timer fires. void BackgroundDownloader::OnDownloading() { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); HRESULT hr = UpdateInterfacePointers(); if (FAILED(hr)) { @@ -542,7 +546,7 @@ // Completes the BITS download, picks up the file path of the response, and // notifies the CrxDownloader. The function should be called only once. void BackgroundDownloader::EndDownload(HRESULT error) { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); const base::TimeTicks download_end_time(base::TimeTicks::Now()); const base::TimeDelta download_time = @@ -677,7 +681,7 @@ HRESULT BackgroundDownloader::QueueBitsJob(const GURL& url, ComPtr<IBackgroundCopyJob>* job) { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); size_t num_jobs = 0; GetBackgroundDownloaderJobCount(&num_jobs); @@ -812,7 +816,7 @@ } HRESULT BackgroundDownloader::UpdateInterfacePointers() { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); bits_manager_ = nullptr; job_ = nullptr; @@ -841,7 +845,7 @@ } HRESULT BackgroundDownloader::ClearGit() { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); ResetInterfacePointers(); @@ -864,7 +868,7 @@ HRESULT BackgroundDownloader::GetBackgroundDownloaderJobCount( size_t* num_jobs) { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); DCHECK(bits_manager_); std::vector<ComPtr<IBackgroundCopyJob>> jobs; @@ -879,7 +883,7 @@ } void BackgroundDownloader::CleanupStaleJobs() { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); + DCHECK(com_task_runner_->RunsTasksInCurrentSequence()); DCHECK(bits_manager_); static base::Time last_sweep;
diff --git a/components/update_client/background_downloader_win.h b/components/update_client/background_downloader_win.h index 237aea6..7549b709 100644 --- a/components/update_client/background_downloader_win.h +++ b/components/update_client/background_downloader_win.h
@@ -40,21 +40,19 @@ class BackgroundDownloader : public CrxDownloader { protected: friend class CrxDownloader; - BackgroundDownloader( - std::unique_ptr<CrxDownloader> successor, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner); + BackgroundDownloader(std::unique_ptr<CrxDownloader> successor, + net::URLRequestContextGetter* context_getter); ~BackgroundDownloader() override; private: // Overrides for CrxDownloader. void DoStartDownload(const GURL& url) override; - // Called asynchronously on the |task_runner_| at different stages during + // Called asynchronously on the |com_task_runner_| at different stages during // the download. |OnDownloading| can be called multiple times. - // |EndDownload| switches the execution flow from the |task_runner_| to the - // main thread. Accessing any data members of this object from the - // |task_runner_| after calling |EndDownload| is unsafe. + // |EndDownload| switches the execution flow from the |com_task_runner_| to + // the main thread. Accessing any data members of this object from the + // |com_task_runner_| after calling |EndDownload| is unsafe. void BeginDownload(const GURL& url); void OnDownloading(); void EndDownload(HRESULT hr); @@ -128,6 +126,9 @@ // Ensures that we are running on the same thread we created the object on. base::ThreadChecker thread_checker_; + // Executes blocking COM calls to BITS. + scoped_refptr<base::SequencedTaskRunner> com_task_runner_; + net::URLRequestContextGetter* context_getter_; // The timer has thread affinity. This member is initialized and destroyed
diff --git a/components/update_client/component.cc b/components/update_client/component.cc index bde8b6be..750ee8a 100644 --- a/components/update_client/component.cc +++ b/components/update_client/component.cc
@@ -452,8 +452,7 @@ crx_downloader_ = update_context.crx_downloader_factory( component.CanDoBackgroundDownload(), - update_context.config->RequestContext(), - update_context.blocking_task_runner); + update_context.config->RequestContext()); const auto& id = component.id_; crx_downloader_->set_progress_callback( @@ -519,8 +518,7 @@ crx_downloader_ = update_context.crx_downloader_factory( component.CanDoBackgroundDownload(), - update_context.config->RequestContext(), - update_context.blocking_task_runner); + update_context.config->RequestContext()); const auto& id = component.id_; crx_downloader_->set_progress_callback(
diff --git a/components/update_client/crx_downloader.cc b/components/update_client/crx_downloader.cc index 8437dd5..de4a774 100644 --- a/components/update_client/crx_downloader.cc +++ b/components/update_client/crx_downloader.cc
@@ -11,7 +11,8 @@ #include "base/files/file_util.h" #include "base/location.h" #include "base/logging.h" -#include "base/sequenced_task_runner.h" +#include "base/task_scheduler/post_task.h" +#include "base/task_scheduler/task_traits.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #if defined(OS_WIN) @@ -39,26 +40,22 @@ // which uses the BITS service. std::unique_ptr<CrxDownloader> CrxDownloader::Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { std::unique_ptr<CrxDownloader> url_fetcher_downloader( std::unique_ptr<CrxDownloader>(new UrlFetcherDownloader( - std::unique_ptr<CrxDownloader>(), context_getter, task_runner))); + std::unique_ptr<CrxDownloader>(), context_getter))); #if defined(OS_WIN) if (is_background_download) { return std::unique_ptr<CrxDownloader>(new BackgroundDownloader( - std::move(url_fetcher_downloader), context_getter, task_runner)); + std::move(url_fetcher_downloader), context_getter)); } #endif return url_fetcher_downloader; } -CrxDownloader::CrxDownloader( - const scoped_refptr<base::SequencedTaskRunner>& task_runner, - std::unique_ptr<CrxDownloader> successor) - : task_runner_(task_runner), - main_task_runner_(base::ThreadTaskRunnerHandle::Get()), +CrxDownloader::CrxDownloader(std::unique_ptr<CrxDownloader> successor) + : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), successor_(std::move(successor)) {} CrxDownloader::~CrxDownloader() {} @@ -107,8 +104,8 @@ if (error != CrxDownloaderError::NONE) { Result result; result.error = static_cast<int>(error); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::Bind(download_callback, result)); + main_task_runner()->PostTask(FROM_HERE, + base::Bind(download_callback, result)); return; } @@ -127,8 +124,11 @@ DCHECK(thread_checker_.CalledOnValidThread()); if (!result.error) - task_runner()->PostTask( + + base::PostTaskWithTraits( FROM_HERE, + {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, base::Bind(&CrxDownloader::VerifyResponse, base::Unretained(this), is_handled, result, download_metrics)); else @@ -152,7 +152,6 @@ void CrxDownloader::VerifyResponse(bool is_handled, Result result, DownloadMetrics download_metrics) { - DCHECK(task_runner()->RunsTasksInCurrentSequence()); DCHECK_EQ(0, result.error); DCHECK_EQ(0, download_metrics.error); DCHECK(is_handled);
diff --git a/components/update_client/crx_downloader.h b/components/update_client/crx_downloader.h index 635098c..0b6cae8 100644 --- a/components/update_client/crx_downloader.h +++ b/components/update_client/crx_downloader.h
@@ -86,10 +86,8 @@ // bytes is not guaranteed to monotonically increment over time. using ProgressCallback = base::Callback<void(const Result& result)>; - using Factory = std::unique_ptr<CrxDownloader> (*)( - bool, - net::URLRequestContextGetter*, - const scoped_refptr<base::SequencedTaskRunner>&); + using Factory = + std::unique_ptr<CrxDownloader> (*)(bool, net::URLRequestContextGetter*); // Factory method to create an instance of this class and build the // chain of responsibility. |is_background_download| specifies that a @@ -98,8 +96,7 @@ // code such as file IO operations. static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner); + net::URLRequestContextGetter* context_getter); virtual ~CrxDownloader(); void set_progress_callback(const ProgressCallback& progress_callback); @@ -119,8 +116,7 @@ const std::vector<DownloadMetrics> download_metrics() const; protected: - CrxDownloader(const scoped_refptr<base::SequencedTaskRunner>& task_runner, - std::unique_ptr<CrxDownloader> successor); + explicit CrxDownloader(std::unique_ptr<CrxDownloader> successor); // Handles the fallback in the case of multiple urls and routing of the // download to the following successor in the chain. Derived classes must call @@ -140,10 +136,6 @@ // Returns the url which is currently being downloaded from. GURL url() const; - scoped_refptr<base::SequencedTaskRunner> task_runner() const { - return task_runner_; - } - scoped_refptr<base::SequencedTaskRunner> main_task_runner() const { return main_task_runner_; } @@ -161,9 +153,6 @@ base::ThreadChecker thread_checker_; - // Executes blocking operations such as file I/O. - scoped_refptr<base::SequencedTaskRunner> task_runner_; - // Used to post callbacks to the main thread. scoped_refptr<base::SequencedTaskRunner> main_task_runner_;
diff --git a/components/update_client/crx_downloader_unittest.cc b/components/update_client/crx_downloader_unittest.cc index aba14b11..7a97aef 100644 --- a/components/update_client/crx_downloader_unittest.cc +++ b/components/update_client/crx_downloader_unittest.cc
@@ -14,6 +14,7 @@ #include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/run_loop.h" +#include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "components/update_client/update_client_errors.h" @@ -83,7 +84,7 @@ static const int kExpectedContext = 0xaabb; private: - base::MessageLoopForIO loop_; + base::test::ScopedTaskEnvironment scoped_task_environment_; scoped_refptr<net::TestURLRequestContextGetter> context_; base::Closure quit_closure_; }; @@ -100,9 +101,10 @@ crx_context_(0), num_download_complete_calls_(0), num_progress_calls_(0), + scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::IO), context_(new net::TestURLRequestContextGetter( - base::ThreadTaskRunnerHandle::Get())) { -} + base::ThreadTaskRunnerHandle::Get())) {} CrxDownloaderTest::~CrxDownloaderTest() { context_ = NULL; @@ -119,10 +121,7 @@ download_progress_result_ = CrxDownloader::Result(); // Do not use the background downloader in these tests. - crx_downloader_.reset( - CrxDownloader::Create(false, context_.get(), - base::ThreadTaskRunnerHandle::Get()) - .release()); + crx_downloader_.reset(CrxDownloader::Create(false, context_.get()).release()); crx_downloader_->set_progress_callback(progress_callback_); get_interceptor_.reset(
diff --git a/components/update_client/update_client_unittest.cc b/components/update_client/update_client_unittest.cc index 1275614..98d02bc 100644 --- a/components/update_client/update_client_unittest.cc +++ b/components/update_client/update_client_unittest.cc
@@ -277,13 +277,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); } @@ -440,13 +438,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -676,13 +672,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -945,13 +939,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -1234,13 +1226,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -1507,13 +1497,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -1757,13 +1745,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -1979,13 +1965,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); } @@ -2126,13 +2110,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -2290,13 +2272,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); } @@ -2380,13 +2360,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); } @@ -2434,14 +2412,12 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return nullptr; } private: - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} ~FakeCrxDownloader() override {} void DoStartDownload(const GURL& url) override {} @@ -2562,13 +2538,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); } @@ -2803,13 +2777,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -2972,13 +2944,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); } @@ -3097,13 +3067,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { @@ -3241,13 +3209,11 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { + net::URLRequestContextGetter* context_getter) { return base::MakeUnique<FakeCrxDownloader>(); } - FakeCrxDownloader() - : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {} + FakeCrxDownloader() : CrxDownloader(nullptr) {} private: void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); }
diff --git a/components/update_client/url_fetcher_downloader.cc b/components/update_client/url_fetcher_downloader.cc index 57fb50d..33214c1 100644 --- a/components/update_client/url_fetcher_downloader.cc +++ b/components/update_client/url_fetcher_downloader.cc
@@ -12,6 +12,8 @@ #include "base/location.h" #include "base/logging.h" #include "base/sequenced_task_runner.h" +#include "base/task_scheduler/post_task.h" +#include "base/task_scheduler/task_traits.h" #include "components/data_use_measurement/core/data_use_user_data.h" #include "components/update_client/utils.h" #include "net/base/load_flags.h" @@ -23,9 +25,8 @@ UrlFetcherDownloader::UrlFetcherDownloader( std::unique_ptr<CrxDownloader> successor, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) - : CrxDownloader(task_runner, std::move(successor)), + net::URLRequestContextGetter* context_getter) + : CrxDownloader(std::move(successor)), context_getter_(context_getter), downloaded_bytes_(-1), total_bytes_(-1) {} @@ -65,6 +66,7 @@ } } })"); + url_fetcher_ = net::URLFetcher::Create(0, url, net::URLFetcher::GET, this, traffic_annotation); url_fetcher_->SetRequestContext(context_getter_); @@ -72,7 +74,10 @@ net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DISABLE_CACHE); url_fetcher_->SetAutomaticallyRetryOn5xx(false); - url_fetcher_->SaveResponseToTemporaryFile(task_runner()); + url_fetcher_->SaveResponseToTemporaryFile( + base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); data_use_measurement::DataUseUserData::AttachToFetcher( url_fetcher_.get(), data_use_measurement::DataUseUserData::UPDATE_CLIENT);
diff --git a/components/update_client/url_fetcher_downloader.h b/components/update_client/url_fetcher_downloader.h index fe613df..46d2e66 100644 --- a/components/update_client/url_fetcher_downloader.h +++ b/components/update_client/url_fetcher_downloader.h
@@ -16,10 +16,6 @@ #include "components/update_client/crx_downloader.h" #include "net/url_request/url_fetcher_delegate.h" -namespace base { -class SequencedTaskRunner; -} - namespace net { class URLFetcher; class URLRequestContextGetter; @@ -32,10 +28,8 @@ public net::URLFetcherDelegate { protected: friend class CrxDownloader; - UrlFetcherDownloader( - std::unique_ptr<CrxDownloader> successor, - net::URLRequestContextGetter* context_getter, - const scoped_refptr<base::SequencedTaskRunner>& task_runner); + UrlFetcherDownloader(std::unique_ptr<CrxDownloader> successor, + net::URLRequestContextGetter* context_getter); ~UrlFetcherDownloader() override; private:
diff --git a/components/upload_list/BUILD.gn b/components/upload_list/BUILD.gn index 46b8692..28aaec4 100644 --- a/components/upload_list/BUILD.gn +++ b/components/upload_list/BUILD.gn
@@ -6,6 +6,8 @@ sources = [ "crash_upload_list.cc", "crash_upload_list.h", + "text_log_upload_list.cc", + "text_log_upload_list.h", "upload_list.cc", "upload_list.h", ] @@ -18,7 +20,7 @@ source_set("unit_tests") { testonly = true sources = [ - "upload_list_unittest.cc", + "text_log_upload_list_unittest.cc", ] deps = [
diff --git a/components/upload_list/crash_upload_list.cc b/components/upload_list/crash_upload_list.cc index 9b00ed2..704814a 100644 --- a/components/upload_list/crash_upload_list.cc +++ b/components/upload_list/crash_upload_list.cc
@@ -4,17 +4,5 @@ #include "components/upload_list/crash_upload_list.h" -#include <utility> - -#include "base/files/file_path.h" -#include "base/path_service.h" - // static const char CrashUploadList::kReporterLogFilename[] = "uploads.log"; - -CrashUploadList::CrashUploadList(Delegate* delegate, - const base::FilePath& upload_log_path, - scoped_refptr<base::TaskRunner> task_runner) - : UploadList(delegate, upload_log_path, std::move(task_runner)) {} - -CrashUploadList::~CrashUploadList() = default;
diff --git a/components/upload_list/crash_upload_list.h b/components/upload_list/crash_upload_list.h index b1095ebc..cbb2d31 100644 --- a/components/upload_list/crash_upload_list.h +++ b/components/upload_list/crash_upload_list.h
@@ -5,32 +5,16 @@ #ifndef COMPONENTS_UPLOAD_LIST_CRASH_UPLOAD_LIST_H_ #define COMPONENTS_UPLOAD_LIST_CRASH_UPLOAD_LIST_H_ -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/task_runner.h" -#include "components/upload_list/upload_list.h" - -namespace base { -class FilePath; -} - -// An upload list manager for crash reports from breakpad. -class CrashUploadList : public UploadList { +// TODO(rsesek): Remove this class. Clients only use it for the constant +// it defines. +class CrashUploadList { public: // Should match kReporterLogFilename in // breakpad/src/client/apple/Framework/BreakpadDefines.h. static const char kReporterLogFilename[]; - // Creates a new crash upload list with the given callback delegate. - CrashUploadList(Delegate* delegate, - const base::FilePath& upload_log_path, - scoped_refptr<base::TaskRunner> task_runner); - - protected: - ~CrashUploadList() override; - private: - DISALLOW_COPY_AND_ASSIGN(CrashUploadList); + CrashUploadList() {} }; #endif // COMPONENTS_UPLOAD_LIST_CRASH_UPLOAD_LIST_H_
diff --git a/components/upload_list/text_log_upload_list.cc b/components/upload_list/text_log_upload_list.cc new file mode 100644 index 0000000..3239739 --- /dev/null +++ b/components/upload_list/text_log_upload_list.cc
@@ -0,0 +1,76 @@ +// 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 "components/upload_list/text_log_upload_list.h" + +#include <string> + +#include "base/files/file_util.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" +#include "base/strings/string_util.h" + +TextLogUploadList::TextLogUploadList(const base::FilePath& upload_log_path) + : UploadList(), upload_log_path_(upload_log_path) {} + +TextLogUploadList::~TextLogUploadList() = default; + +base::TaskTraits TextLogUploadList::LoadingTaskTraits() { + return {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}; +} + +std::vector<UploadList::UploadInfo> TextLogUploadList::LoadUploadList() { + std::vector<UploadInfo> uploads; + + if (base::PathExists(upload_log_path_)) { + std::string contents; + base::ReadFileToString(upload_log_path_, &contents); + std::vector<std::string> log_entries = + base::SplitString(contents, base::kWhitespaceASCII, + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + ParseLogEntries(log_entries, &uploads); + } + + return uploads; +} + +void TextLogUploadList::ParseLogEntries( + const std::vector<std::string>& log_entries, + std::vector<UploadInfo>* uploads) { + std::vector<std::string>::const_reverse_iterator i; + for (i = log_entries.rbegin(); i != log_entries.rend(); ++i) { + std::vector<std::string> components = + base::SplitString(*i, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + // Skip any blank (or corrupted) lines. + if (components.size() < 2 || components.size() > 5) + continue; + base::Time upload_time; + double seconds_since_epoch; + if (!components[0].empty()) { + if (!base::StringToDouble(components[0], &seconds_since_epoch)) + continue; + upload_time = base::Time::FromDoubleT(seconds_since_epoch); + } + UploadInfo info(components[1], upload_time); + + // Add local ID if present. + if (components.size() > 2) + info.local_id = components[2]; + + // Add capture time if present. + if (components.size() > 3 && !components[3].empty() && + base::StringToDouble(components[3], &seconds_since_epoch)) { + info.capture_time = base::Time::FromDoubleT(seconds_since_epoch); + } + + int state; + if (components.size() > 4 && !components[4].empty() && + base::StringToInt(components[4], &state)) { + info.state = static_cast<UploadInfo::State>(state); + } + + uploads->push_back(info); + } +}
diff --git a/components/upload_list/text_log_upload_list.h b/components/upload_list/text_log_upload_list.h new file mode 100644 index 0000000..449dcd42 --- /dev/null +++ b/components/upload_list/text_log_upload_list.h
@@ -0,0 +1,44 @@ +// 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 COMPONENTS_UPLOAD_LIST_TEXT_LOG_UPLOAD_LIST_H_ +#define COMPONENTS_UPLOAD_LIST_TEXT_LOG_UPLOAD_LIST_H_ + +#include <vector> + +#include "base/files/file_path.h" +#include "base/macros.h" +#include "components/upload_list/upload_list.h" + +// Loads and parses an upload list text file of the format +// upload_time,upload_id[,local_id[,capture_time[,state]]] +// upload_time,upload_id[,local_id[,capture_time[,state]]] +// etc. +// where each line represents an upload. |upload_time| and |capture_time| are in +// Unix time. |state| is an int in the range of UploadInfo::State. A line may +// or may not contain |local_id|, |capture_time|, and |state|. +class TextLogUploadList : public UploadList { + public: + // Creates a new upload list that parses the log at |upload_log_path|. + explicit TextLogUploadList(const base::FilePath& upload_log_path); + + const base::FilePath& upload_log_path() const { return upload_log_path_; } + + protected: + ~TextLogUploadList() override; + + // UploadList: + base::TaskTraits LoadingTaskTraits() override; + std::vector<UploadList::UploadInfo> LoadUploadList() override; + + // Parses upload log lines, converting them to UploadInfo entries. + void ParseLogEntries(const std::vector<std::string>& log_entries, + std::vector<UploadInfo>* uploads); + + const base::FilePath upload_log_path_; + + DISALLOW_COPY_AND_ASSIGN(TextLogUploadList); +}; + +#endif // COMPONENTS_UPLOAD_LIST_TEXT_LOG_UPLOAD_LIST_H_
diff --git a/components/upload_list/upload_list_unittest.cc b/components/upload_list/text_log_upload_list_unittest.cc similarity index 75% rename from components/upload_list/upload_list_unittest.cc rename to components/upload_list/text_log_upload_list_unittest.cc index 837f7fb8..ce1174a 100644 --- a/components/upload_list/upload_list_unittest.cc +++ b/components/upload_list/text_log_upload_list_unittest.cc
@@ -2,9 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/upload_list/upload_list.h" - -#include <stddef.h> +#include "components/upload_list/text_log_upload_list.h" #include <string> @@ -13,11 +11,9 @@ #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" -#include "base/task_runner.h" -#include "base/threading/thread.h" +#include "base/test/scoped_task_environment.h" #include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" @@ -28,14 +24,12 @@ const char kTestLocalID[] = "fedcba9876543210"; const char kTestCaptureTime[] = "2345678901"; -class UploadListTest : public testing::Test, - public UploadList::Delegate { +class TextLogUploadListTest : public testing::Test { public: - UploadListTest() : worker_thread_("UploadListTest") {} + TextLogUploadListTest() = default; void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - ASSERT_TRUE(worker_thread_.Start()); } protected: @@ -45,33 +39,15 @@ 0); } - void WaitForUploadList() { - base::RunLoop run_loop; - quit_closure_ = run_loop.QuitClosure(); - run_loop.Run(); - } - - // UploadList::Delegate: - void OnUploadListAvailable() override { - ASSERT_FALSE(quit_closure_.is_null()); - quit_closure_.Run(); - } - - scoped_refptr<base::TaskRunner> task_runner() const { - return worker_thread_.task_runner(); - } - base::FilePath log_path() { return temp_dir_.GetPath().Append(FILE_PATH_LITERAL("uploads.log")); } private: - base::MessageLoop message_loop_; + base::test::ScopedTaskEnvironment scoped_task_environment_; base::ScopedTempDir temp_dir_; - base::Thread worker_thread_; - base::Closure quit_closure_; - DISALLOW_COPY_AND_ASSIGN(UploadListTest); + DISALLOW_COPY_AND_ASSIGN(TextLogUploadListTest); }; // These tests test that UploadList can parse a vector of log entry strings of @@ -80,17 +56,18 @@ // Test log entry string with upload time and upload ID. // This is the format that crash reports are stored in. -TEST_F(UploadListTest, ParseUploadTimeUploadId) { +TEST_F(TextLogUploadListTest, ParseUploadTimeUploadId) { std::string test_entry = kTestUploadTime; test_entry += ","; test_entry.append(kTestUploadId); WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -106,7 +83,7 @@ // Test log entry string with upload time, upload ID and local ID. // This is the old format that WebRTC logs were stored in. -TEST_F(UploadListTest, ParseUploadTimeUploadIdLocalId) { +TEST_F(TextLogUploadListTest, ParseUploadTimeUploadIdLocalId) { std::string test_entry = kTestUploadTime; test_entry += ","; test_entry.append(kTestUploadId); @@ -114,11 +91,12 @@ test_entry.append(kTestLocalID); WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -135,7 +113,7 @@ // Test log entry string with upload time, upload ID and capture time. // This is the format that WebRTC logs that only have been uploaded only are // stored in. -TEST_F(UploadListTest, ParseUploadTimeUploadIdCaptureTime) { +TEST_F(TextLogUploadListTest, ParseUploadTimeUploadIdCaptureTime) { std::string test_entry = kTestUploadTime; test_entry += ","; test_entry.append(kTestUploadId); @@ -143,11 +121,12 @@ test_entry.append(kTestCaptureTime); WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -164,18 +143,19 @@ // Test log entry string with local ID and capture time. // This is the format that WebRTC logs that only are stored locally are stored // in. -TEST_F(UploadListTest, ParseLocalIdCaptureTime) { +TEST_F(TextLogUploadListTest, ParseLocalIdCaptureTime) { std::string test_entry = ",,"; test_entry.append(kTestLocalID); test_entry += ","; test_entry.append(kTestCaptureTime); WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -193,7 +173,7 @@ // time. // This is the format that WebRTC logs that are stored locally and have been // uploaded are stored in. -TEST_F(UploadListTest, ParseUploadTimeUploadIdLocalIdCaptureTime) { +TEST_F(TextLogUploadListTest, ParseUploadTimeUploadIdLocalIdCaptureTime) { std::string test_entry = kTestUploadTime; test_entry += ","; test_entry.append(kTestUploadId); @@ -203,11 +183,12 @@ test_entry.append(kTestCaptureTime); WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -221,7 +202,7 @@ EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str()); } -TEST_F(UploadListTest, ParseMultipleEntries) { +TEST_F(TextLogUploadListTest, ParseMultipleEntries) { std::string test_entry; for (int i = 1; i <= 4; ++i) { test_entry.append(kTestUploadTime); @@ -235,11 +216,12 @@ } WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -255,7 +237,7 @@ } } -TEST_F(UploadListTest, ParseWithState) { +TEST_F(TextLogUploadListTest, ParseWithState) { std::string test_entry; for (int i = 1; i <= 4; ++i) { test_entry.append(kTestUploadTime); @@ -272,11 +254,12 @@ } WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); - upload_list->LoadUploadListAsynchronously(); - WaitForUploadList(); + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); std::vector<UploadList::UploadInfo> uploads; upload_list->GetUploads(999, &uploads); @@ -294,7 +277,7 @@ } // https://crbug.com/597384 -TEST_F(UploadListTest, SimultaneousAccess) { +TEST_F(TextLogUploadListTest, SimultaneousAccess) { std::string test_entry = kTestUploadTime; test_entry += ","; test_entry.append(kTestUploadId); @@ -304,17 +287,17 @@ test_entry.append(kTestCaptureTime); WriteUploadLog(test_entry); - scoped_refptr<UploadList> upload_list = - new UploadList(this, log_path(), task_runner()); + scoped_refptr<TextLogUploadList> upload_list = + new TextLogUploadList(log_path()); // Queue up a bunch of loads, waiting only for the first one to complete. - // Clearing the delegate prevents the QuitClosure from being Run more than - // once. + base::RunLoop run_loop; + upload_list->Load(run_loop.QuitClosure()); + run_loop.Run(); + for (int i = 1; i <= 20; ++i) { - upload_list->LoadUploadListAsynchronously(); + upload_list->Load(base::OnceClosure()); } - WaitForUploadList(); - upload_list->ClearDelegate(); // Read the list a few times to try and race one of the loads above. for (int i = 1; i <= 4; ++i) {
diff --git a/components/upload_list/upload_list.cc b/components/upload_list/upload_list.cc index 082c01df..3c8d947 100644 --- a/components/upload_list/upload_list.cc +++ b/components/upload_list/upload_list.cc
@@ -9,14 +9,7 @@ #include <utility> #include "base/bind.h" -#include "base/files/file_util.h" -#include "base/location.h" -#include "base/sequenced_task_runner.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_split.h" -#include "base/strings/string_util.h" -#include "base/task_runner.h" -#include "base/threading/sequenced_task_runner_handle.h" +#include "base/task_scheduler/post_task.h" UploadList::UploadInfo::UploadInfo(const std::string& upload_id, const base::Time& upload_time, @@ -52,98 +45,28 @@ UploadList::UploadInfo::~UploadInfo() = default; -UploadList::UploadList(Delegate* delegate, - const base::FilePath& upload_log_path, - scoped_refptr<base::TaskRunner> task_runner) - : delegate_(delegate), - upload_log_path_(upload_log_path), - task_runner_(std::move(task_runner)) {} +UploadList::UploadList() = default; UploadList::~UploadList() = default; -void UploadList::LoadUploadListAsynchronously() { +void UploadList::Load(base::OnceClosure callback) { DCHECK(sequence_checker_.CalledOnValidSequence()); - task_runner_->PostTask( - FROM_HERE, base::Bind(&UploadList::PerformLoadAndNotifyDelegate, this, - base::SequencedTaskRunnerHandle::Get())); + callback_ = std::move(callback); + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, LoadingTaskTraits(), + base::Bind(&UploadList::LoadUploadList, this), + base::Bind(&UploadList::OnLoadComplete, this)); } -void UploadList::ClearDelegate() { +void UploadList::CancelCallback() { + callback_.Reset(); +} + +void UploadList::RequestSingleUploadAsync(const std::string& local_id) { DCHECK(sequence_checker_.CalledOnValidSequence()); - delegate_ = NULL; -} - -void UploadList::PerformLoadAndNotifyDelegate( - scoped_refptr<base::SequencedTaskRunner> task_runner) { - std::vector<UploadInfo> uploads; - LoadUploadList(&uploads); - task_runner->PostTask( - FROM_HERE, - base::Bind(&UploadList::SetUploadsAndNotifyDelegate, this, - std::move(uploads))); -} - -void UploadList::LoadUploadList(std::vector<UploadInfo>* uploads) { - if (base::PathExists(upload_log_path_)) { - std::string contents; - base::ReadFileToString(upload_log_path_, &contents); - std::vector<std::string> log_entries = base::SplitString( - contents, base::kWhitespaceASCII, base::KEEP_WHITESPACE, - base::SPLIT_WANT_NONEMPTY); - ParseLogEntries(log_entries, uploads); - } -} - -const base::FilePath& UploadList::upload_log_path() const { - return upload_log_path_; -} - -void UploadList::ParseLogEntries( - const std::vector<std::string>& log_entries, - std::vector<UploadInfo>* uploads) { - std::vector<std::string>::const_reverse_iterator i; - for (i = log_entries.rbegin(); i != log_entries.rend(); ++i) { - std::vector<std::string> components = base::SplitString( - *i, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - // Skip any blank (or corrupted) lines. - if (components.size() < 2 || components.size() > 5) - continue; - base::Time upload_time; - double seconds_since_epoch; - if (!components[0].empty()) { - if (!base::StringToDouble(components[0], &seconds_since_epoch)) - continue; - upload_time = base::Time::FromDoubleT(seconds_since_epoch); - } - UploadInfo info(components[1], upload_time); - - // Add local ID if present. - if (components.size() > 2) - info.local_id = components[2]; - - // Add capture time if present. - if (components.size() > 3 && - !components[3].empty() && - base::StringToDouble(components[3], &seconds_since_epoch)) { - info.capture_time = base::Time::FromDoubleT(seconds_since_epoch); - } - - int state; - if (components.size() > 4 && - !components[4].empty() && - base::StringToInt(components[4], &state)) { - info.state = static_cast<UploadInfo::State>(state); - } - - uploads->push_back(info); - } -} - -void UploadList::SetUploadsAndNotifyDelegate(std::vector<UploadInfo> uploads) { - DCHECK(sequence_checker_.CalledOnValidSequence()); - uploads_ = std::move(uploads); - if (delegate_) - delegate_->OnUploadListAvailable(); + base::PostTaskWithTraits( + FROM_HERE, LoadingTaskTraits(), + base::Bind(&UploadList::RequestSingleUpload, this, local_id)); } void UploadList::GetUploads(size_t max_count, @@ -154,15 +77,14 @@ std::back_inserter(*uploads)); } -void UploadList::RequestSingleCrashUploadAsync(const std::string& local_id) { - DCHECK(sequence_checker_.CalledOnValidSequence()); - task_runner_->PostTask( - FROM_HERE, - base::Bind(&UploadList::RequestSingleCrashUpload, this, local_id)); -} - -void UploadList::RequestSingleCrashUpload(const std::string& local_id) { +void UploadList::RequestSingleUpload(const std::string& local_id) { // Manual uploads for not-yet uploaded crash reports are only available for // Crashpad systems and for Android. NOTREACHED(); } + +void UploadList::OnLoadComplete(const std::vector<UploadInfo>& uploads) { + uploads_ = uploads; + if (!callback_.is_null()) + std::move(callback_).Run(); +}
diff --git a/components/upload_list/upload_list.h b/components/upload_list/upload_list.h index ebcab50..8b5a866 100644 --- a/components/upload_list/upload_list.h +++ b/components/upload_list/upload_list.h
@@ -10,26 +10,19 @@ #include <string> #include <vector> -#include "base/files/file_path.h" +#include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/sequence_checker.h" +#include "base/task_scheduler/task_traits.h" #include "base/time/time.h" -namespace base { -class SequencedTaskRunner; -class TaskRunner; -} - -// Loads and parses an upload list text file of the format -// upload_time,upload_id[,local_id[,capture_time[,state]]] -// upload_time,upload_id[,local_id[,capture_time[,state]]] -// etc. -// where each line represents an upload. |upload_time| and |capture_time| are in -// Unix time. |state| is an int in the range of UploadInfo::State. Must be used -// from the UI thread. The loading and parsing is done on a blocking pool task -// runner. A line may or may not contain |local_id|, |capture_time|, and -// |state|. +// An UploadList is an abstraction over a list of client-side data files that +// are uploaded to a server. The UploadList allows accessing the UploadInfo +// for these files, usually to display in a UI. +// +// The UploadList loads the information asynchronously and notifies the +// client that requested the information when it is available. class UploadList : public base::RefCountedThreadSafe<UploadList> { public: struct UploadInfo { @@ -71,75 +64,53 @@ base::string16 file_size; }; - class Delegate { - public: - // Invoked when the upload list has been loaded. Will be called on the - // UI thread. - virtual void OnUploadListAvailable() = 0; - - protected: - virtual ~Delegate() {} - }; - // Creates a new upload list with the given callback delegate. - UploadList(Delegate* delegate, - const base::FilePath& upload_log_path, - scoped_refptr<base::TaskRunner> task_runner); + UploadList(); // Starts loading the upload list. OnUploadListAvailable will be called when - // loading is complete. - void LoadUploadListAsynchronously(); + // loading is complete. If this is called twice, the second |callback| will + // overwrite the previously supplied one, and the first will not be called. + void Load(base::OnceClosure callback); + + // Clears any callback specified in Load(). + void CancelCallback(); // Asynchronously requests a user triggered upload. - void RequestSingleCrashUploadAsync(const std::string& local_id); - - // Clears the delegate, so that any outstanding asynchronous load will not - // call the delegate on completion. - void ClearDelegate(); + void RequestSingleUploadAsync(const std::string& local_id); // Populates |uploads| with the |max_count| most recent uploads, // in reverse chronological order. - // Must be called only after OnUploadListAvailable has been called. + // Must be called only after a Load() callback has been received. void GetUploads(size_t max_count, std::vector<UploadInfo>* uploads); protected: virtual ~UploadList(); + // Returns the TaskTraits that should be used for LoadUploadList() and + // RequestSingleUpload(). + virtual base::TaskTraits LoadingTaskTraits() = 0; + // Reads the upload log and stores the entries in |uploads|. - virtual void LoadUploadList(std::vector<UploadInfo>* uploads); + virtual std::vector<UploadInfo> LoadUploadList() = 0; // Requests a user triggered upload for a crash report with a given id. - virtual void RequestSingleCrashUpload(const std::string& local_id); - - const base::FilePath& upload_log_path() const; + virtual void RequestSingleUpload(const std::string& local_id); private: friend class base::RefCountedThreadSafe<UploadList>; - // Manages the background thread work for LoadUploadListAsynchronously(). - void PerformLoadAndNotifyDelegate( - scoped_refptr<base::SequencedTaskRunner> task_runner); - - // Calls the delegate's callback method, if there is a delegate. Stores - // the newly loaded |uploads| into |uploads_| on the delegate's task runner. - void SetUploadsAndNotifyDelegate(std::vector<UploadInfo> uploads); - - // Parses upload log lines, converting them to UploadInfo entries. - void ParseLogEntries(const std::vector<std::string>& log_entries, - std::vector<UploadInfo>* uploads); + // When LoadUploadList() finishes, the results are reported in |uploads| + // and the |callback_| is run. + void OnLoadComplete(const std::vector<UploadInfo>& uploads); // Ensures that this class' thread unsafe state is only accessed from the // sequence that owns this UploadList. base::SequenceChecker sequence_checker_; + base::OnceClosure callback_; + std::vector<UploadInfo> uploads_; - Delegate* delegate_; - - const base::FilePath upload_log_path_; - - const scoped_refptr<base::TaskRunner> task_runner_; - DISALLOW_COPY_AND_ASSIGN(UploadList); };
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index b3c7fa7..000b35e 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -399,6 +399,8 @@ "blob_storage/blob_dispatcher_host.h", "blob_storage/blob_internals_url_loader.cc", "blob_storage/blob_internals_url_loader.h", + "blob_storage/blob_registry_wrapper.cc", + "blob_storage/blob_registry_wrapper.h", "blob_storage/blob_url_loader_factory.cc", "blob_storage/blob_url_loader_factory.h", "blob_storage/chrome_blob_storage_context.cc",
diff --git a/content/browser/background_fetch/background_fetch_context.cc b/content/browser/background_fetch/background_fetch_context.cc index 4facffe..4a26d01 100644 --- a/content/browser/background_fetch/background_fetch_context.cc +++ b/content/browser/background_fetch/background_fetch_context.cc
@@ -10,7 +10,6 @@ #include "content/browser/background_fetch/background_fetch_job_controller.h" #include "content/browser/background_fetch/background_fetch_registration_id.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" -#include "content/browser/storage_partition_impl.h" #include "content/public/browser/blob_handle.h" #include "content/public/browser/browser_context.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -37,48 +36,40 @@ BackgroundFetchContext::BackgroundFetchContext( BrowserContext* browser_context, - StoragePartitionImpl* storage_partition, scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) : browser_context_(browser_context), data_manager_( base::MakeUnique<BackgroundFetchDataManager>(browser_context)), event_dispatcher_(base::MakeUnique<BackgroundFetchEventDispatcher>( - std::move(service_worker_context))) { + std::move(service_worker_context))), + weak_factory_(this) { + // Although this lives only on the IO thread, it is constructed on UI thread. DCHECK_CURRENTLY_ON(BrowserThread::UI); } BackgroundFetchContext::~BackgroundFetchContext() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK_CURRENTLY_ON(BrowserThread::IO); } void BackgroundFetchContext::InitializeOnIOThread( scoped_refptr<net::URLRequestContextGetter> request_context_getter) { DCHECK_CURRENTLY_ON(BrowserThread::IO); + request_context_getter_ = request_context_getter; } -void BackgroundFetchContext::Shutdown() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&BackgroundFetchContext::ShutdownOnIO, this)); -} - -void BackgroundFetchContext::ShutdownOnIO() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - active_fetches_.clear(); -} - void BackgroundFetchContext::StartFetch( const BackgroundFetchRegistrationId& registration_id, const std::vector<ServiceWorkerFetchRequest>& requests, const BackgroundFetchOptions& options, blink::mojom::BackgroundFetchService::FetchCallback callback) { DCHECK_CURRENTLY_ON(BrowserThread::IO); + data_manager_->CreateRegistration( registration_id, requests, options, - base::BindOnce(&BackgroundFetchContext::DidCreateRegistration, this, - registration_id, options, std::move(callback))); + base::BindOnce(&BackgroundFetchContext::DidCreateRegistration, + weak_factory_.GetWeakPtr(), registration_id, options, + std::move(callback))); } void BackgroundFetchContext::DidCreateRegistration( @@ -87,6 +78,8 @@ blink::mojom::BackgroundFetchService::FetchCallback callback, blink::mojom::BackgroundFetchError error, std::vector<scoped_refptr<BackgroundFetchRequestInfo>> initial_requests) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + RecordRegistrationCreatedError(error); if (error != blink::mojom::BackgroundFetchError::NONE) { std::move(callback).Run(error, base::nullopt /* registration */); @@ -112,6 +105,8 @@ BackgroundFetchContext::GetActiveTagsForServiceWorkerRegistration( int64_t service_worker_registration_id, const url::Origin& origin) const { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + std::vector<std::string> tags; for (const auto& pair : active_fetches_) { const BackgroundFetchRegistrationId& registration_id = @@ -149,6 +144,8 @@ const BackgroundFetchRegistrationId& registration_id, const BackgroundFetchOptions& options, std::vector<scoped_refptr<BackgroundFetchRequestInfo>> initial_requests) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + net::NetworkTrafficAnnotationTag traffic_annotation = net::DefineNetworkTrafficAnnotation("background_fetch_context", R"( semantics { @@ -179,7 +176,8 @@ base::MakeUnique<BackgroundFetchJobController>( registration_id, options, data_manager_.get(), browser_context_, request_context_getter_, - base::BindOnce(&BackgroundFetchContext::DidCompleteJob, this), + base::BindOnce(&BackgroundFetchContext::DidCompleteJob, + weak_factory_.GetWeakPtr()), traffic_annotation); // TODO(peter): We should actually be able to use Background Fetch in layout @@ -196,6 +194,8 @@ void BackgroundFetchContext::DidCompleteJob( BackgroundFetchJobController* controller) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + const BackgroundFetchRegistrationId& registration_id = controller->registration_id(); @@ -204,15 +204,15 @@ case BackgroundFetchJobController::State::ABORTED: event_dispatcher_->DispatchBackgroundFetchAbortEvent( registration_id, - base::Bind(&BackgroundFetchContext::DeleteRegistration, this, - registration_id, + base::Bind(&BackgroundFetchContext::DeleteRegistration, + weak_factory_.GetWeakPtr(), registration_id, std::vector<std::unique_ptr<BlobHandle>>())); return; case BackgroundFetchJobController::State::COMPLETED: data_manager_->GetSettledFetchesForRegistration( registration_id, - base::BindOnce(&BackgroundFetchContext::DidGetSettledFetches, this, - registration_id)); + base::BindOnce(&BackgroundFetchContext::DidGetSettledFetches, + weak_factory_.GetWeakPtr(), registration_id)); return; case BackgroundFetchJobController::State::INITIALIZED: case BackgroundFetchJobController::State::FETCHING: @@ -229,6 +229,8 @@ bool background_fetch_succeeded, std::vector<BackgroundFetchSettledFetch> settled_fetches, std::vector<std::unique_ptr<BlobHandle>> blob_handles) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + if (error != blink::mojom::BackgroundFetchError::NONE) { DeleteRegistration(registration_id, std::move(blob_handles)); return; @@ -240,19 +242,22 @@ if (background_fetch_succeeded) { event_dispatcher_->DispatchBackgroundFetchedEvent( registration_id, std::move(settled_fetches), - base::Bind(&BackgroundFetchContext::DeleteRegistration, this, - registration_id, std::move(blob_handles))); + base::Bind(&BackgroundFetchContext::DeleteRegistration, + weak_factory_.GetWeakPtr(), registration_id, + std::move(blob_handles))); } else { event_dispatcher_->DispatchBackgroundFetchFailEvent( registration_id, std::move(settled_fetches), - base::Bind(&BackgroundFetchContext::DeleteRegistration, this, - registration_id, std::move(blob_handles))); + base::Bind(&BackgroundFetchContext::DeleteRegistration, + weak_factory_.GetWeakPtr(), registration_id, + std::move(blob_handles))); } } void BackgroundFetchContext::DeleteRegistration( const BackgroundFetchRegistrationId& registration_id, const std::vector<std::unique_ptr<BlobHandle>>& blob_handles) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_GT(active_fetches_.count(registration_id), 0u); // Delete all persistent information associated with the |registration_id|.
diff --git a/content/browser/background_fetch/background_fetch_context.h b/content/browser/background_fetch/background_fetch_context.h index 37a1c94..944b5bc 100644 --- a/content/browser/background_fetch/background_fetch_context.h +++ b/content/browser/background_fetch/background_fetch_context.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" #include "content/common/content_export.h" #include "content/public/browser/browser_thread.h" #include "third_party/WebKit/public/platform/modules/background_fetch/background_fetch.mojom.h" @@ -35,20 +36,18 @@ class BrowserContext; class ServiceWorkerContextWrapper; struct ServiceWorkerFetchRequest; -class StoragePartitionImpl; // The BackgroundFetchContext is the central moderator of ongoing background // fetch requests from the Mojo service and from other callers. -// Background Fetch requests function similar to normal fetches except that +// Background Fetch requests function similarly to normal fetches except that // they are persistent across Chromium or service worker shutdown. class CONTENT_EXPORT BackgroundFetchContext : public base::RefCountedThreadSafe<BackgroundFetchContext, - BrowserThread::DeleteOnUIThread> { + BrowserThread::DeleteOnIOThread> { public: // The BackgroundFetchContext will watch the ServiceWorkerContextWrapper so // that it can respond to service worker events such as unregister. BackgroundFetchContext(BrowserContext* browser_context, - StoragePartitionImpl* storage_partition, scoped_refptr<ServiceWorkerContextWrapper> context); // Finishes initializing the Background Fetch context on the IO thread by @@ -56,9 +55,6 @@ void InitializeOnIOThread( scoped_refptr<net::URLRequestContextGetter> request_context_getter); - // Shutdown must be called before deleting this. Call on the UI thread. - void Shutdown(); - // Starts a Background Fetch for the |registration_id|. The |requests| will be // asynchronously fetched. The |callback| will be invoked when the fetch has // been registered, or an error occurred that avoids it from doing so. @@ -80,15 +76,12 @@ private: friend class base::DeleteHelper<BackgroundFetchContext>; - friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; + friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>; friend class base::RefCountedThreadSafe<BackgroundFetchContext, - BrowserThread::DeleteOnUIThread>; + BrowserThread::DeleteOnIOThread>; ~BackgroundFetchContext(); - // Shuts down the active Job Controllers on the IO thread. - void ShutdownOnIO(); - // Creates a new Job Controller for the given |registration_id| and |options|, // which will start fetching the files that are part of the registration. void CreateController( @@ -135,6 +128,8 @@ std::unique_ptr<BackgroundFetchJobController>> active_fetches_; + base::WeakPtrFactory<BackgroundFetchContext> weak_factory_; // Must be last. + DISALLOW_COPY_AND_ASSIGN(BackgroundFetchContext); };
diff --git a/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc b/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc index 0d6eb0c..b930f6b0 100644 --- a/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc +++ b/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "content/browser/background_fetch/background_fetch_request_info.h" #include "content/common/service_worker/service_worker_types.h" +#include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { @@ -20,7 +21,8 @@ class BackgroundFetchCrossOriginFilterTest : public ::testing::Test { public: BackgroundFetchCrossOriginFilterTest() - : source_(url::Origin(GURL(kFirstOrigin))) {} + : thread_bundle_(TestBrowserThreadBundle::REAL_IO_THREAD), + source_(url::Origin(GURL(kFirstOrigin))) {} ~BackgroundFetchCrossOriginFilterTest() override = default; // Creates a BackgroundFetchRequestInfo instance filled with the information @@ -45,6 +47,8 @@ } protected: + TestBrowserThreadBundle thread_bundle_; // Must be first member. + url::Origin source_; private:
diff --git a/content/browser/background_fetch/background_fetch_data_manager.cc b/content/browser/background_fetch/background_fetch_data_manager.cc index 2fcb85e..52c5ae50 100644 --- a/content/browser/background_fetch/background_fetch_data_manager.cc +++ b/content/browser/background_fetch/background_fetch_data_manager.cc
@@ -122,7 +122,10 @@ BackgroundFetchDataManager::BackgroundFetchDataManager( BrowserContext* browser_context) : weak_ptr_factory_(this) { + // Constructed on the UI thread, then used on a different thread. DCHECK_CURRENTLY_ON(BrowserThread::UI); + DETACH_FROM_SEQUENCE(sequence_checker_); + DCHECK(browser_context); // Store the blob storage context for the given |browser_context|. @@ -131,13 +134,17 @@ DCHECK(blob_storage_context_); } -BackgroundFetchDataManager::~BackgroundFetchDataManager() = default; +BackgroundFetchDataManager::~BackgroundFetchDataManager() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} void BackgroundFetchDataManager::CreateRegistration( const BackgroundFetchRegistrationId& registration_id, const std::vector<ServiceWorkerFetchRequest>& requests, const BackgroundFetchOptions& options, CreateRegistrationCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (registrations_.find(registration_id) != registrations_.end()) { std::move(callback).Run( blink::mojom::BackgroundFetchError::DUPLICATED_TAG, @@ -170,6 +177,8 @@ const BackgroundFetchRegistrationId& registration_id, BackgroundFetchRequestInfo* request, const std::string& download_guid) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto iter = registrations_.find(registration_id); DCHECK(iter != registrations_.end()); @@ -181,6 +190,8 @@ const BackgroundFetchRegistrationId& registration_id, BackgroundFetchRequestInfo* request, NextRequestCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto iter = registrations_.find(registration_id); DCHECK(iter != registrations_.end()); @@ -197,6 +208,8 @@ void BackgroundFetchDataManager::GetSettledFetchesForRegistration( const BackgroundFetchRegistrationId& registration_id, SettledFetchesCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto iter = registrations_.find(registration_id); DCHECK(iter != registrations_.end()); @@ -235,6 +248,8 @@ if (request->GetFileSize() > 0) { DCHECK(!request->GetFilePath().empty()); + // CreateFileBackedBlob DCHECKs that it is called on the IO thread. This + // imposes a more specific requirement than our sequence_checker_. std::unique_ptr<BlobHandle> blob_handle = blob_storage_context_->CreateFileBackedBlob( request->GetFilePath(), 0 /* offset */, request->GetFileSize(), @@ -271,6 +286,8 @@ void BackgroundFetchDataManager::DeleteRegistration( const BackgroundFetchRegistrationId& registration_id, DeleteRegistrationCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto iter = registrations_.find(registration_id); if (iter == registrations_.end()) { std::move(callback).Run(blink::mojom::BackgroundFetchError::INVALID_TAG);
diff --git a/content/browser/background_fetch/background_fetch_data_manager.h b/content/browser/background_fetch/background_fetch_data_manager.h index 60b39ff..ab17f48 100644 --- a/content/browser/background_fetch/background_fetch_data_manager.h +++ b/content/browser/background_fetch/background_fetch_data_manager.h
@@ -13,6 +13,7 @@ #include "base/callback_forward.h" #include "base/macros.h" #include "base/optional.h" +#include "base/sequence_checker.h" #include "content/browser/background_fetch/background_fetch_registration_id.h" #include "content/common/content_export.h" #include "third_party/WebKit/public/platform/modules/background_fetch/background_fetch.mojom.h" @@ -96,6 +97,8 @@ std::map<BackgroundFetchRegistrationId, std::unique_ptr<RegistrationData>> registrations_; + SEQUENCE_CHECKER(sequence_checker_); + base::WeakPtrFactory<BackgroundFetchDataManager> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(BackgroundFetchDataManager);
diff --git a/content/browser/background_fetch/background_fetch_event_dispatcher.cc b/content/browser/background_fetch/background_fetch_event_dispatcher.cc index 291a19d..1de7fef 100644 --- a/content/browser/background_fetch/background_fetch_event_dispatcher.cc +++ b/content/browser/background_fetch/background_fetch_event_dispatcher.cc
@@ -65,9 +65,14 @@ BackgroundFetchEventDispatcher::BackgroundFetchEventDispatcher( const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context) - : service_worker_context_(service_worker_context) {} + : service_worker_context_(service_worker_context) { + // Constructed on the UI thread, then lives on the IO thread. + DCHECK_CURRENTLY_ON(BrowserThread::UI); +} -BackgroundFetchEventDispatcher::~BackgroundFetchEventDispatcher() = default; +BackgroundFetchEventDispatcher::~BackgroundFetchEventDispatcher() { + DCHECK_CURRENTLY_ON(BrowserThread::IO); +} void BackgroundFetchEventDispatcher::DispatchBackgroundFetchAbortEvent( const BackgroundFetchRegistrationId& registration_id,
diff --git a/content/browser/background_fetch/background_fetch_job_controller.cc b/content/browser/background_fetch/background_fetch_job_controller.cc index 87508cbe..1032fa2 100644 --- a/content/browser/background_fetch/background_fetch_job_controller.cc +++ b/content/browser/background_fetch/background_fetch_job_controller.cc
@@ -48,15 +48,23 @@ registration_id_(registration_id), browser_context_(browser_context), request_context_(std::move(request_context)), - weak_ptr_factory_(this) {} + weak_ptr_factory_(this) { + // Although the Core lives only on the UI thread, it is constructed on IO. + DCHECK_CURRENTLY_ON(BrowserThread::IO); + } ~Core() final { + DCHECK_CURRENTLY_ON(BrowserThread::UI); for (const auto& pair : downloads_) pair.first->RemoveObserver(this); } - // Returns a weak pointer that can be used to talk to |this|. - base::WeakPtr<Core> GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } + // Returns a weak pointer that can be used to talk to |this|. Must only be + // called on the UI thread, unless the Core is guaranteed not to be destroyed + // in parallel with this call. + base::WeakPtr<Core> GetWeakPtrOnUI() { + return weak_ptr_factory_.GetWeakPtr(); + } // Starts fetching the |request| with the download manager. void StartRequest( @@ -124,7 +132,11 @@ switch (download_item->GetState()) { case DownloadItem::DownloadState::COMPLETE: - request->PopulateResponseFromDownloadItem(download_item); + request->PopulateResponseFromDownloadItemOnUI(download_item); + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::Bind(&BackgroundFetchRequestInfo::SetResponseDataPopulated, + request)); download_item->RemoveObserver(this); // Inform the host about |host| having completed. @@ -171,7 +183,11 @@ DCHECK_EQ(interrupt_reason, DOWNLOAD_INTERRUPT_REASON_NONE); DCHECK(download_item); - request->PopulateDownloadState(download_item, interrupt_reason); + request->PopulateDownloadStateOnUI(download_item, interrupt_reason); + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::Bind(&BackgroundFetchRequestInfo::SetDownloadStatePopulated, + request)); // TODO(peter): The above two DCHECKs are assumptions our implementation // currently makes, but are not fit for production. We need to handle such @@ -233,11 +249,16 @@ ui_core_.reset(new Core(weak_ptr_factory_.GetWeakPtr(), registration_id, browser_context, std::move(request_context))); - // Get a WeakPtr over which we can talk to the |ui_core_|. - ui_core_ptr_ = ui_core_->GetWeakPtr(); + // Get a WeakPtr over which we can talk to the |ui_core_|. Normally it would + // be unsafe to obtain a weak pointer on the IO thread from a factory that + // lives on the UI thread, but it's ok in this constructor since the Core + // can't be destroyed before this constructor finishes. + ui_core_ptr_ = ui_core_->GetWeakPtrOnUI(); } -BackgroundFetchJobController::~BackgroundFetchJobController() = default; +BackgroundFetchJobController::~BackgroundFetchJobController() { + DCHECK_CURRENTLY_ON(BrowserThread::IO); +}; void BackgroundFetchJobController::Start( std::vector<scoped_refptr<BackgroundFetchRequestInfo>> initial_requests) { @@ -284,6 +305,7 @@ void BackgroundFetchJobController::DidGetNextRequest( scoped_refptr<BackgroundFetchRequestInfo> request) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_LE(pending_completed_file_acknowledgements_, 1); pending_completed_file_acknowledgements_--;
diff --git a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc index 2f0527f7..201299e 100644 --- a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc +++ b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
@@ -84,6 +84,8 @@ // Creates a new BackgroundFetchJobController instance. std::unique_ptr<BackgroundFetchJobController> CreateJobController( const BackgroundFetchRegistrationId& registration_id) { + // StoragePartition creates its own BackgroundFetchContext, but this test + // doesn't use that; it just uses the StoragePartition's URLRequestContext. StoragePartition* storage_partition = BrowserContext::GetDefaultStoragePartition(browser_context());
diff --git a/content/browser/background_fetch/background_fetch_request_info.cc b/content/browser/background_fetch/background_fetch_request_info.cc index 1973d35..0f23af18 100644 --- a/content/browser/background_fetch/background_fetch_request_info.cc +++ b/content/browser/background_fetch/background_fetch_request_info.cc
@@ -7,6 +7,8 @@ #include <string> #include "base/strings/string_util.h" +#include "base/threading/sequenced_task_runner_handle.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/download_item.h" #include "net/http/http_response_headers.h" @@ -15,13 +17,19 @@ BackgroundFetchRequestInfo::BackgroundFetchRequestInfo( int request_index, const ServiceWorkerFetchRequest& fetch_request) - : request_index_(request_index), fetch_request_(fetch_request) {} + : RefCountedDeleteOnSequence<BackgroundFetchRequestInfo>( + base::SequencedTaskRunnerHandle::Get()), + request_index_(request_index), + fetch_request_(fetch_request) {} -BackgroundFetchRequestInfo::~BackgroundFetchRequestInfo() {} +BackgroundFetchRequestInfo::~BackgroundFetchRequestInfo() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} -void BackgroundFetchRequestInfo::PopulateDownloadState( +void BackgroundFetchRequestInfo::PopulateDownloadStateOnUI( DownloadItem* download_item, DownloadInterruptReason download_interrupt_reason) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(!download_state_populated_); download_guid_ = download_item->GetGuid(); @@ -41,54 +49,68 @@ while (headers->EnumerateHeaderLines(&iter, &name, &value)) response_headers_[base::ToLowerASCII(name)] = value; } +} +void BackgroundFetchRequestInfo::SetDownloadStatePopulated() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); download_state_populated_ = true; } -void BackgroundFetchRequestInfo::PopulateResponseFromDownloadItem( +void BackgroundFetchRequestInfo::PopulateResponseFromDownloadItemOnUI( DownloadItem* download_item) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(!response_data_populated_); url_chain_ = download_item->GetUrlChain(); file_path_ = download_item->GetTargetFilePath(); file_size_ = download_item->GetReceivedBytes(); response_time_ = download_item->GetEndTime(); +} +void BackgroundFetchRequestInfo::SetResponseDataPopulated() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); response_data_populated_ = true; } int BackgroundFetchRequestInfo::GetResponseCode() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(download_state_populated_); return response_code_; } const std::string& BackgroundFetchRequestInfo::GetResponseText() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(download_state_populated_); return response_text_; } const std::map<std::string, std::string>& BackgroundFetchRequestInfo::GetResponseHeaders() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(download_state_populated_); return response_headers_; } const std::vector<GURL>& BackgroundFetchRequestInfo::GetURLChain() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(response_data_populated_); return url_chain_; } const base::FilePath& BackgroundFetchRequestInfo::GetFilePath() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(response_data_populated_); return file_path_; } int64_t BackgroundFetchRequestInfo::GetFileSize() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(response_data_populated_); return file_size_; } const base::Time& BackgroundFetchRequestInfo::GetResponseTime() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(response_data_populated_); return response_time_; }
diff --git a/content/browser/background_fetch/background_fetch_request_info.h b/content/browser/background_fetch/background_fetch_request_info.h index e3c49f89..f0b95fe 100644 --- a/content/browser/background_fetch/background_fetch_request_info.h +++ b/content/browser/background_fetch/background_fetch_request_info.h
@@ -10,7 +10,8 @@ #include "base/files/file_path.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" +#include "base/memory/ref_counted_delete_on_sequence.h" +#include "base/sequence_checker.h" #include "base/time/time.h" #include "content/browser/background_fetch/background_fetch_constants.h" #include "content/common/content_export.h" @@ -27,18 +28,23 @@ // TODO(peter): This can likely change to have a single owner, and thus become // an std::unique_ptr<>, when persistent storage has been implemented. class CONTENT_EXPORT BackgroundFetchRequestInfo - : public base::RefCountedThreadSafe<BackgroundFetchRequestInfo> { + : public base::RefCountedDeleteOnSequence<BackgroundFetchRequestInfo> { public: BackgroundFetchRequestInfo(int request_index, const ServiceWorkerFetchRequest& fetch_request); // Populates the cached state for the in-progress |download_item|. - void PopulateDownloadState(DownloadItem* download_item, - DownloadInterruptReason download_interrupt_reason); + void PopulateDownloadStateOnUI( + DownloadItem* download_item, + DownloadInterruptReason download_interrupt_reason); + + void SetDownloadStatePopulated(); // Populates the response portion of this object from the information made // available in the |download_item|. - void PopulateResponseFromDownloadItem(DownloadItem* download_item); + void PopulateResponseFromDownloadItemOnUI(DownloadItem* download_item); + + void SetResponseDataPopulated(); // Returns the index of this request within a Background Fetch registration. int request_index() const { return request_index_; } @@ -73,7 +79,8 @@ const base::Time& GetResponseTime() const; private: - friend class base::RefCountedThreadSafe<BackgroundFetchRequestInfo>; + friend class base::RefCountedDeleteOnSequence<BackgroundFetchRequestInfo>; + friend class base::DeleteHelper<BackgroundFetchRequestInfo>; friend class BackgroundFetchCrossOriginFilterTest; ~BackgroundFetchRequestInfo(); @@ -105,6 +112,8 @@ int64_t file_size_ = 0; base::Time response_time_; + SEQUENCE_CHECKER(sequence_checker_); + DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRequestInfo); };
diff --git a/content/browser/background_fetch/background_fetch_service_impl.cc b/content/browser/background_fetch/background_fetch_service_impl.cc index 37a8a8c..ea81d34 100644 --- a/content/browser/background_fetch/background_fetch_service_impl.cc +++ b/content/browser/background_fetch/background_fetch_service_impl.cc
@@ -51,7 +51,9 @@ DCHECK(background_fetch_context_); } -BackgroundFetchServiceImpl::~BackgroundFetchServiceImpl() = default; +BackgroundFetchServiceImpl::~BackgroundFetchServiceImpl() { + DCHECK_CURRENTLY_ON(BrowserThread::IO); +} void BackgroundFetchServiceImpl::Fetch( int64_t service_worker_registration_id,
diff --git a/content/browser/background_fetch/background_fetch_service_unittest.cc b/content/browser/background_fetch/background_fetch_service_unittest.cc index 46b495da..4f40552 100644 --- a/content/browser/background_fetch/background_fetch_service_unittest.cc +++ b/content/browser/background_fetch/background_fetch_service_unittest.cc
@@ -121,12 +121,14 @@ void SetUp() override { BackgroundFetchTestBase::SetUp(); + // StoragePartition creates its own BackgroundFetchContext, but this test + // doesn't use that since it has the wrong ServiceWorkerContextWrapper; this + // test just uses the StoragePartition to get a URLRequestContext. StoragePartitionImpl* storage_partition = static_cast<StoragePartitionImpl*>( BrowserContext::GetDefaultStoragePartition(browser_context())); - context_ = new BackgroundFetchContext( - browser_context(), storage_partition, + browser_context(), make_scoped_refptr(embedded_worker_test_helper()->context_wrapper())); context_->InitializeOnIOThread( make_scoped_refptr(storage_partition->GetURLRequestContext())); @@ -140,7 +142,6 @@ service_.reset(); - context_->Shutdown(); context_ = nullptr; // Give pending shutdown operations a chance to finish.
diff --git a/content/browser/background_fetch/background_fetch_test_base.cc b/content/browser/background_fetch/background_fetch_test_base.cc index bdf6507..fb538f46 100644 --- a/content/browser/background_fetch/background_fetch_test_base.cc +++ b/content/browser/background_fetch/background_fetch_test_base.cc
@@ -202,6 +202,8 @@ }; BackgroundFetchTestBase::BackgroundFetchTestBase() + // Using REAL_IO_THREAD would give better coverage for thread safety, but + // at time of writing EmbeddedWorkerTestHelper didn't seem to support that. : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), origin_(GURL(kTestOrigin)) {}
diff --git a/content/browser/background_fetch/background_fetch_test_base.h b/content/browser/background_fetch/background_fetch_test_base.h index 71482cd3..2bc8f683 100644 --- a/content/browser/background_fetch/background_fetch_test_base.h +++ b/content/browser/background_fetch/background_fetch_test_base.h
@@ -100,10 +100,12 @@ // Returns the origin that should be used for Background Fetch tests. const url::Origin& origin() const { return origin_; } + protected: + TestBrowserThreadBundle thread_bundle_; // Must be first member. + private: class RespondingDownloadManager; - TestBrowserThreadBundle thread_bundle_; TestBrowserContext browser_context_; RespondingDownloadManager* download_manager_; // owned by |browser_context_|
diff --git a/content/browser/blob_storage/blob_registry_wrapper.cc b/content/browser/blob_storage/blob_registry_wrapper.cc new file mode 100644 index 0000000..71077fb --- /dev/null +++ b/content/browser/blob_storage/blob_registry_wrapper.cc
@@ -0,0 +1,70 @@ +// 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 "content/browser/blob_storage/blob_registry_wrapper.h" + +#include "content/browser/blob_storage/chrome_blob_storage_context.h" +#include "content/browser/child_process_security_policy_impl.h" +#include "content/public/common/content_features.h" +#include "storage/browser/blob/blob_registry_impl.h" +#include "storage/browser/fileapi/file_system_context.h" + +namespace content { + +namespace { + +class BindingDelegate : public storage::BlobRegistryImpl::Delegate { + public: + explicit BindingDelegate(int process_id) : process_id_(process_id) {} + ~BindingDelegate() override {} + + bool CanReadFile(const base::FilePath& file) override { + ChildProcessSecurityPolicyImpl* security_policy = + ChildProcessSecurityPolicyImpl::GetInstance(); + return security_policy->CanReadFile(process_id_, file); + } + bool CanReadFileSystemFile(const storage::FileSystemURL& url) override { + ChildProcessSecurityPolicyImpl* security_policy = + ChildProcessSecurityPolicyImpl::GetInstance(); + return security_policy->CanReadFileSystemFile(process_id_, url); + } + + private: + const int process_id_; +}; + +} // namespace + +BlobRegistryWrapper::BlobRegistryWrapper( + scoped_refptr<ChromeBlobStorageContext> blob_storage_context, + scoped_refptr<storage::FileSystemContext> file_system_context) { + DCHECK(base::FeatureList::IsEnabled(features::kMojoBlobs)); + + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::BindOnce(&BlobRegistryWrapper::InitializeOnIOThread, this, + std::move(blob_storage_context), + std::move(file_system_context))); +} + +void BlobRegistryWrapper::Bind( + int process_id, + const service_manager::BindSourceInfo& source_info, + storage::mojom::BlobRegistryRequest request) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + blob_registry_->Bind(std::move(request), + base::MakeUnique<BindingDelegate>(process_id)); +} + +BlobRegistryWrapper::~BlobRegistryWrapper() {} + +void BlobRegistryWrapper::InitializeOnIOThread( + scoped_refptr<ChromeBlobStorageContext> blob_storage_context, + scoped_refptr<storage::FileSystemContext> file_system_context) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + blob_registry_ = base::MakeUnique<storage::BlobRegistryImpl>( + blob_storage_context->context(), std::move(file_system_context)); +} + +} // namespace content
diff --git a/content/browser/blob_storage/blob_registry_wrapper.h b/content/browser/blob_storage/blob_registry_wrapper.h new file mode 100644 index 0000000..1befb59 --- /dev/null +++ b/content/browser/blob_storage/blob_registry_wrapper.h
@@ -0,0 +1,53 @@ +// 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 CONTENT_BROWSER_BLOB_STORAGE_BLOB_REGISTRY_WRAPPER_H_ +#define CONTENT_BROWSER_BLOB_STORAGE_BLOB_REGISTRY_WRAPPER_H_ + +#include "base/memory/ref_counted.h" +#include "content/public/browser/browser_thread.h" +#include "services/service_manager/public/cpp/bind_source_info.h" +#include "storage/public/interfaces/blobs.mojom.h" + +namespace storage { +class BlobRegistryImpl; +class FileSystemContext; +} // namespace storage + +namespace content { +class ChromeBlobStorageContext; + +// A ref-counted wrapper around BlobRegistryImpl to allow StoragePartitionImpl +// to own the BlobRegistry on the UI thread, while the actual BlobRegistryImpl +// lives on the IO thread. +// +// All methods, except for the constructor, are expected to be called on the IO +// thread. +class BlobRegistryWrapper + : public base::RefCountedThreadSafe<BlobRegistryWrapper, + BrowserThread::DeleteOnIOThread> { + public: + BlobRegistryWrapper( + scoped_refptr<ChromeBlobStorageContext> blob_storage_context, + scoped_refptr<storage::FileSystemContext> file_system_context); + + void Bind(int process_id, + const service_manager::BindSourceInfo& source_info, + storage::mojom::BlobRegistryRequest request); + + private: + friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>; + friend class base::DeleteHelper<BlobRegistryWrapper>; + ~BlobRegistryWrapper(); + + void InitializeOnIOThread( + scoped_refptr<ChromeBlobStorageContext> blob_storage_context, + scoped_refptr<storage::FileSystemContext> file_system_context); + + std::unique_ptr<storage::BlobRegistryImpl> blob_registry_; +}; + +} // namespace content + +#endif // CONTENT_BROWSER_BLOB_STORAGE_BLOB_REGISTRY_WRAPPER_H_
diff --git a/content/browser/blob_storage/chrome_blob_storage_context.cc b/content/browser/blob_storage/chrome_blob_storage_context.cc index 843dabcd..d814ea2 100644 --- a/content/browser/blob_storage/chrome_blob_storage_context.cc +++ b/content/browser/blob_storage/chrome_blob_storage_context.cc
@@ -26,7 +26,6 @@ #include "content/public/common/resource_request_body.h" #include "storage/browser/blob/blob_data_builder.h" #include "storage/browser/blob/blob_memory_controller.h" -#include "storage/browser/blob/blob_registry_impl.h" #include "storage/browser/blob/blob_storage_context.h" using base::FilePath; @@ -81,6 +80,8 @@ ChromeBlobStorageContext* ChromeBlobStorageContext::GetFor( BrowserContext* context) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + if (!context->GetUserData(kBlobStorageContextKeyName)) { scoped_refptr<ChromeBlobStorageContext> blob = new ChromeBlobStorageContext(); @@ -134,9 +135,6 @@ DCHECK_CURRENTLY_ON(BrowserThread::IO); context_.reset(new BlobStorageContext(std::move(blob_storage_dir), std::move(file_task_runner))); - if (base::FeatureList::IsEnabled(features::kMojoBlobs)) - blob_registry_ = - base::MakeUnique<storage::BlobRegistryImpl>(context_.get()); // Signal the BlobMemoryController when it's appropriate to calculate its // storage limits. BrowserThread::PostAfterStartupTask( @@ -185,13 +183,6 @@ return blob_handle; } -void ChromeBlobStorageContext::BindBlobRegistry( - const service_manager::BindSourceInfo& source_info, - storage::mojom::BlobRegistryRequest request) { - DCHECK(base::FeatureList::IsEnabled(features::kMojoBlobs)); - blob_registry_->Bind(std::move(request)); -} - ChromeBlobStorageContext::~ChromeBlobStorageContext() {} void ChromeBlobStorageContext::DeleteOnCorrectThread() const {
diff --git a/content/browser/blob_storage/chrome_blob_storage_context.h b/content/browser/blob_storage/chrome_blob_storage_context.h index 87702d1..00b6123 100644 --- a/content/browser/blob_storage/chrome_blob_storage_context.h +++ b/content/browser/blob_storage/chrome_blob_storage_context.h
@@ -15,9 +15,7 @@ #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner_helpers.h" #include "content/common/content_export.h" -#include "services/service_manager/public/cpp/bind_source_info.h" #include "storage/browser/blob/blob_data_handle.h" -#include "storage/public/interfaces/blobs.mojom.h" namespace base { class FilePath; @@ -27,7 +25,6 @@ namespace storage { class BlobStorageContext; -class BlobRegistryImpl; } namespace content { @@ -50,6 +47,7 @@ public: ChromeBlobStorageContext(); + // Must be called on the UI thread. static ChromeBlobStorageContext* GetFor( BrowserContext* browser_context); @@ -69,9 +67,6 @@ int64_t size, const base::Time& expected_modification_time); - void BindBlobRegistry(const service_manager::BindSourceInfo& source_info, - storage::mojom::BlobRegistryRequest request); - protected: virtual ~ChromeBlobStorageContext(); @@ -84,7 +79,6 @@ void DeleteOnCorrectThread() const; std::unique_ptr<storage::BlobStorageContext> context_; - std::unique_ptr<storage::BlobRegistryImpl> blob_registry_; }; struct ChromeBlobStorageContextDeleter {
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc index a2a43d6..c8d25948 100644 --- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc +++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -767,7 +767,8 @@ #if defined(OS_ANDROID) #define MAYBE_CaptureScreenshotArea DISABLED_CaptureScreenshotArea #else -#define MAYBE_CaptureScreenshotArea CaptureScreenshotArea +// Temporarily disabled while protocol methods are being refactored. +#define MAYBE_CaptureScreenshotArea DISABLED_CaptureScreenshotArea #endif IN_PROC_BROWSER_TEST_F(CaptureScreenshotTest, MAYBE_CaptureScreenshotArea) { @@ -787,7 +788,9 @@ // Verifies that setDefaultBackgroundColor and captureScreenshot support a // transparent background, and that setDeviceMetricsOverride doesn't affect it. -IN_PROC_BROWSER_TEST_F(CaptureScreenshotTest, TransparentScreenshots) { + +// Temporarily disabled while protocol methods are being refactored. +IN_PROC_BROWSER_TEST_F(CaptureScreenshotTest, DISABLED_TransparentScreenshots) { if (base::SysInfo::IsLowEndDevice()) return; @@ -1375,27 +1378,6 @@ "http://b.com/devtools/control_navigations/meta_tag.html")); } -// Setting RWHV size is not supported on Android. -#if defined(OS_ANDROID) -#define MAYBE_EmulationSetVisibleSize DISABLED_EmulationSetVisibleSize -#else -#define MAYBE_EmulationSetVisibleSize EmulationSetVisibleSize -#endif -IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, - MAYBE_EmulationSetVisibleSize) { - NavigateToURLBlockUntilNavigationsComplete(shell(), GURL("about:blank"), 1); - Attach(); - gfx::Size new_size(200, 400); - std::unique_ptr<base::DictionaryValue> params(new base::DictionaryValue()); - params->SetInteger("width", new_size.width()); - params->SetInteger("height", new_size.height()); - SendCommand("Emulation.setVisibleSize", std::move(params), true); - EXPECT_SIZE_EQ(new_size, (shell()->web_contents()) - ->GetRenderWidgetHostView() - ->GetViewBounds() - .size()); -} - IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, VirtualTimeTest) { NavigateToURLBlockUntilNavigationsComplete(shell(), GURL("about:blank"), 1); Attach();
diff --git a/content/browser/devtools/protocol/emulation_handler.cc b/content/browser/devtools/protocol/emulation_handler.cc index 10f49de..736e855 100644 --- a/content/browser/devtools/protocol/emulation_handler.cc +++ b/content/browser/devtools/protocol/emulation_handler.cc
@@ -143,7 +143,7 @@ int height, double device_scale_factor, bool mobile, - bool fit_window, + Maybe<bool> fit_window, Maybe<double> scale, Maybe<double> offset_x, Maybe<double> offset_y, @@ -156,8 +156,10 @@ const static double max_scale = 10; const static int max_orientation_angle = 360; - if (!host_) - return Response::InternalError(); + RenderWidgetHostImpl* widget_host = + host_ ? host_->GetRenderWidgetHost() : nullptr; + if (!widget_host) + return Response::Error("Target does not support metrics override"); if (screen_width.fromMaybe(0) < 0 || screen_height.fromMaybe(0) < 0 || screen_width.fromMaybe(0) > max_size || @@ -214,7 +216,7 @@ blink::WebPoint(position_x.fromMaybe(0), position_y.fromMaybe(0)); params.device_scale_factor = device_scale_factor; params.view_size = blink::WebSize(width, height); - params.fit_to_view = fit_window; + params.fit_to_view = fit_window.fromMaybe(false); params.scale = scale.fromMaybe(1); params.screen_orientation_type = orientationType; params.screen_orientation_angle = orientationAngle; @@ -224,6 +226,8 @@ device_emulation_enabled_ = true; device_emulation_params_ = params; + // if (width > 0 && height > 0) + // widget_host->GetView()->SetSize(gfx::Size(width, height)); UpdateDeviceEmulationState(); return Response::OK(); } @@ -238,19 +242,19 @@ } Response EmulationHandler::SetVisibleSize(int width, int height) { - if (width < 0 || height < 0) - return Response::InvalidParams("Width and height must be non-negative"); - - // Set size of frame by resizing RWHV if available. - RenderWidgetHostImpl* widget_host = - host_ ? host_->GetRenderWidgetHost() : nullptr; - if (!widget_host) - return Response::Error("Target does not support setVisibleSize"); - - widget_host->GetView()->SetSize(gfx::Size(width, height)); return Response::OK(); } +blink::WebDeviceEmulationParams EmulationHandler::GetDeviceEmulationParams() { + return device_emulation_params_; +} + +void EmulationHandler::SetDeviceEmulationParams( + const blink::WebDeviceEmulationParams& params) { + device_emulation_params_ = params; + UpdateDeviceEmulationState(); +} + WebContentsImpl* EmulationHandler::GetWebContents() { return host_ ? static_cast<WebContentsImpl*>(WebContents::FromRenderFrameHost(host_)) :
diff --git a/content/browser/devtools/protocol/emulation_handler.h b/content/browser/devtools/protocol/emulation_handler.h index 2cd97be..12a2abd 100644 --- a/content/browser/devtools/protocol/emulation_handler.h +++ b/content/browser/devtools/protocol/emulation_handler.h
@@ -41,7 +41,7 @@ int height, double device_scale_factor, bool mobile, - bool fit_window, + Maybe<bool> fit_window, Maybe<double> scale, Maybe<double> offset_x, Maybe<double> offset_y, @@ -54,6 +54,11 @@ Response SetVisibleSize(int width, int height) override; + blink::WebDeviceEmulationParams GetDeviceEmulationParams(); + void SetDeviceEmulationParams(const blink::WebDeviceEmulationParams& params); + + bool device_emulation_enabled() { return device_emulation_enabled_; } + private: WebContentsImpl* GetWebContents(); void UpdateTouchEventEmulationState();
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc index a0a1ee8..0751813d 100644 --- a/content/browser/devtools/protocol/page_handler.cc +++ b/content/browser/devtools/protocol/page_handler.cc
@@ -22,6 +22,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "content/browser/devtools/devtools_session.h" #include "content/browser/devtools/page_navigation_throttle.h" +#include "content/browser/devtools/protocol/emulation_handler.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" #include "content/browser/web_contents/web_contents_impl.h" @@ -93,7 +94,7 @@ } // namespace -PageHandler::PageHandler() +PageHandler::PageHandler(EmulationHandler* emulation_handler) : DevToolsDomainHandler(Page::Metainfo::domainName), enabled_(false), screencast_enabled_(false), @@ -109,7 +110,10 @@ navigation_throttle_enabled_(false), next_navigation_id_(0), host_(nullptr), - weak_factory_(this) {} + emulation_handler_(emulation_handler), + weak_factory_(this) { + DCHECK(emulation_handler_); +} PageHandler::~PageHandler() { } @@ -358,13 +362,37 @@ return; } + RenderWidgetHostImpl* widget_host = host_->GetRenderWidgetHost(); + bool emulation_enabled = emulation_handler_->device_emulation_enabled(); + gfx::Size original_view_size = + emulation_enabled ? widget_host->GetView()->GetViewBounds().size() + : gfx::Size(); + blink::WebDeviceEmulationParams original_params = + emulation_handler_->GetDeviceEmulationParams(); + + if (emulation_enabled && from_surface.fromMaybe(true)) { + blink::WebDeviceEmulationParams modified_params = original_params; + gfx::Size emulated_view_size = modified_params.view_size; + if (!modified_params.view_size.width) + emulated_view_size = original_view_size; + + double dpfactor = modified_params.device_scale_factor / + widget_host->GetView()->current_device_scale_factor(); + modified_params.scale = dpfactor; + modified_params.view_size.width = emulated_view_size.width(); + modified_params.view_size.height = emulated_view_size.height(); + emulation_handler_->SetDeviceEmulationParams(modified_params); + widget_host->GetView()->SetSize( + gfx::ScaleToFlooredSize(emulated_view_size, dpfactor)); + } + std::string screenshot_format = format.fromMaybe(kPng); int screenshot_quality = quality.fromMaybe(kDefaultScreenshotQuality); - host_->GetRenderWidgetHost()->GetSnapshotFromBrowser( + widget_host->GetSnapshotFromBrowser( base::Bind(&PageHandler::ScreenshotCaptured, weak_factory_.GetWeakPtr(), base::Passed(std::move(callback)), screenshot_format, - screenshot_quality), + screenshot_quality, original_view_size, original_params), from_surface.fromMaybe(true)); } @@ -643,7 +671,15 @@ std::unique_ptr<CaptureScreenshotCallback> callback, const std::string& format, int quality, + const gfx::Size& original_view_size, + const blink::WebDeviceEmulationParams& original_emulation_params, const gfx::Image& image) { + if (original_view_size.width()) { + RenderWidgetHostImpl* widget_host = host_->GetRenderWidgetHost(); + widget_host->GetView()->SetSize(original_view_size); + emulation_handler_->SetDeviceEmulationParams(original_emulation_params); + } + if (image.IsEmpty()) { callback->sendFailure(Response::Error("Unable to capture screenshot")); return;
diff --git a/content/browser/devtools/protocol/page_handler.h b/content/browser/devtools/protocol/page_handler.h index 74b4ec3..733bab4 100644 --- a/content/browser/devtools/protocol/page_handler.h +++ b/content/browser/devtools/protocol/page_handler.h
@@ -28,6 +28,10 @@ class Image; } // namespace gfx +namespace blink { +struct WebDeviceEmulationParams; +} + namespace content { class DevToolsAgentHostImpl; @@ -38,11 +42,13 @@ namespace protocol { +class EmulationHandler; + class PageHandler : public DevToolsDomainHandler, public Page::Backend, public NotificationObserver { public: - PageHandler(); + explicit PageHandler(EmulationHandler* handler); ~PageHandler() override; static std::vector<PageHandler*> ForAgentHost(DevToolsAgentHostImpl* host); @@ -126,10 +132,13 @@ const base::Time& timestamp, const std::string& data); - void ScreenshotCaptured(std::unique_ptr<CaptureScreenshotCallback> callback, - const std::string& format, - int quality, - const gfx::Image& image); + void ScreenshotCaptured( + std::unique_ptr<CaptureScreenshotCallback> callback, + const std::string& format, + int quality, + const gfx::Size& original_view_size, + const blink::WebDeviceEmulationParams& original_params, + const gfx::Image& image); // NotificationObserver overrides. void Observe(int type, @@ -157,6 +166,7 @@ std::map<int, PageNavigationThrottle*> navigation_throttles_; RenderFrameHostImpl* host_; + EmulationHandler* emulation_handler_; std::unique_ptr<Page::Frontend> frontend_; NotificationRegistrar registrar_; base::WeakPtrFactory<PageHandler> weak_factory_;
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index baca72cc..d7e33429 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -490,12 +490,11 @@ session->SetRenderFrameHost(frame_host_); else session->SetRenderFrameHost(handlers_frame_host_); - if (frame_tree_node_ && !frame_tree_node_->parent()) { - session->AddHandler(base::WrapUnique(new protocol::PageHandler())); - session->AddHandler(base::WrapUnique(new protocol::SecurityHandler())); - } + + protocol::EmulationHandler* emulation_handler = + new protocol::EmulationHandler(); session->AddHandler(base::WrapUnique(new protocol::DOMHandler())); - session->AddHandler(base::WrapUnique(new protocol::EmulationHandler())); + session->AddHandler(base::WrapUnique(emulation_handler)); session->AddHandler(base::WrapUnique(new protocol::InputHandler())); session->AddHandler(base::WrapUnique(new protocol::InspectorHandler())); session->AddHandler(base::WrapUnique(new protocol::IOHandler( @@ -509,6 +508,11 @@ protocol::TracingHandler::Renderer, frame_tree_node_ ? frame_tree_node_->frame_tree_node_id() : 0, GetIOContext()))); + if (frame_tree_node_ && !frame_tree_node_->parent()) { + session->AddHandler( + base::WrapUnique(new protocol::PageHandler(emulation_handler))); + session->AddHandler(base::WrapUnique(new protocol::SecurityHandler())); + } if (IsBrowserSideNavigationEnabled()) { if (frame_host_) {
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc index 4f024e8..20437dd 100644 --- a/content/browser/frame_host/navigation_handle_impl.cc +++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -375,10 +375,25 @@ NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER; if (state_ == DEFERRING_START) { result = CheckWillStartRequest(); + if (result == NavigationThrottle::DEFER) { + // DO NOT ADD CODE: the NavigationHandle might have been destroyed during + // one of the NavigationThrottle checks. + return; + } } else if (state_ == DEFERRING_REDIRECT) { result = CheckWillRedirectRequest(); + if (result == NavigationThrottle::DEFER) { + // DO NOT ADD CODE: the NavigationHandle might have been destroyed during + // one of the NavigationThrottle checks. + return; + } } else { result = CheckWillProcessResponse(); + if (result == NavigationThrottle::DEFER) { + // DO NOT ADD CODE: the NavigationHandle might have been destroyed during + // one of the NavigationThrottle checks. + return; + } // If the navigation is about to proceed after having been deferred while // processing the response, then it's ready to commit. Determine which @@ -389,12 +404,11 @@ if (result == NavigationThrottle::PROCEED && !MaybeTransferAndProceed()) return; } + DCHECK_NE(NavigationThrottle::DEFER, result); - if (result != NavigationThrottle::DEFER) { - TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, - "Resuming"); - RunCompleteCallback(result); - } + TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, + "Resuming"); + RunCompleteCallback(result); } void NavigationHandleImpl::CancelDeferredNavigation( @@ -615,13 +629,15 @@ // Notify each throttle of the request. NavigationThrottle::ThrottleCheckResult result = CheckWillStartRequest(); - - // If the navigation is not deferred, run the callback. - if (result != NavigationThrottle::DEFER) { - TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this, - "StartRequest", "result", result); - RunCompleteCallback(result); + if (result == NavigationThrottle::DEFER) { + // DO NOT ADD CODE: the NavigationHandle might have been destroyed during + // one of the NavigationThrottle checks. + return; } + + TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this, + "StartRequest", "result", result); + RunCompleteCallback(result); } void NavigationHandleImpl::WillRedirectRequest( @@ -672,13 +688,15 @@ // Notify each throttle of the request. NavigationThrottle::ThrottleCheckResult result = CheckWillRedirectRequest(); - - // If the navigation is not deferred, run the callback. - if (result != NavigationThrottle::DEFER) { - TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this, - "RedirectRequest", "result", result); - RunCompleteCallback(result); + if (result == NavigationThrottle::DEFER) { + // DO NOT ADD CODE: the NavigationHandle might have been destroyed during + // one of the NavigationThrottle checks. + return; } + + TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this, + "RedirectRequest", "result", result); + RunCompleteCallback(result); } void NavigationHandleImpl::WillProcessResponse( @@ -710,6 +728,11 @@ // Notify each throttle of the response. NavigationThrottle::ThrottleCheckResult result = CheckWillProcessResponse(); + if (result == NavigationThrottle::DEFER) { + // DO NOT ADD CODE: the NavigationHandle might have been destroyed during + // one of the NavigationThrottle checks. + return; + } // If the navigation is done processing the response, then it's ready to // commit. Determine which RenderFrameHost should render the response, based @@ -719,12 +742,9 @@ if (result == NavigationThrottle::PROCEED && !MaybeTransferAndProceed()) return; - // If the navigation is not deferred, run the callback. - if (result != NavigationThrottle::DEFER) { - TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this, - "ProcessResponse", "result", result); - RunCompleteCallback(result); - } + TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this, + "ProcessResponse", "result", result); + RunCompleteCallback(result); } void NavigationHandleImpl::ReadyToCommitNavigation( @@ -865,9 +885,15 @@ DCHECK(state_ == WILL_SEND_REQUEST || state_ == DEFERRING_START); DCHECK(state_ != WILL_SEND_REQUEST || next_index_ == 0); DCHECK(state_ != DEFERRING_START || next_index_ != 0); + base::WeakPtr<NavigationHandleImpl> weak_ref = weak_factory_.GetWeakPtr(); for (size_t i = next_index_; i < throttles_.size(); ++i) { NavigationThrottle::ThrottleCheckResult result = throttles_[i]->WillStartRequest(); + if (!weak_ref) { + // The NavigationThrottle execution has destroyed this NavigationHandle. + // Return immediately. + return NavigationThrottle::DEFER; + } TRACE_EVENT_ASYNC_STEP_INTO0( "navigation", "NavigationHandle", this, base::StringPrintf("CheckWillStartRequest: %s: %d", @@ -905,9 +931,15 @@ DCHECK(state_ != WILL_REDIRECT_REQUEST || next_index_ == 0); DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0); + base::WeakPtr<NavigationHandleImpl> weak_ref = weak_factory_.GetWeakPtr(); for (size_t i = next_index_; i < throttles_.size(); ++i) { NavigationThrottle::ThrottleCheckResult result = throttles_[i]->WillRedirectRequest(); + if (!weak_ref) { + // The NavigationThrottle execution has destroyed this NavigationHandle. + // Return immediately. + return NavigationThrottle::DEFER; + } TRACE_EVENT_ASYNC_STEP_INTO0( "navigation", "NavigationHandle", this, base::StringPrintf("CheckWillRedirectRequest: %s: %d", @@ -952,9 +984,15 @@ DCHECK(state_ != WILL_PROCESS_RESPONSE || next_index_ == 0); DCHECK(state_ != DEFERRING_RESPONSE || next_index_ != 0); + base::WeakPtr<NavigationHandleImpl> weak_ref = weak_factory_.GetWeakPtr(); for (size_t i = next_index_; i < throttles_.size(); ++i) { NavigationThrottle::ThrottleCheckResult result = throttles_[i]->WillProcessResponse(); + if (!weak_ref) { + // The NavigationThrottle execution has destroyed this NavigationHandle. + // Return immediately. + return NavigationThrottle::DEFER; + } TRACE_EVENT_ASYNC_STEP_INTO0( "navigation", "NavigationHandle", this, base::StringPrintf("CheckWillProcessResponse: %s: %d",
diff --git a/content/browser/frame_host/navigation_handle_impl_unittest.cc b/content/browser/frame_host/navigation_handle_impl_unittest.cc index 0cb0857..c3bd36f1 100644 --- a/content/browser/frame_host/navigation_handle_impl_unittest.cc +++ b/content/browser/frame_host/navigation_handle_impl_unittest.cc
@@ -6,6 +6,7 @@ #include "base/macros.h" #include "content/public/browser/navigation_throttle.h" #include "content/public/browser/ssl_status.h" +#include "content/public/common/browser_side_navigation_policy.h" #include "content/public/common/request_context_type.h" #include "content/public/common/url_constants.h" #include "content/test/test_content_browser_client.h" @@ -82,6 +83,38 @@ int will_process_response_calls_; }; +// Test version of a NavigationThrottle that will execute a callback when +// called. +class TestNavigationThrottleWithCallback : public NavigationThrottle { + public: + TestNavigationThrottleWithCallback(NavigationHandle* handle, + const base::RepeatingClosure& callback) + : NavigationThrottle(handle), callback_(callback) {} + ~TestNavigationThrottleWithCallback() override {} + + NavigationThrottle::ThrottleCheckResult WillStartRequest() override { + callback_.Run(); + return NavigationThrottle::PROCEED; + } + + NavigationThrottle::ThrottleCheckResult WillRedirectRequest() override { + callback_.Run(); + return NavigationThrottle::PROCEED; + } + + NavigationThrottle::ThrottleCheckResult WillProcessResponse() override { + callback_.Run(); + return NavigationThrottle::PROCEED; + } + + const char* GetNameForLogging() override { + return "TestNavigationThrottleWithCallback"; + } + + private: + base::RepeatingClosure callback_; +}; + class NavigationHandleImplTest : public RenderViewHostImplTestHarness { public: NavigationHandleImplTest() @@ -90,14 +123,7 @@ void SetUp() override { RenderViewHostImplTestHarness::SetUp(); - test_handle_ = NavigationHandleImpl::Create( - GURL(), std::vector<GURL>(), main_test_rfh()->frame_tree_node(), - true, // is_renderer_initiated - false, // is_same_page - base::TimeTicks::Now(), 0, - false, // started_from_context_menu - CSPDisposition::CHECK, // should_check_main_world_csp - false); // is_form_submission + CreateNavigationHandle(); EXPECT_EQ(REQUEST_CONTEXT_TYPE_UNSPECIFIED, test_handle_->request_context_type_); contents()->GetMainFrame()->InitializeRenderFrameIfNeeded(); @@ -204,6 +230,28 @@ return test_throttle; } + // Creates and register a NavigationThrottle that will delete the + // NavigationHandle in checks. + void AddDeletingNavigationThrottle() { + DCHECK(test_handle_); + test_handle()->RegisterThrottleForTesting( + base::MakeUnique<TestNavigationThrottleWithCallback>( + test_handle(), base::BindRepeating( + &NavigationHandleImplTest::ResetNavigationHandle, + base::Unretained(this)))); + } + + void CreateNavigationHandle() { + test_handle_ = NavigationHandleImpl::Create( + GURL(), std::vector<GURL>(), main_test_rfh()->frame_tree_node(), + true, // is_renderer_initiated + false, // is_same_page + base::TimeTicks::Now(), 0, + false, // started_from_context_menu + CSPDisposition::CHECK, // should_check_main_world_csp + false); // is_form_submission + } + private: // The callback provided to NavigationHandleImpl::WillStartRequest and // NavigationHandleImpl::WillRedirectRequest during the tests. @@ -213,6 +261,8 @@ was_callback_called_ = true; } + void ResetNavigationHandle() { test_handle_ = nullptr; } + std::unique_ptr<NavigationHandleImpl> test_handle_; bool was_callback_called_; NavigationThrottle::ThrottleCheckResult callback_result_; @@ -812,4 +862,86 @@ EXPECT_EQ(0, proceed_throttle->will_process_response_calls()); } +// Checks that a NavigationHandle can be safely deleted by teh execution of one +// of its NavigationThrottle. +TEST_F(NavigationHandleImplTest, DeletionByNavigationThrottle) { + // Test deletion in WillStartRequest. + AddDeletingNavigationThrottle(); + SimulateWillStartRequest(); + EXPECT_EQ(nullptr, test_handle()); + if (IsBrowserSideNavigationEnabled()) { + EXPECT_FALSE(was_callback_called()); + } else { + EXPECT_EQ(NavigationThrottle::CANCEL_AND_IGNORE, callback_result()); + } + + // Test deletion in WillStartRequest after being deferred. + CreateNavigationHandle(); + CreateTestNavigationThrottle(NavigationThrottle::DEFER); + AddDeletingNavigationThrottle(); + SimulateWillStartRequest(); + EXPECT_NE(nullptr, test_handle()); + test_handle()->Resume(); + EXPECT_EQ(nullptr, test_handle()); + if (IsBrowserSideNavigationEnabled()) { + EXPECT_FALSE(was_callback_called()); + } else { + EXPECT_EQ(NavigationThrottle::CANCEL_AND_IGNORE, callback_result()); + } + + // Test deletion in WillRedirectRequest. + CreateNavigationHandle(); + SimulateWillStartRequest(); + AddDeletingNavigationThrottle(); + SimulateWillRedirectRequest(); + EXPECT_EQ(nullptr, test_handle()); + if (IsBrowserSideNavigationEnabled()) { + EXPECT_FALSE(was_callback_called()); + } else { + EXPECT_EQ(NavigationThrottle::CANCEL_AND_IGNORE, callback_result()); + } + + // Test deletion in WillRedirectRequest after being deferred. + CreateNavigationHandle(); + SimulateWillStartRequest(); + CreateTestNavigationThrottle(NavigationThrottle::DEFER); + AddDeletingNavigationThrottle(); + SimulateWillRedirectRequest(); + EXPECT_NE(nullptr, test_handle()); + test_handle()->Resume(); + EXPECT_EQ(nullptr, test_handle()); + if (IsBrowserSideNavigationEnabled()) { + EXPECT_FALSE(was_callback_called()); + } else { + EXPECT_EQ(NavigationThrottle::CANCEL_AND_IGNORE, callback_result()); + } + + // Test deletion in WillProcessResponse. + CreateNavigationHandle(); + SimulateWillStartRequest(); + AddDeletingNavigationThrottle(); + SimulateWillProcessResponse(); + EXPECT_EQ(nullptr, test_handle()); + if (IsBrowserSideNavigationEnabled()) { + EXPECT_FALSE(was_callback_called()); + } else { + EXPECT_EQ(NavigationThrottle::CANCEL_AND_IGNORE, callback_result()); + } + + // Test deletion in WillProcessResponse after being deferred. + CreateNavigationHandle(); + SimulateWillStartRequest(); + CreateTestNavigationThrottle(NavigationThrottle::DEFER); + AddDeletingNavigationThrottle(); + SimulateWillProcessResponse(); + EXPECT_NE(nullptr, test_handle()); + test_handle()->Resume(); + EXPECT_EQ(nullptr, test_handle()); + if (IsBrowserSideNavigationEnabled()) { + EXPECT_FALSE(was_callback_called()); + } else { + EXPECT_EQ(NavigationThrottle::CANCEL_AND_IGNORE, callback_result()); + } +} + } // namespace content
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 711c8b48..2aebb480 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -62,6 +62,7 @@ #include "content/browser/background_sync/background_sync_service_impl.h" #include "content/browser/bad_message.h" #include "content/browser/blob_storage/blob_dispatcher_host.h" +#include "content/browser/blob_storage/blob_registry_wrapper.h" #include "content/browser/blob_storage/blob_url_loader_factory.h" #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/broadcast_channel/broadcast_channel_provider.h" @@ -1715,9 +1716,9 @@ } if (base::FeatureList::IsEnabled(features::kMojoBlobs)) { - registry->AddInterface(base::Bind( - &ChromeBlobStorageContext::BindBlobRegistry, - base::Unretained(ChromeBlobStorageContext::GetFor(browser_context_)))); + registry->AddInterface( + base::Bind(&BlobRegistryWrapper::Bind, + storage_partition_impl_->GetBlobRegistry(), GetID())); } ServiceManagerConnection* service_manager_connection =
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc index e342df3..17777f0 100644 --- a/content/browser/renderer_host/render_widget_host_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -209,9 +209,7 @@ void SetupForInputRouterTest() { input_router_.reset(new MockInputRouter(this)); - legacy_widget_input_handler_ = - base::MakeUnique<LegacyIPCWidgetInputHandler>( - static_cast<LegacyInputRouterImpl*>(input_router_.get())); + legacy_widget_input_handler_ = nullptr; } MockInputRouter* mock_input_router() {
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc index c50b6ef..ad5f32c 100644 --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc
@@ -17,6 +17,7 @@ #include "base/single_thread_task_runner.h" #include "base/strings/utf_string_conversions.h" #include "base/task_scheduler/post_task.h" +#include "content/browser/blob_storage/blob_registry_wrapper.h" #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/browser_main_loop.h" #include "content/browser/browsing_data/storage_partition_http_cache_data_remover.h" @@ -44,6 +45,7 @@ #include "net/url_request/url_request_context_getter.h" #include "ppapi/features/features.h" #include "services/service_manager/public/cpp/connector.h" +#include "storage/browser/blob/blob_registry_impl.h" #include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/database/database_tracker.h" #include "storage/browser/quota/quota_manager.h" @@ -418,9 +420,6 @@ if (GetPlatformNotificationContext()) GetPlatformNotificationContext()->Shutdown(); - if (GetBackgroundFetchContext()) - GetBackgroundFetchContext()->Shutdown(); - if (GetBackgroundSyncContext()) GetBackgroundSyncContext()->Shutdown(); @@ -516,8 +515,8 @@ partition->service_worker_context_); partition->platform_notification_context_->Initialize(); - partition->background_fetch_context_ = new BackgroundFetchContext( - context, partition.get(), partition->service_worker_context_); + partition->background_fetch_context_ = + new BackgroundFetchContext(context, partition->service_worker_context_); partition->background_sync_context_ = new BackgroundSyncContext(); partition->background_sync_context_->Init(partition->service_worker_context_); @@ -561,6 +560,11 @@ path, quota_manager_proxy.get(), context->GetSpecialStoragePolicy(), blob_context.get(), partition->url_loader_factory_getter_.get()); + if (base::FeatureList::IsEnabled(features::kMojoBlobs)) { + partition->blob_registry_ = base::MakeRefCounted<BlobRegistryWrapper>( + blob_context, partition->filesystem_context_); + } + return partition; } @@ -655,6 +659,10 @@ return blob_url_loader_factory_.get(); } +BlobRegistryWrapper* StoragePartitionImpl::GetBlobRegistry() { + return blob_registry_.get(); +} + void StoragePartitionImpl::OpenLocalStorage( const url::Origin& origin, mojo::InterfaceRequest<mojom::LevelDBWrapper> request) {
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h index c5798a2..a0df88a7 100644 --- a/content/browser/storage_partition_impl.h +++ b/content/browser/storage_partition_impl.h
@@ -42,6 +42,7 @@ #endif namespace content { +class BlobRegistryWrapper; class BlobURLLoaderFactory; class CONTENT_EXPORT StoragePartitionImpl @@ -119,6 +120,7 @@ BroadcastChannelProvider* GetBroadcastChannelProvider(); BluetoothAllowedDevicesMap* GetBluetoothAllowedDevicesMap(); BlobURLLoaderFactory* GetBlobURLLoaderFactory(); + BlobRegistryWrapper* GetBlobRegistry(); // mojom::StoragePartitionService interface. void OpenLocalStorage( @@ -251,6 +253,7 @@ scoped_refptr<BroadcastChannelProvider> broadcast_channel_provider_; scoped_refptr<BluetoothAllowedDevicesMap> bluetooth_allowed_devices_map_; scoped_refptr<BlobURLLoaderFactory> blob_url_loader_factory_; + scoped_refptr<BlobRegistryWrapper> blob_registry_; mojo::BindingSet<mojom::StoragePartitionService> bindings_; mojom::NetworkContextPtr network_context_;
diff --git a/content/shell/browser/layout_test/layout_test_browser_context.cc b/content/shell/browser/layout_test/layout_test_browser_context.cc index d8ccd83..1e29a481 100644 --- a/content/shell/browser/layout_test/layout_test_browser_context.cc +++ b/content/shell/browser/layout_test/layout_test_browser_context.cc
@@ -85,7 +85,6 @@ LayoutTestBrowserContext::LayoutTestBrowserContext(bool off_the_record, net::NetLog* net_log) : ShellBrowserContext(off_the_record, net_log) { - ignore_certificate_errors_ = true; } LayoutTestBrowserContext::~LayoutTestBrowserContext() {
diff --git a/content/shell/browser/layout_test/layout_test_browser_main.cc b/content/shell/browser/layout_test/layout_test_browser_main.cc index 28a0ac7f..bf644774 100644 --- a/content/shell/browser/layout_test/layout_test_browser_main.cc +++ b/content/shell/browser/layout_test/layout_test_browser_main.cc
@@ -21,6 +21,7 @@ #include "base/threading/thread_restrictions.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" +#include "components/network_session_configurator/common/network_switches.h" #include "content/public/browser/browser_main_runner.h" #include "content/public/common/url_constants.h" #include "content/shell/browser/layout_test/blink_test_controller.h" @@ -119,6 +120,8 @@ CHECK(browser_context_path_for_layout_tests.CreateUniqueTempDir()); CHECK( !browser_context_path_for_layout_tests.GetPath().MaybeAsASCII().empty()); + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kIgnoreCertificateErrors); base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( switches::kContentShellDataPath, browser_context_path_for_layout_tests.GetPath().MaybeAsASCII());
diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h index 660c602..d98a7b84 100644 --- a/content/shell/browser/shell_browser_context.h +++ b/content/shell/browser/shell_browser_context.h
@@ -108,7 +108,6 @@ net::NetLog* net_log() const { return net_log_; } std::unique_ptr<ShellResourceContext> resource_context_; - bool ignore_certificate_errors_; std::unique_ptr<ShellDownloadManagerDelegate> download_manager_delegate_; std::unique_ptr<PermissionManager> permission_manager_; std::unique_ptr<BackgroundSyncController> background_sync_controller_; @@ -118,6 +117,7 @@ // allowed on the current thread. void InitWhileIOAllowed(); + bool ignore_certificate_errors_; bool off_the_record_; net::NetLog* net_log_; base::FilePath path_;
diff --git a/device/usb/usb_device_handle_impl.cc b/device/usb/usb_device_handle_impl.cc index e8b5b42..3740c89f3 100644 --- a/device/usb/usb_device_handle_impl.cc +++ b/device/usb/usb_device_handle_impl.cc
@@ -863,11 +863,14 @@ scoped_refptr<InterfaceClaimer> interface_claimer, const ResultCallback& callback) { if (!device_) { - // Ensure that the InterfaceClaimer is released on the blocking thread. - InterfaceClaimer* raw_interface_claimer = interface_claimer.get(); - interface_claimer->AddRef(); - interface_claimer = nullptr; - blocking_task_runner_->ReleaseSoon(FROM_HERE, raw_interface_claimer); + if (interface_claimer) { + // Ensure that the InterfaceClaimer is released on the blocking thread. + InterfaceClaimer* raw_interface_claimer = interface_claimer.get(); + interface_claimer->AddRef(); + interface_claimer = nullptr; + blocking_task_runner_->ReleaseSoon(FROM_HERE, raw_interface_claimer); + } + callback.Run(false); return; } @@ -877,7 +880,7 @@ interface_claimer; RefreshEndpointMap(); } - callback.Run(static_cast<bool>(interface_claimer)); + callback.Run(interface_claimer != nullptr); } void UsbDeviceHandleImpl::SetInterfaceAlternateSettingOnBlockingThread(
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc index df150ac..0f2333d3 100644 --- a/gpu/config/gpu_finch_features.cc +++ b/gpu/config/gpu_finch_features.cc
@@ -18,9 +18,9 @@ "DefaultEnableGpuRasterization", base::FEATURE_DISABLED_BY_DEFAULT}; #endif -// Enables the GPU scheduler. This can still be overridden by -// --enable-gpu-scheduler or --disable-gpu-scheduler. +// Enables the GPU scheduler. The finch feature is only used as an emergency +// kill-switch and to keep the alternate code path tested on canary/dev. const base::Feature kGpuScheduler{"GpuScheduler", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; } // namespace features
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc index aace371..f5f288d 100644 --- a/headless/app/headless_shell.cc +++ b/headless/app/headless_shell.cc
@@ -623,13 +623,9 @@ if (command_line.HasSwitch(switches::kProxyServer)) { std::string proxy_server = command_line.GetSwitchValueASCII(switches::kProxyServer); - net::HostPortPair parsed_proxy_server = - net::HostPortPair::FromString(proxy_server); - if (parsed_proxy_server.host().empty() || !parsed_proxy_server.port()) { - LOG(ERROR) << "Malformed proxy server url"; - return EXIT_FAILURE; - } - builder.SetProxyServer(parsed_proxy_server); + std::unique_ptr<net::ProxyConfig> proxy_config(new net::ProxyConfig); + proxy_config->proxy_rules().ParseFromString(proxy_server); + builder.SetProxyConfig(std::move(proxy_config)); } if (command_line.HasSwitch(switches::kHostResolverRules)) {
diff --git a/headless/lib/browser/headless_browser_context_impl.cc b/headless/lib/browser/headless_browser_context_impl.cc index aadea8fe..1954451 100644 --- a/headless/lib/browser/headless_browser_context_impl.cc +++ b/headless/lib/browser/headless_browser_context_impl.cc
@@ -381,9 +381,9 @@ } HeadlessBrowserContext::Builder& -HeadlessBrowserContext::Builder::SetProxyServer( - const net::HostPortPair& proxy_server) { - options_->proxy_server_ = proxy_server; +HeadlessBrowserContext::Builder::SetProxyConfig( + std::unique_ptr<net::ProxyConfig> proxy_config) { + options_->proxy_config_ = std::move(proxy_config); return *this; }
diff --git a/headless/lib/browser/headless_browser_context_options.cc b/headless/lib/browser/headless_browser_context_options.cc index e31158bd..5ca1ab3 100644 --- a/headless/lib/browser/headless_browser_context_options.cc +++ b/headless/lib/browser/headless_browser_context_options.cc
@@ -45,8 +45,10 @@ return browser_options_->user_agent; } -const net::HostPortPair& HeadlessBrowserContextOptions::proxy_server() const { - return ReturnOverriddenValue(proxy_server_, browser_options_->proxy_server); +const net::ProxyConfig* HeadlessBrowserContextOptions::proxy_config() const { + if (proxy_config_) + return proxy_config_.get(); + return browser_options_->proxy_config.get(); } const std::string& HeadlessBrowserContextOptions::host_resolver_rules() const {
diff --git a/headless/lib/browser/headless_browser_context_options.h b/headless/lib/browser/headless_browser_context_options.h index f8096d8..1d3fb84 100644 --- a/headless/lib/browser/headless_browser_context_options.h +++ b/headless/lib/browser/headless_browser_context_options.h
@@ -29,8 +29,8 @@ const std::string& product_name_and_version() const; const std::string& user_agent() const; - // See HeadlessBrowser::Options::proxy_server. - const net::HostPortPair& proxy_server() const; + // See HeadlessBrowser::Options::proxy_config. + const net::ProxyConfig* proxy_config() const; // See HeadlessBrowser::Options::host_resolver_rules. const std::string& host_resolver_rules() const; @@ -62,7 +62,7 @@ HeadlessBrowser::Options* browser_options_; base::Optional<std::string> product_name_and_version_; - base::Optional<net::HostPortPair> proxy_server_; + std::unique_ptr<net::ProxyConfig> proxy_config_; base::Optional<std::string> host_resolver_rules_; base::Optional<gfx::Size> window_size_; base::Optional<base::FilePath> user_data_dir_;
diff --git a/headless/lib/browser/headless_url_request_context_getter.cc b/headless/lib/browser/headless_url_request_context_getter.cc index f3ebc55e..bb00b63a 100644 --- a/headless/lib/browser/headless_url_request_context_getter.cc +++ b/headless/lib/browser/headless_url_request_context_getter.cc
@@ -33,7 +33,7 @@ {base::MayBlock(), base::TaskPriority::BACKGROUND})), user_agent_(options->user_agent()), host_resolver_rules_(options->host_resolver_rules()), - proxy_server_(options->proxy_server()), + proxy_config_(options->proxy_config()), request_interceptors_(std::move(request_interceptors)), net_log_(net_log), headless_browser_context_(headless_browser_context) { @@ -52,7 +52,7 @@ // We must create the proxy config service on the UI loop on Linux because it // must synchronously run on the glib message loop. This will be passed to // the URLRequestContextStorage on the IO thread in GetURLRequestContext(). - if (proxy_server_.IsEmpty()) { + if (!proxy_config_) { proxy_config_service_ = net::ProxyService::CreateSystemProxyConfigService(io_task_runner_); } @@ -71,9 +71,8 @@ builder.set_data_enabled(true); builder.set_file_enabled(true); builder.SetFileTaskRunner(file_task_runner_); - if (!proxy_server_.IsEmpty()) { - builder.set_proxy_service( - net::ProxyService::CreateFixed(proxy_server_.ToString())); + if (proxy_config_) { + builder.set_proxy_service(net::ProxyService::CreateFixed(*proxy_config_)); } else { builder.set_proxy_config_service(std::move(proxy_config_service_)); }
diff --git a/headless/lib/browser/headless_url_request_context_getter.h b/headless/lib/browser/headless_url_request_context_getter.h index 79cef02..5080fa89 100644 --- a/headless/lib/browser/headless_url_request_context_getter.h +++ b/headless/lib/browser/headless_url_request_context_getter.h
@@ -16,6 +16,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/content_browser_client.h" #include "headless/public/headless_browser.h" +#include "net/proxy/proxy_config.h" #include "net/proxy/proxy_config_service.h" #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_job_factory.h" @@ -61,7 +62,7 @@ // thread. std::string user_agent_; std::string host_resolver_rules_; - net::HostPortPair proxy_server_; + const net::ProxyConfig* proxy_config_; // Not owned. std::unique_ptr<net::ProxyConfigService> proxy_config_service_; std::unique_ptr<net::URLRequestContext> url_request_context_;
diff --git a/headless/lib/headless_browser_browsertest.cc b/headless/lib/headless_browser_browsertest.cc index 5ca4e66..1206725 100644 --- a/headless/lib/headless_browser_browsertest.cc +++ b/headless/lib/headless_browser_browsertest.cc
@@ -207,11 +207,14 @@ net::SpawnedTestServer proxy_server_; }; -IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyServer) { +IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyConfig) { + std::unique_ptr<net::ProxyConfig> proxy_config(new net::ProxyConfig); + proxy_config->proxy_rules().ParseFromString( + proxy_server()->host_port_pair().ToString()); HeadlessBrowserContext* browser_context = browser() ->CreateBrowserContextBuilder() - .SetProxyServer(proxy_server()->host_port_pair()) + .SetProxyConfig(std::move(proxy_config)) .Build(); // Load a page which doesn't actually exist, but for which the our proxy
diff --git a/headless/public/headless_browser.cc b/headless/public/headless_browser.cc index 4eed919..d70edaf6 100644 --- a/headless/public/headless_browser.cc +++ b/headless/public/headless_browser.cc
@@ -99,8 +99,9 @@ return *this; } -Builder& Builder::SetProxyServer(const net::HostPortPair& proxy_server) { - options_.proxy_server = proxy_server; +Builder& Builder::SetProxyConfig( + std::unique_ptr<net::ProxyConfig> proxy_config) { + options_.proxy_config = std::move(proxy_config); return *this; }
diff --git a/headless/public/headless_browser.h b/headless/public/headless_browser.h index dc431c73..63f6c74 100644 --- a/headless/public/headless_browser.h +++ b/headless/public/headless_browser.h
@@ -18,7 +18,6 @@ #include "headless/public/headless_browser_context.h" #include "headless/public/headless_export.h" #include "headless/public/headless_web_contents.h" -#include "net/base/host_port_pair.h" #include "net/base/ip_endpoint.h" #include "ui/gfx/geometry/size.h" @@ -152,9 +151,8 @@ std::string product_name_and_version; std::string user_agent; - // Address of the HTTP/HTTPS proxy server to use. The system proxy settings - // are used by default. - net::HostPortPair proxy_server; + // The ProxyConfig to use. The system proxy settings are used by default. + std::unique_ptr<net::ProxyConfig> proxy_config; // Comma-separated list of rules that control how hostnames are mapped. See // chrome::switches::kHostRules for a description for the format. @@ -218,7 +216,7 @@ Builder& SetProductNameAndVersion( const std::string& product_name_and_version); Builder& SetUserAgent(const std::string& user_agent); - Builder& SetProxyServer(const net::HostPortPair& proxy_server); + Builder& SetProxyConfig(std::unique_ptr<net::ProxyConfig> proxy_config); Builder& SetHostResolverRules(const std::string& host_resolver_rules); Builder& SetWindowSize(const gfx::Size& window_size); Builder& SetUserDataDir(const base::FilePath& user_data_dir);
diff --git a/headless/public/headless_browser_context.h b/headless/public/headless_browser_context.h index 60b73ca6..0b2a002 100644 --- a/headless/public/headless_browser_context.h +++ b/headless/public/headless_browser_context.h
@@ -16,7 +16,7 @@ #include "content/public/common/web_preferences.h" #include "headless/public/headless_export.h" #include "headless/public/headless_web_contents.h" -#include "net/base/host_port_pair.h" +#include "net/proxy/proxy_service.h" #include "net/url_request/url_request_job_factory.h" namespace base { @@ -121,7 +121,7 @@ Builder& SetProductNameAndVersion( const std::string& product_name_and_version); Builder& SetUserAgent(const std::string& user_agent); - Builder& SetProxyServer(const net::HostPortPair& proxy_server); + Builder& SetProxyConfig(std::unique_ptr<net::ProxyConfig> proxy_config); Builder& SetHostResolverRules(const std::string& host_resolver_rules); Builder& SetWindowSize(const gfx::Size& window_size); Builder& SetUserDataDir(const base::FilePath& user_data_dir);
diff --git a/ios/chrome/app/main_controller.h b/ios/chrome/app/main_controller.h index 22d9fd7..fc8f0a2 100644 --- a/ios/chrome/app/main_controller.h +++ b/ios/chrome/app/main_controller.h
@@ -12,6 +12,7 @@ #import "ios/chrome/app/application_delegate/startup_information.h" #import "ios/chrome/app/application_delegate/tab_opening.h" #import "ios/chrome/app/application_delegate/tab_switching.h" +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/main/browser_view_information.h" @class AppState; @@ -23,7 +24,8 @@ // // By design, it has no public API of its own. Anything interacting with // MainController should be doing so through a specific protocol. -@interface MainController : NSObject<AppNavigation, +@interface MainController : NSObject<ApplicationCommands, + AppNavigation, BrowserLauncher, StartupInformation, TabOpening,
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index 1bafa1c..18475eb 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -362,8 +362,6 @@ - (void)activateBVCAndMakeCurrentBVCPrimary; // Sets |currentBVC| as the root view controller for the window. - (void)displayCurrentBVC; -// Shows the settings UI. -- (void)showSettings; // Shows the accounts settings UI. - (void)showAccountsSettings; // Shows the Sync settings UI. @@ -682,7 +680,8 @@ [_browserViewWrangler shutdown]; _browserViewWrangler = [[BrowserViewWrangler alloc] initWithBrowserState:_mainBrowserState - tabModelObserver:self]; + tabModelObserver:self + applicationCommandEndpoint:self]; // Ensure the main tab model is created. ignore_result([_browserViewWrangler mainTabModel]); @@ -1382,9 +1381,6 @@ case IDC_OPEN_URL: [self openUrl:base::mac::ObjCCast<OpenUrlCommand>(sender)]; break; - case IDC_OPTIONS: - [self showSettings]; - break; case IDC_REPORT_AN_ISSUE: { dispatch_async(dispatch_get_main_queue(), ^{ [self showReportAnIssue]; @@ -1731,10 +1727,11 @@ otrTabModel:self.otrTabModel activeTabModel:self.currentTabModel]; } else { - _tabSwitcherController = [[StackViewController alloc] - initWithMainTabModel:self.mainTabModel - otrTabModel:self.otrTabModel - activeTabModel:self.currentTabModel]; + _tabSwitcherController = + [[StackViewController alloc] initWithMainTabModel:self.mainTabModel + otrTabModel:self.otrTabModel + activeTabModel:self.currentTabModel + applicationCommandEndpoint:self]; } } else { // The StackViewController is kept in memory to avoid the performance hit of @@ -2544,7 +2541,8 @@ [_browserViewWrangler shutdown]; _browserViewWrangler = [[BrowserViewWrangler alloc] initWithBrowserState:nullptr - tabModelObserver:self]; + tabModelObserver:self + applicationCommandEndpoint:self]; // This is a test utility method that bypasses the ususal setup steps, so // verify that the main coordinator hasn't been created yet, then start it // via lazy initialization.
diff --git a/ios/chrome/browser/crash_report/crash_upload_list.cc b/ios/chrome/browser/crash_report/crash_upload_list.cc index 17d5519..6f216da 100644 --- a/ios/chrome/browser/crash_report/crash_upload_list.cc +++ b/ios/chrome/browser/crash_report/crash_upload_list.cc
@@ -6,20 +6,18 @@ #include "base/files/file_path.h" #include "base/path_service.h" -#include "base/threading/sequenced_worker_pool.h" +#include "components/upload_list/crash_upload_list.h" +#include "components/upload_list/text_log_upload_list.h" #include "ios/chrome/browser/chrome_paths.h" -#include "ios/web/public/web_thread.h" namespace ios { -scoped_refptr<CrashUploadList> CreateCrashUploadList( - UploadList::Delegate* delegate) { +scoped_refptr<UploadList> CreateCrashUploadList() { base::FilePath crash_dir_path; PathService::Get(ios::DIR_CRASH_DUMPS, &crash_dir_path); base::FilePath upload_log_path = crash_dir_path.AppendASCII(CrashUploadList::kReporterLogFilename); - return new CrashUploadList(delegate, upload_log_path, - web::WebThread::GetBlockingPool()); + return new TextLogUploadList(upload_log_path); } } // namespace ios
diff --git a/ios/chrome/browser/crash_report/crash_upload_list.h b/ios/chrome/browser/crash_report/crash_upload_list.h index 4f4ce42..b84f05cd 100644 --- a/ios/chrome/browser/crash_report/crash_upload_list.h +++ b/ios/chrome/browser/crash_report/crash_upload_list.h
@@ -6,14 +6,13 @@ #define IOS_CHROME_BROWSER_CRASH_REPORT_CRASH_UPLOAD_LIST_H_ #include "base/memory/ref_counted.h" -#include "components/upload_list/crash_upload_list.h" +#include "components/upload_list/upload_list.h" namespace ios { // Factory that creates the platform-specific implementation of the crash // upload list with the given callback delegate. -scoped_refptr<CrashUploadList> CreateCrashUploadList( - UploadList::Delegate* delegate); +scoped_refptr<UploadList> CreateCrashUploadList(); } // namespace ios
diff --git a/ios/chrome/browser/ntp_tiles/BUILD.gn b/ios/chrome/browser/ntp_tiles/BUILD.gn index e8ce0d2..5e2036d 100644 --- a/ios/chrome/browser/ntp_tiles/BUILD.gn +++ b/ios/chrome/browser/ntp_tiles/BUILD.gn
@@ -29,3 +29,19 @@ "//ios/web", ] } + +source_set("eg_tests") { + testonly = true + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ + "ntp_tiles_egtest.mm", + ] + deps = [ + ":ntp_tiles", + "//components/ntp_tiles:ntp_tiles", + "//ios/chrome/test/app:test_support", + "//ios/chrome/test/earl_grey:test_support", + "//ios/testing:ios_test_support", + "//ios/web/public/test/http_server:http_server", + ] +}
diff --git a/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm b/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm new file mode 100644 index 0000000..6296993 --- /dev/null +++ b/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm
@@ -0,0 +1,57 @@ +// 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 <EarlGrey/EarlGrey.h> + +#import "ios/chrome/test/app/chrome_test_util.h" +#import "ios/chrome/test/app/history_test_util.h" +#import "ios/chrome/test/app/tab_test_util.h" +#import "ios/chrome/test/earl_grey/chrome_earl_grey.h" +#import "ios/chrome/test/earl_grey/chrome_matchers.h" +#import "ios/chrome/test/earl_grey/chrome_test_case.h" +#import "ios/testing/wait_util.h" +#import "ios/web/public/test/http_server/http_server.h" +#include "ios/web/public/test/http_server/http_server_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +// Test case for NTP tiles. +@interface NTPTilesTest : ChromeTestCase +@end + +@implementation NTPTilesTest + +// Tests that loading a URL ends up creating an NTP tile. +- (void)testTopSitesTileAfterLoadURL { + std::map<GURL, std::string> responses; + GURL URL = web::test::HttpServer::MakeUrl("http://simple_tile.html"); + responses[URL] = + "<head><title>title1</title></head>" + "<body>You are here.</body>"; + web::test::SetUpSimpleHttpServer(responses); + + // Clear history and verify that the tile does not exist. + chrome_test_util::ClearBrowsingHistory(); + [[GREYUIThreadExecutor sharedInstance] drainUntilIdle]; + chrome_test_util::OpenNewTab(); + + [[EarlGrey selectElementWithMatcher: + chrome_test_util::StaticTextWithAccessibilityLabel(@"title1")] + assertWithMatcher:grey_nil()]; + + [ChromeEarlGrey loadURL:URL]; + + // After loading URL, need to do another action before opening a new tab + // with the icon present. + [ChromeEarlGrey goBack]; + + chrome_test_util::OpenNewTab(); + [[EarlGrey selectElementWithMatcher: + chrome_test_util::StaticTextWithAccessibilityLabel(@"title1")] + assertWithMatcher:grey_notNil()]; +} + +@end
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index f566d48..6a75c95 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -1339,9 +1339,6 @@ DCHECK(self.webController.loadPhase == web::LOAD_REQUESTED); DCHECK([self navigationManager]); - // Move the toolbar to visible during page load. - [_fullScreenController disableFullScreen]; - BOOL isUserNavigationEvent = (transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK) == 0; // Check for link-follow clobbers. These are changes where there is no @@ -1371,6 +1368,11 @@ [_parentTabModel tabUsageRecorder]->RecordReload(self); } + // Move the toolbar to visible during page load. + // TODO(crbug.com/707305): Do not disable fullscreen for same-document + // navigations. + [_fullScreenController disableFullScreen]; + [self.dialogDelegate cancelDialogForTab:self]; [_parentTabModel notifyTabChanged:self]; [_openInController disable];
diff --git a/ios/chrome/browser/test/perf_test_with_bvc_ios.mm b/ios/chrome/browser/test/perf_test_with_bvc_ios.mm index 72ad2723..e74849f6 100644 --- a/ios/chrome/browser/test/perf_test_with_bvc_ios.mm +++ b/ios/chrome/browser/test/perf_test_with_bvc_ios.mm
@@ -143,9 +143,10 @@ bvc_factory_.reset([[TestBVCDependencyFactory alloc] initWithBrowserState:chrome_browser_state_.get()]); bvc_.reset([[BrowserViewController alloc] - initWithTabModel:tab_model_ - browserState:chrome_browser_state_.get() - dependencyFactory:bvc_factory_]); + initWithTabModel:tab_model_ + browserState:chrome_browser_state_.get() + dependencyFactory:bvc_factory_ + applicationCommandEndpoint:nil]); [bvc_ setActive:YES]; // Create a real window to give to the browser view controller.
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm index d642cb6..429843b 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm
@@ -52,8 +52,7 @@ BookmarkFolderViewControllerDelegate, BookmarkMenuViewDelegate, BookmarkModelBridgeObserver, - BookmarkPanelViewDelegate, - BookmarkPromoControllerDelegate> { + BookmarkPanelViewDelegate> { // Bridge to register for bookmark changes. std::unique_ptr<bookmarks::BookmarkModelBridge> _bridge; } @@ -89,11 +88,6 @@ @property(nonatomic, strong) BookmarkFolderViewController* folderSelector; // The view controller to present when editing the current folder. @property(nonatomic, strong) BookmarkFolderEditorViewController* folderEditor; -#pragma mark Specific to this class. - -// The controller managing the display of the promo cell and the promo view -// controller. -@property(nonatomic, strong) BookmarkPromoController* bookmarkPromoController; #pragma mark View loading and switching // This method should be called at most once in the life-cycle of the @@ -201,8 +195,6 @@ @synthesize folderSelector = _folderSelector; @synthesize folderEditor = _folderEditor; -@synthesize bookmarkPromoController = _bookmarkPromoController; - @synthesize delegate = _delegate; @synthesize editIndexPaths = _editIndexPaths; @synthesize editing = _editing; @@ -216,11 +208,6 @@ [self resetEditNodes]; _bridge.reset(new bookmarks::BookmarkModelBridge(self, self.bookmarks)); - // It is important to initialize the promo controller with the browser state - // passed in, as it could be incognito. - _bookmarkPromoController = - [[BookmarkPromoController alloc] initWithBrowserState:browserState - delegate:self]; } return self; } @@ -1071,13 +1058,6 @@ navigationToUrl:url]; } -#pragma mark - BookmarkPromoControllerDelegate - -- (void)promoStateChanged:(BOOL)promoEnabled { - [self.folderView - promoStateChangedAnimated:self.folderView == [self primaryView]]; -} - - (NSIndexPath*)indexPathForCell:(UICollectionViewCell*)cell { DCHECK([self primaryView].collectionView); NSIndexPath* indexPath =
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm index f7d4eba..4c2ac35 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm
@@ -60,8 +60,7 @@ BookmarkFolderEditorViewControllerDelegate, BookmarkFolderViewControllerDelegate, BookmarkMenuViewDelegate, - BookmarkModelBridgeObserver, - BookmarkPromoControllerDelegate> { + BookmarkModelBridgeObserver> { // Bridge to register for bookmark changes. std::unique_ptr<bookmarks::BookmarkModelBridge> _bridge; @@ -112,9 +111,6 @@ // The view controller to present when editing the current folder. @property(nonatomic, strong) BookmarkFolderEditorViewController* folderEditor; // FIX -// The controller managing the display of the promo cell and the promo view -// controller. -@property(nonatomic, strong) BookmarkPromoController* bookmarkPromoController; #pragma mark Specific to this class. @@ -221,7 +217,6 @@ @synthesize editViewController = _editViewController; @synthesize folderSelector = _folderSelector; @synthesize folderEditor = _folderEditor; -@synthesize bookmarkPromoController = _bookmarkPromoController; // Property declared in NewTabPagePanelProtocol. @synthesize delegate = _delegate; @@ -232,11 +227,6 @@ if (self) { _bridge.reset(new bookmarks::BookmarkModelBridge(self, self.bookmarks)); _editIndexPaths = [[NSMutableArray alloc] init]; - // It is important to initialize the promo controller with the browser state - // passed in, as it could be incognito. - _bookmarkPromoController = - [[BookmarkPromoController alloc] initWithBrowserState:browserState - delegate:self]; } return self; } @@ -1114,13 +1104,6 @@ [self setEditing:NO animated:YES]; } -#pragma mark - BookmarkPromoControllerDelegate - -- (void)promoStateChanged:(BOOL)promoEnabled { - [self.folderView - promoStateChangedAnimated:self.folderView == [self primaryView]]; -} - - (NSIndexPath*)indexPathForCell:(UICollectionViewCell*)cell { DCHECK([self primaryView].collectionView); NSIndexPath* indexPath =
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h index 9f29228..7c671b5 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h
@@ -27,6 +27,7 @@ @class BookmarkHomeWaitingView; @class BookmarkNavigationBar; @class BookmarkMenuItem; +@class BookmarkPromoController; // Class to navigate the bookmark hierarchy, needs subclassing for tablet / // handset case. @@ -92,6 +93,11 @@ // The active collection view that corresponds to primaryMenuItem. - (UIView<BookmarkHomePrimaryView>*)primaryView; + +// The controller managing the display of the promo cell and the promo view +// controller. +@property(nonatomic, strong, readonly) + BookmarkPromoController* bookmarkPromoController; @end #endif // IOS_CHROME_BROWSER_UI_BOOKMARKS_HOME_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm index 4ebcdcc..261bc0c 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -14,6 +14,7 @@ #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h" #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_view.h" #import "ios/chrome/browser/ui/bookmarks/bookmark_panel_view.h" +#import "ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.h" #import "ios/chrome/browser/ui/rtl_geometry.h" #import "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" @@ -26,8 +27,9 @@ const CGFloat kMenuWidth = 264; } -@interface BookmarkHomeViewController () +@interface BookmarkHomeViewController ()<BookmarkPromoControllerDelegate> // Read / write declaration of read only properties. +@property(nonatomic, strong) BookmarkPromoController* bookmarkPromoController; @property(nonatomic, assign) bookmarks::BookmarkModel* bookmarks; @property(nonatomic, assign) ios::ChromeBrowserState* browserState; @property(nonatomic, strong) BookmarkCollectionView* folderView; @@ -40,6 +42,7 @@ @implementation BookmarkHomeViewController +@synthesize bookmarkPromoController = _bookmarkPromoController; @synthesize bookmarks = _bookmarks; @synthesize browserState = _browserState; @synthesize folderView = _folderView; @@ -66,6 +69,11 @@ _loader = loader; _bookmarks = ios::BookmarkModelFactory::GetForBrowserState(browserState); + // It is important to initialize the promo controller with the browser state + // passed in, as it could be incognito. + _bookmarkPromoController = + [[BookmarkPromoController alloc] initWithBrowserState:browserState + delegate:self]; } return self; } @@ -150,4 +158,11 @@ return kMenuWidth; } +#pragma mark - BookmarkPromoControllerDelegate + +- (void)promoStateChanged:(BOOL)promoEnabled { + [self.folderView + promoStateChangedAnimated:self.folderView == [self primaryView]]; +} + @end
diff --git a/ios/chrome/browser/ui/browser_view_controller.h b/ios/chrome/browser/ui/browser_view_controller.h index 97311df..def4a81 100644 --- a/ios/chrome/browser/ui/browser_view_controller.h +++ b/ios/chrome/browser/ui/browser_view_controller.h
@@ -16,6 +16,7 @@ #import "ios/chrome/browser/ui/url_loader.h" #import "ios/public/provider/chrome/browser/voice/voice_search_presenter.h" +@protocol ApplicationCommands; @protocol BrowserCommands; @class BrowserContainerView; @class BrowserViewControllerDependencyFactory; @@ -61,10 +62,11 @@ // webUsageSuspended property for this BVC will be based on |model|, and future // changes to |model|'s suspension state should be made through this BVC // instead of directly on the model. -- (instancetype)initWithTabModel:(TabModel*)model - browserState:(ios::ChromeBrowserState*)browserState - dependencyFactory: - (BrowserViewControllerDependencyFactory*)factory +- (instancetype) + initWithTabModel:(TabModel*)model + browserState:(ios::ChromeBrowserState*)browserState + dependencyFactory:(BrowserViewControllerDependencyFactory*)factory +applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint NS_DESIGNATED_INITIALIZER; - (instancetype)initWithNibName:(NSString*)nibNameOrNil @@ -72,7 +74,8 @@ - (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE; -@property(nonatomic, readonly) id<BrowserCommands> dispatcher; +@property(nonatomic, readonly) id<ApplicationCommands, BrowserCommands> + dispatcher; // The top-level browser container view. @property(nonatomic, strong) BrowserContainerView* contentArea;
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index 43a28b99..57fa19dc 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -95,6 +95,7 @@ #import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h" #import "ios/chrome/browser/ui/chrome_web_view_factory.h" #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" #include "ios/chrome/browser/ui/commands/ios_command_ids.h" @@ -938,10 +939,11 @@ #pragma mark - Object lifecycle -- (instancetype)initWithTabModel:(TabModel*)model - browserState:(ios::ChromeBrowserState*)browserState - dependencyFactory: - (BrowserViewControllerDependencyFactory*)factory { +- (instancetype) + initWithTabModel:(TabModel*)model + browserState:(ios::ChromeBrowserState*)browserState + dependencyFactory:(BrowserViewControllerDependencyFactory*)factory +applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { self = [super initWithNibName:nil bundle:base::mac::FrameworkBundle()]; if (self) { DCHECK(factory); @@ -959,6 +961,8 @@ forSelector:@selector(chromeExecuteCommand:)]; [_dispatcher startDispatchingToTarget:self forProtocol:@protocol(BrowserCommands)]; + [_dispatcher startDispatchingToTarget:applicationCommandEndpoint + forProtocol:@protocol(ApplicationCommands)]; _javaScriptDialogPresenter.reset( new JavaScriptDialogPresenterImpl(_dialogPresenter)); @@ -1000,8 +1004,8 @@ #pragma mark - Properties -- (id<BrowserCommands>)dispatcher { - return static_cast<id<BrowserCommands>>(_dispatcher); +- (id<ApplicationCommands, BrowserCommands>)dispatcher { + return static_cast<id<ApplicationCommands, BrowserCommands>>(_dispatcher); } - (void)setActive:(BOOL)active {
diff --git a/ios/chrome/browser/ui/browser_view_controller_dependency_factory.h b/ios/chrome/browser/ui/browser_view_controller_dependency_factory.h index 7b57a2d..4dd19e7 100644 --- a/ios/chrome/browser/ui/browser_view_controller_dependency_factory.h +++ b/ios/chrome/browser/ui/browser_view_controller_dependency_factory.h
@@ -10,6 +10,7 @@ #include "ios/chrome/browser/ui/tabs/tab_strip_controller.h" @class AlertCoordinator; +@protocol ApplicationCommands; @protocol BrowserCommands; @class KeyCommandsProvider; @class MessageBubbleView; @@ -67,7 +68,8 @@ newWebToolbarControllerWithDelegate:(id<WebToolbarDelegate>)delegate urlLoader:(id<UrlLoader>)urlLoader preloadProvider:(id<PreloadProvider>)preload - dispatcher:(id<BrowserCommands>)dispatcher; + dispatcher:(id<ApplicationCommands, BrowserCommands>) + dispatcher; // Returns a new keyboard commands coordinator to handle keyboard commands. - (KeyCommandsProvider*)newKeyCommandsProvider;
diff --git a/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm b/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm index 36a34f2..f843303 100644 --- a/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm +++ b/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm
@@ -82,7 +82,8 @@ newWebToolbarControllerWithDelegate:(id<WebToolbarDelegate>)delegate urlLoader:(id<UrlLoader>)urlLoader preloadProvider:(id<PreloadProvider>)preload - dispatcher:(id<BrowserCommands>)dispatcher { + dispatcher:(id<ApplicationCommands, BrowserCommands>) + dispatcher { return [[WebToolbarController alloc] initWithDelegate:delegate urlLoader:urlLoader browserState:browserState_
diff --git a/ios/chrome/browser/ui/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view_controller_unittest.mm index 917d8fd..32f1d717 100644 --- a/ios/chrome/browser/ui/browser_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/browser_view_controller_unittest.mm
@@ -249,9 +249,10 @@ tab_ = currentTab; dependencyFactory_ = factory; bvc_ = [[BrowserViewController alloc] - initWithTabModel:tabModel_ - browserState:chrome_browser_state_.get() - dependencyFactory:factory]; + initWithTabModel:tabModel_ + browserState:chrome_browser_state_.get() + dependencyFactory:factory + applicationCommandEndpoint:nil]; // Load TemplateURLService. TemplateURLService* template_url_service =
diff --git a/ios/chrome/browser/ui/commands/BUILD.gn b/ios/chrome/browser/ui/commands/BUILD.gn index 68681ef..bd70f35 100644 --- a/ios/chrome/browser/ui/commands/BUILD.gn +++ b/ios/chrome/browser/ui/commands/BUILD.gn
@@ -7,6 +7,7 @@ sources = [ "UIKit+ChromeExecuteCommand.h", "UIKit+ChromeExecuteCommand.mm", + "application_commands.h", "browser_commands.h", "clear_browsing_data_command.h", "clear_browsing_data_command.mm",
diff --git a/ios/chrome/browser/ui/commands/application_commands.h b/ios/chrome/browser/ui/commands/application_commands.h new file mode 100644 index 0000000..1740cda7 --- /dev/null +++ b/ios/chrome/browser/ui/commands/application_commands.h
@@ -0,0 +1,21 @@ +// 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 IOS_CHROME_BROWSER_UI_COMMANDS_APPLICATION_COMMANDS_H_ +#define IOS_CHROME_BROWSER_UI_COMMANDS_APPLICATION_COMMANDS_H_ + +#import <Foundation/Foundation.h> + +// Protocol for commands that will generally be handled by the application, +// rather than a specific tab; in practice this means the MainController +// instance. + +@protocol ApplicationCommands<NSObject> + +// Shows the Settings UI. +- (void)showSettings; + +@end + +#endif // IOS_CHROME_BROWSER_UI_COMMANDS_APPLICATION_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/commands/browser_commands.h b/ios/chrome/browser/ui/commands/browser_commands.h index 49df039e..96c689d 100644 --- a/ios/chrome/browser/ui/commands/browser_commands.h +++ b/ios/chrome/browser/ui/commands/browser_commands.h
@@ -5,9 +5,11 @@ #ifndef IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COMMANDS_H_ #define IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COMMANDS_H_ +#import <Foundation/Foundation.h> + // Protocol for commands that will generally be handled by the "current tab", // which in practice is the BrowserViewController instance displaying the tab. -@protocol BrowserCommands +@protocol BrowserCommands<NSObject> // Closes the current tab. - (void)closeCurrentTab;
diff --git a/ios/chrome/browser/ui/commands/ios_command_ids.h b/ios/chrome/browser/ui/commands/ios_command_ids.h index 6492497..b486b66 100644 --- a/ios/chrome/browser/ui/commands/ios_command_ids.h +++ b/ios/chrome/browser/ui/commands/ios_command_ids.h
@@ -22,7 +22,6 @@ #define IDC_FIND_PREVIOUS 37002 #define IDC_SHOW_HISTORY 40010 #define IDC_SHOW_BOOKMARK_MANAGER 40011 -#define IDC_OPTIONS 40015 #define IDC_HELP_PAGE_VIA_MENU 40020 #define IDC_TOGGLE_TAB_SWITCHER 40901 #define IDC_VOICE_SEARCH 40902
diff --git a/ios/chrome/browser/ui/key_commands_provider.h b/ios/chrome/browser/ui/key_commands_provider.h index 37bfd51..dabdaef6 100644 --- a/ios/chrome/browser/ui/key_commands_provider.h +++ b/ios/chrome/browser/ui/key_commands_provider.h
@@ -7,6 +7,7 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" @protocol KeyCommandsPlumbing<NSObject> @@ -54,7 +55,8 @@ @interface KeyCommandsProvider : NSObject - (NSArray*)keyCommandsForConsumer:(id<KeyCommandsPlumbing>)consumer - dispatcher:(id<BrowserCommands>)dispatcher + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher editingText:(BOOL)editingText; @end
diff --git a/ios/chrome/browser/ui/key_commands_provider.mm b/ios/chrome/browser/ui/key_commands_provider.mm index 1a387aa..023d3c7cb 100644 --- a/ios/chrome/browser/ui/key_commands_provider.mm +++ b/ios/chrome/browser/ui/key_commands_provider.mm
@@ -20,10 +20,11 @@ @implementation KeyCommandsProvider - (NSArray*)keyCommandsForConsumer:(id<KeyCommandsPlumbing>)consumer - dispatcher:(id<BrowserCommands>)dispatcher + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher editingText:(BOOL)editingText { __weak id<KeyCommandsPlumbing> weakConsumer = consumer; - __weak id<BrowserCommands> weakDispatcher = dispatcher; + __weak id<ApplicationCommands, BrowserCommands> weakDispatcher = dispatcher; // Block to execute a command from the |tag|. void (^execute)(NSInteger) = ^(NSInteger tag) { @@ -223,7 +224,7 @@ modifierFlags:UIKeyModifierCommand title:nil action:^{ - execute(IDC_OPTIONS); + [weakDispatcher showSettings]; }], ]];
diff --git a/ios/chrome/browser/ui/key_commands_provider_unittest.mm b/ios/chrome/browser/ui/key_commands_provider_unittest.mm index 6bfe4a0f..7d0d0a2 100644 --- a/ios/chrome/browser/ui/key_commands_provider_unittest.mm +++ b/ios/chrome/browser/ui/key_commands_provider_unittest.mm
@@ -22,7 +22,7 @@ KeyCommandsProvider* provider = [[KeyCommandsProvider alloc] init]; id mockConsumer = [OCMockObject mockForProtocol:@protocol(KeyCommandsPlumbing)]; - id<BrowserCommands> dispatcher = nil; + id<ApplicationCommands, BrowserCommands> dispatcher = nil; [[[mockConsumer expect] andReturnUnsignedInteger:0] tabsCount]; EXPECT_NE(nil, [provider keyCommandsForConsumer:mockConsumer @@ -34,7 +34,7 @@ KeyCommandsProvider* provider = [[KeyCommandsProvider alloc] init]; id mockConsumer = [OCMockObject mockForProtocol:@protocol(KeyCommandsPlumbing)]; - id<BrowserCommands> dispatcher = nil; + id<ApplicationCommands, BrowserCommands> dispatcher = nil; [[[mockConsumer expect] andReturnUnsignedInteger:0] tabsCount]; @@ -49,7 +49,7 @@ KeyCommandsProvider* provider = [[KeyCommandsProvider alloc] init]; id mockConsumer = [OCMockObject mockForProtocol:@protocol(KeyCommandsPlumbing)]; - id<BrowserCommands> dispatcher = nil; + id<ApplicationCommands, BrowserCommands> dispatcher = nil; // No tabs. [[[mockConsumer expect] andReturnUnsignedInteger:0] tabsCount]; @@ -72,7 +72,7 @@ KeyCommandsProvider* provider = [[KeyCommandsProvider alloc] init]; id mockConsumer = [OCMockObject mockForProtocol:@protocol(KeyCommandsPlumbing)]; - id<BrowserCommands> dispatcher = nil; + id<ApplicationCommands, BrowserCommands> dispatcher = nil; // Not editing text. [[[mockConsumer expect] andReturnUnsignedInteger:1] tabsCount];
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.h b/ios/chrome/browser/ui/main/browser_view_wrangler.h index 4766291..7a49264 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.h +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.h
@@ -9,6 +9,7 @@ #import "ios/chrome/browser/ui/main/browser_view_information.h" +@protocol ApplicationCommands; @class BrowsingDataRemovalController; @class DeviceSharingManager; @protocol TabModelObserver; @@ -31,8 +32,13 @@ // Initialize a new instance of this class using |browserState| as the primary // browser state for the tab models and BVCs, and setting |tabModelObserver|, if // not nil, as the tab model delegate for any tab models that are created. +// |applicationCommandEndpoint| is the object that methods in the +// ApplicationCommands protocol should be dispatched to by any BVCs that are +// created. - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState tabModelObserver:(id<TabModelObserver>)tabModelObserver + applicationCommandEndpoint: + (id<ApplicationCommands>)applicationCommandEndpoint NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm index bae8fb0..b6de33b 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
@@ -29,6 +29,7 @@ @interface BrowserViewWrangler ()<TabModelObserver> { ios::ChromeBrowserState* _browserState; __unsafe_unretained id<TabModelObserver> _tabModelObserver; + __weak id<ApplicationCommands> _applicationCommandEndpoint; BOOL _isShutdown; } @@ -67,10 +68,13 @@ @synthesize deviceSharingManager = _deviceSharingManager; - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState - tabModelObserver:(id<TabModelObserver>)tabModelObserver { + tabModelObserver:(id<TabModelObserver>)tabModelObserver + applicationCommandEndpoint: + (id<ApplicationCommands>)applicationCommandEndpoint { if ((self = [super init])) { _browserState = browserState; _tabModelObserver = tabModelObserver; + _applicationCommandEndpoint = applicationCommandEndpoint; } return self; } @@ -386,9 +390,11 @@ BrowserViewControllerDependencyFactory* factory = [[BrowserViewControllerDependencyFactory alloc] initWithBrowserState:browserState]; - return [[BrowserViewController alloc] initWithTabModel:tabModel - browserState:browserState - dependencyFactory:factory]; + return [[BrowserViewController alloc] + initWithTabModel:tabModel + browserState:browserState + dependencyFactory:factory + applicationCommandEndpoint:_applicationCommandEndpoint]; } @end
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler_unittest.mm b/ios/chrome/browser/ui/main/browser_view_wrangler_unittest.mm index cdc83472..08332fe5 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler_unittest.mm +++ b/ios/chrome/browser/ui/main/browser_view_wrangler_unittest.mm
@@ -31,8 +31,10 @@ TEST_F(BrowserViewWranglerTest, TestInitNilObserver) { BrowserViewWrangler* wrangler = [[BrowserViewWrangler alloc] - initWithBrowserState:chrome_browser_state_.get() - tabModelObserver:nil]; + initWithBrowserState:chrome_browser_state_.get() + + tabModelObserver:nil + applicationCommandEndpoint:(id<ApplicationCommands>)nil]; // Test that BVC and tab model are created on demand. BrowserViewController* bvc = [wrangler mainBVC];
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.h b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.h index 58533816..079c60d 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.h +++ b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.h
@@ -7,6 +7,7 @@ #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h" +@protocol ApplicationCommands; @protocol BrowserCommands; @protocol GoogleLandingDataSource; @protocol OmniboxFocuser; @@ -21,13 +22,18 @@ // Designated initializer. The underlying ToolbarController is initialized with // ToolbarControllerStyleLightMode. -- (instancetype)initWithDispatcher: - (id<BrowserCommands, OmniboxFocuser, UrlLoader, WebToolbarDelegate>) - dispatcher; +- (instancetype)initWithDispatcher:(id<ApplicationCommands, + BrowserCommands, + OmniboxFocuser, + UrlLoader, + WebToolbarDelegate>)dispatcher; -@property(nonatomic, readonly, weak) - id<BrowserCommands, OmniboxFocuser, UrlLoader, WebToolbarDelegate> - dispatcher; +@property(nonatomic, readonly, weak) id<ApplicationCommands, + BrowserCommands, + OmniboxFocuser, + UrlLoader, + WebToolbarDelegate> + dispatcher; // |YES| if the toolbar can show the forward arrow. - (void)setCanGoForward:(BOOL)canGoForward;
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm index 7d601fa..db7c33b5 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm
@@ -62,9 +62,11 @@ @synthesize canGoForward = _canGoForward; @synthesize canGoBack = _canGoBack; -- (instancetype)initWithDispatcher: - (id<BrowserCommands, OmniboxFocuser, UrlLoader, WebToolbarDelegate>) - dispatcher { +- (instancetype)initWithDispatcher:(id<ApplicationCommands, + BrowserCommands, + OmniboxFocuser, + UrlLoader, + WebToolbarDelegate>)dispatcher { self = [super initWithStyle:ToolbarControllerStyleLightMode dispatcher:dispatcher]; if (self) {
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.mm b/ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.mm index f6da302..8f0c006 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.mm
@@ -8,6 +8,8 @@ #include "base/ios/ios_util.h" #include "base/mac/scoped_cftyperef.h" +#include "base/metrics/user_metrics.h" +#include "base/metrics/user_metrics_action.h" #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #import "components/image_fetcher/ios/ios_image_data_fetcher_wrapper.h" @@ -646,6 +648,15 @@ NSUInteger row = [sender tag]; const AutocompleteMatch& match = ((const AutocompleteResult&)_currentResult).match_at(row); + + if (AutocompleteMatch::IsSearchType(match.type)) { + base::RecordAction( + base::UserMetricsAction("MobileOmniboxRefineSuggestion.Search")); + } else { + base::RecordAction( + base::UserMetricsAction("MobileOmniboxRefineSuggestion.Url")); + } + // Make a defensive copy of |match.contents|, as CopyToOmnibox() will trigger // a new round of autocomplete and modify |_currentResult|. base::string16 contents(match.contents);
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_controller.h b/ios/chrome/browser/ui/popup_menu/popup_menu_controller.h index 31ab294f..167f3a9b 100644 --- a/ios/chrome/browser/ui/popup_menu/popup_menu_controller.h +++ b/ios/chrome/browser/ui/popup_menu/popup_menu_controller.h
@@ -7,6 +7,7 @@ #import <UIKit/UIKit.h> +@protocol ApplicationCommands; @protocol BrowserCommands; @class PopupMenuController; @class PopupMenuView; @@ -34,7 +35,7 @@ // Delegate for the popup menu. @property(nonatomic, weak) id<PopupMenuDelegate> delegate; // Dispatcher for browser commands. -@property(nonatomic, weak) id<BrowserCommands> dispatcher; +@property(nonatomic, weak) id<ApplicationCommands, BrowserCommands> dispatcher; // Initializes the PopupMenuController and adds its views inside of parent. - (id)initWithParentView:(UIView*)parent;
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller.h b/ios/chrome/browser/ui/stack_view/stack_view_controller.h index 05979e3..7746e394 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller.h +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller.h
@@ -10,6 +10,7 @@ #import "ios/chrome/browser/ui/tab_switcher/tab_switcher.h" #include "ui/base/page_transition_types.h" +@protocol ApplicationCommands; class GURL; @class Tab; @class TabModel; @@ -33,11 +34,16 @@ // Initializes with the given tab models, which must not be nil. // |activeTabModel| is the model which starts active, and must be one of the // other two models. +// |applicationCommandEndpoint| is the object that methods in the +// ApplicationCommands protocol should be dispatched to by any BVCs that are +// created. // TODO(stuartmorgan): Replace the word 'active' in these methods and the // corresponding delegate methods. crbug.com/513782 - (instancetype)initWithMainTabModel:(TabModel*)mainModel otrTabModel:(TabModel*)otrModel - activeTabModel:(TabModel*)activeModel; + activeTabModel:(TabModel*)activeModel + applicationCommandEndpoint: + (id<ApplicationCommands>)applicationCommandEndpoint; // Restores internal state with the given tab models, which must not be nil. // |activeTabModel| is the model which starts active, and must be one of the
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller.mm b/ios/chrome/browser/ui/stack_view/stack_view_controller.mm index 842faec..4d57005 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller.mm +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller.mm
@@ -510,7 +510,9 @@ - (instancetype)initWithMainCardSet:(CardSet*)mainCardSet otrCardSet:(CardSet*)otrCardSet - activeCardSet:(CardSet*)activeCardSet { + activeCardSet:(CardSet*)activeCardSet + applicationCommandEndpoint: + (id<ApplicationCommands>)applicationCommandEndpoint { DCHECK(mainCardSet); DCHECK(otrCardSet); DCHECK(activeCardSet == otrCardSet || activeCardSet == mainCardSet); @@ -537,13 +539,17 @@ _dispatcher = [[CommandDispatcher alloc] init]; [_dispatcher startDispatchingToTarget:self forProtocol:@protocol(BrowserCommands)]; + [_dispatcher startDispatchingToTarget:applicationCommandEndpoint + forProtocol:@protocol(ApplicationCommands)]; } return self; } - (instancetype)initWithMainTabModel:(TabModel*)mainModel otrTabModel:(TabModel*)otrModel - activeTabModel:(TabModel*)activeModel { + activeTabModel:(TabModel*)activeModel + applicationCommandEndpoint: + (id<ApplicationCommands>)applicationCommandEndpoint { DCHECK(mainModel); DCHECK(otrModel); DCHECK(activeModel == otrModel || activeModel == mainModel); @@ -553,7 +559,8 @@ (activeModel == mainModel) ? mainCardSet : otrCardSet; return [self initWithMainCardSet:mainCardSet otrCardSet:otrCardSet - activeCardSet:activeCardSet]; + activeCardSet:activeCardSet + applicationCommandEndpoint:applicationCommandEndpoint]; } - (instancetype)initWithNibName:(NSString*)nibNameOrNil @@ -567,8 +574,8 @@ return nil; } -- (id<BrowserCommands>)dispatcher { - return static_cast<id<BrowserCommands>>(_dispatcher); +- (id<ApplicationCommands, BrowserCommands>)dispatcher { + return static_cast<id<ApplicationCommands, BrowserCommands>>(_dispatcher); } - (void)setUpWithMainCardSet:(CardSet*)mainCardSet @@ -734,7 +741,7 @@ [self.view addSubview:_backgroundView]; _toolbarController = - [[StackViewToolbarController alloc] initWithStackViewToolbar]; + [[StackViewToolbarController alloc] initWithDispatcher:self.dispatcher]; CGRect toolbarFrame = [self.view bounds]; toolbarFrame.origin.y = CGRectGetMinY([[_toolbarController view] frame]); toolbarFrame.size.height = CGRectGetHeight([[_toolbarController view] frame]);
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller_perftest.mm b/ios/chrome/browser/ui/stack_view/stack_view_controller_perftest.mm index 0b2723f4..a72aeb7b4 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller_perftest.mm +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller_perftest.mm
@@ -295,7 +295,8 @@ view_controller_ = [[StackViewController alloc] initWithMainTabModel:tab_model_ otrTabModel:otr_tab_model_ - activeTabModel:tab_model_]; + activeTabModel:tab_model_ + applicationCommandEndpoint:nil]; } else { [view_controller_ restoreInternalStateWithMainTabModel:tab_model_ otrTabModel:otr_tab_model_
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller_private.h b/ios/chrome/browser/ui/stack_view/stack_view_controller_private.h index fc01b99f..e27f142 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller_private.h +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller_private.h
@@ -28,6 +28,8 @@ - (instancetype)initWithMainCardSet:(CardSet*)mainCardSet otrCardSet:(CardSet*)otrCardSet activeCardSet:(CardSet*)activeCardSet + applicationCommandEndpoint: + (id<ApplicationCommands>)applicationCommandEndpoint NS_DESIGNATED_INITIALIZER; - (instancetype)initWithNibName:(NSString*)nibNameOrNil
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller_unittest.mm b/ios/chrome/browser/ui/stack_view/stack_view_controller_unittest.mm index f198eb6e..a602a6b1 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller_unittest.mm
@@ -116,9 +116,10 @@ otr_card_set_ = [[MockCardSet alloc] init]; view_controller_ = [[StackViewController alloc] - initWithMainCardSet:static_cast<CardSet*>(main_card_set_) - otrCardSet:static_cast<CardSet*>(otr_card_set_) - activeCardSet:static_cast<CardSet*>(main_card_set_)]; + initWithMainCardSet:static_cast<CardSet*>(main_card_set_) + otrCardSet:static_cast<CardSet*>(otr_card_set_) + activeCardSet:static_cast<CardSet*>(main_card_set_) + applicationCommandEndpoint:nil]; // Resize the view and call VC lifecycle events [view_controller_ view].frame = CGRectMake(0.0, 0.0, kViewportDimension, kViewportDimension);
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.h b/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.h index 7825383..0df0e01 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.h +++ b/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.h
@@ -9,6 +9,8 @@ #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h" +@protocol ApplicationCommands; +@protocol BrowserCommands; @class NewTabButton; // Toolbar controller for the card stack view, adding a new tab button. @@ -16,7 +18,8 @@ @property(nonatomic, readonly) NewTabButton* openNewTabButton; -- (instancetype)initWithStackViewToolbar; +- (instancetype)initWithDispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher; @end
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.mm b/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.mm index 357dd92..a2fbe78 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.mm +++ b/ios/chrome/browser/ui/stack_view/stack_view_toolbar_controller.mm
@@ -29,8 +29,10 @@ NewTabButton* _openNewTabButton; } -- (instancetype)initWithStackViewToolbar { - self = [super initWithStyle:ToolbarControllerStyleDarkMode dispatcher:nil]; +- (instancetype)initWithDispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher { + self = [super initWithStyle:ToolbarControllerStyleDarkMode + dispatcher:dispatcher]; if (self) { _stackViewToolbar = [[UIView alloc] initWithFrame:[self specificControlsArea]];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher.h b/ios/chrome/browser/ui/tab_switcher/tab_switcher.h index 954e537..84b7702 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher.h
@@ -7,6 +7,7 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" #include "ios/chrome/browser/ui/tab_switcher/tab_switcher_transition_context.h" #include "ui/base/page_transition_types.h" @@ -50,8 +51,9 @@ // switcher. @property(nonatomic, assign) id<TabSwitcherDelegate> delegate; -// The dispatcher for browser-ish commands. -@property(nonatomic, readonly) id<BrowserCommands> dispatcher; +// Dispatcher for anything that acts in a "browser" role. +@property(nonatomic, readonly) id<ApplicationCommands, BrowserCommands> + dispatcher; // Restores the internal state of the tab switcher with the given tab models, // which must not be nil. |activeTabModel| is the model which starts active,
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm index fbf31011..bfbaedb 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm
@@ -374,7 +374,7 @@ return _delegate; } -- (id<BrowserCommands>)dispatcher { +- (id<ApplicationCommands, BrowserCommands>)dispatcher { // TODO(crbug.com/738881) add a dispatcher instance to this class and // return it here when needed. return nil; @@ -468,8 +468,8 @@ - (UIImage*)updateScreenshotForCellIfNeeded:(TabSwitcherLocalSessionCell*)cell tabModel:(TabModel*)tabModel { - if (cell.screenshot) - return cell.screenshot; + if (cell.snapshot) + return cell.snapshot; UIColor* backgroundColor = [tabModel isOffTheRecord] ? [[MDCPalette greyPalette] tint700] : [UIColor whiteColor];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.h b/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.h index c290a783..c3b01b0 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.h
@@ -39,9 +39,12 @@ // Cell showing information about a local session. @interface TabSwitcherLocalSessionCell : TabSwitcherSessionCell +// Getter and setter for the snapshot image. +@property(nonatomic, weak) UIImage* snapshot; + // Returns the top bar of the cell. The top bar holds the favicon and the tab // title. -@property(unsafe_unretained, nonatomic, readonly) UIView* topBar; +@property(nonatomic, weak, readonly) UIView* topBar; // Sets the cell's appearance using information in |tab|. // The delegate needs to be set before calling this method. @@ -50,11 +53,6 @@ // Sets the cell's appearance depending on |type|. - (void)setSessionType:(TabSwitcherSessionType)type; -// Returns the current screenshot set on the cell. -- (UIImage*)screenshot; -// Sets the snapshot. -- (void)setSnapshot:(UIImage*)snapshot; - @end @interface TabSwitcherDistantSessionCell : TabSwitcherSessionCell
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.mm index b9ebf28..19d72dde9 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.mm
@@ -214,18 +214,21 @@ return self; } +#pragma mark - Public properties + +- (UIImage*)snapshot { + return _snapshot.image; +} + +- (void)setSnapshot:(UIImage*)snapshot { + _snapshot.image = snapshot; +} + - (UIView*)topBar { return _topBar; } -- (UIImage*)screenshot { - return [_snapshot image]; -} - -- (void)setSnapshot:(UIImage*)image { - DCHECK(!ImageHasAlphaChannel(image)); - [_snapshot setImage:image]; -} +#pragma mark - Public methods - (void)setAppearanceForTab:(Tab*)tab cellSize:(CGSize)cellSize { [_titleLabel setText:tab.title]; @@ -274,6 +277,8 @@ [_snapshot setBackgroundColor:snapshotBackgroundColor]; } +#pragma mark - + - (void)snapshotPressed { [self.delegate cellPressed:self]; }
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_controller.h b/ios/chrome/browser/ui/toolbar/toolbar_controller.h index d85fca6..63745eb 100644 --- a/ios/chrome/browser/ui/toolbar/toolbar_controller.h +++ b/ios/chrome/browser/ui/toolbar/toolbar_controller.h
@@ -18,6 +18,7 @@ #include "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/ui/util/relaxed_bounds_constraints_hittest.h" +@protocol ApplicationCommands; @protocol BrowserCommands; class ReadingListModel; @class ToolsMenuConfiguration; @@ -136,14 +137,16 @@ @property(nonatomic, readwrite, assign) ReadingListModel* readingListModel; // The command dispatcher this and any subordinate objects should use. -@property(nonatomic, readonly, weak) id<BrowserCommands> dispatcher; +@property(nonatomic, readonly, weak) id<ApplicationCommands, BrowserCommands> + dispatcher; // Designated initializer. // |style| determines how the toolbar draws itself. // |dispatcher| is is the dispatcher for calling methods handled in other // parts of the app. - (instancetype)initWithStyle:(ToolbarControllerStyle)style - dispatcher:(id<BrowserCommands>)dispatcher + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_controller.mm b/ios/chrome/browser/ui/toolbar/toolbar_controller.mm index fc8b8f67..0961f513 100644 --- a/ios/chrome/browser/ui/toolbar/toolbar_controller.mm +++ b/ios/chrome/browser/ui/toolbar/toolbar_controller.mm
@@ -261,7 +261,8 @@ } - (instancetype)initWithStyle:(ToolbarControllerStyle)style - dispatcher:(id<BrowserCommands>)dispatcher { + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher { self = [super init]; if (self) { style_ = style;
diff --git a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.h b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.h index 4ae4ce5..a4e3039 100644 --- a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.h +++ b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.h
@@ -13,6 +13,7 @@ #include "ios/public/provider/chrome/browser/voice/voice_search_controller_delegate.h" #include "ios/web/public/navigation_item_list.h" +@protocol ApplicationCommands; @protocol BrowserCommands; @protocol PreloadProvider; @class Tab; @@ -98,7 +99,8 @@ urlLoader:(id<UrlLoader>)urlLoader browserState:(ios::ChromeBrowserState*)browserState preloadProvider:(id<PreloadProvider>)preloader - dispatcher:(id<BrowserCommands>)dispatcher + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher NS_DESIGNATED_INITIALIZER; // Called when the browser state this object was initialized with is being
diff --git a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm index 3b4039b..df0c80ef 100644 --- a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm +++ b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm
@@ -371,7 +371,8 @@ urlLoader:(id<UrlLoader>)urlLoader browserState:(ios::ChromeBrowserState*)browserState preloadProvider:(id<PreloadProvider>)preloader - dispatcher:(id<BrowserCommands>)dispatcher { + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher { DCHECK(delegate); DCHECK(urlLoader); DCHECK(browserState);
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h b/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h index b261679..1b0f4e3 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h
@@ -47,6 +47,7 @@ TOOLS_BOOKMARK_EDIT = -4, TOOLS_SHARE_ITEM = -5, TOOLS_MENU_ITEM = -6, + TOOLS_SETTINGS_ITEM = -7, }; #endif // IOS_CHROME_BROWSER_UI_TOOLS_MENU_TOOLS_MENU_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_model.h b/ios/chrome/browser/ui/tools_menu/tools_menu_model.h index 4e88cd8..dbadf55 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_model.h +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_model.h
@@ -18,6 +18,7 @@ int title_id; NSString* accessibility_id; int command_id; + SEL selector; int toolbar_types; // |visibility| is applied if a menu item is included for a given // |toolbar_types|. A value of 0 means the menu item is always visible for
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm b/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm index b31fbfa..6ba82eb 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm
@@ -6,6 +6,7 @@ #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/experimental_flags.h" +#include "ios/chrome/browser/ui/commands/application_commands.h" #include "ios/chrome/browser/ui/commands/ios_command_ids.h" #import "ios/chrome/browser/ui/tools_menu/reading_list_menu_view_item.h" #include "ios/chrome/browser/ui/tools_menu/tools_menu_constants.h" @@ -25,53 +26,61 @@ const NSInteger kVisibleNotIncognitoOnly = 1 << 1; // Declare all the possible items. +// Formatting note: While these items are being refactored to use selectors +// and the dispatcher instead of ChromeExecuteCommand (see crbug.com/738881), +// the |command_id| and |selector| fields are grouped together, since one will +// be either 0 or nullptr. Once the refactor is complete, all of the +// |command_id| values will be 0, and that struct field will be removed. const MenuItemInfo itemInfoList[] = { // clang-format off { IDS_IOS_TOOLS_MENU_NEW_TAB, kToolsMenuNewTabId, - IDC_NEW_TAB, ToolbarTypeAll, + IDC_NEW_TAB, nullptr, ToolbarTypeAll, 0, nil }, { IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB, kToolsMenuNewIncognitoTabId, - IDC_NEW_INCOGNITO_TAB, ToolbarTypeAll, + IDC_NEW_INCOGNITO_TAB, nullptr, ToolbarTypeAll, 0, nil }, { IDS_IOS_TOOLS_MENU_CLOSE_ALL_TABS, kToolsMenuCloseAllTabsId, - IDC_CLOSE_ALL_TABS, ToolbarTypeSwitcheriPhone, + IDC_CLOSE_ALL_TABS, nullptr, ToolbarTypeSwitcheriPhone, kVisibleNotIncognitoOnly, nil }, { IDS_IOS_TOOLS_MENU_CLOSE_ALL_INCOGNITO_TABS, kToolsMenuCloseAllIncognitoTabsId, - IDC_CLOSE_ALL_INCOGNITO_TABS, ToolbarTypeSwitcheriPhone, + IDC_CLOSE_ALL_INCOGNITO_TABS, nullptr, ToolbarTypeSwitcheriPhone, kVisibleIncognitoOnly, nil }, { IDS_IOS_TOOLS_MENU_BOOKMARKS, kToolsMenuBookmarksId, - IDC_SHOW_BOOKMARK_MANAGER, ToolbarTypeWebAll, + IDC_SHOW_BOOKMARK_MANAGER, nullptr, ToolbarTypeWebAll, 0, nil }, { IDS_IOS_TOOLS_MENU_READING_LIST, kToolsMenuReadingListId, - IDC_SHOW_READING_LIST, ToolbarTypeWebAll, + IDC_SHOW_READING_LIST, nullptr, ToolbarTypeWebAll, 0, [ReadingListMenuViewItem class] }, { IDS_IOS_TOOLS_MENU_RECENT_TABS, kToolsMenuOtherDevicesId, - IDC_SHOW_OTHER_DEVICES, ToolbarTypeWebAll, + IDC_SHOW_OTHER_DEVICES, nullptr, ToolbarTypeWebAll, kVisibleNotIncognitoOnly, nil }, { IDS_HISTORY_SHOW_HISTORY, kToolsMenuHistoryId, - IDC_SHOW_HISTORY, ToolbarTypeWebAll, + IDC_SHOW_HISTORY, nullptr, ToolbarTypeWebAll, 0, nil }, { IDS_IOS_OPTIONS_REPORT_AN_ISSUE, kToolsMenuReportAnIssueId, - IDC_REPORT_AN_ISSUE, ToolbarTypeAll, + IDC_REPORT_AN_ISSUE, nullptr, ToolbarTypeAll, 0, nil }, { IDS_IOS_TOOLS_MENU_FIND_IN_PAGE, kToolsMenuFindInPageId, - IDC_FIND, ToolbarTypeWebAll, + IDC_FIND, nullptr, ToolbarTypeWebAll, 0, nil }, - { IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE, kToolsMenuRequestDesktopId, - IDC_REQUEST_DESKTOP_SITE, ToolbarTypeWebAll, + { IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE, + kToolsMenuRequestDesktopId, + IDC_REQUEST_DESKTOP_SITE, nullptr, ToolbarTypeWebAll, 0, nil }, - { IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE, kToolsMenuRequestMobileId, - IDC_REQUEST_MOBILE_SITE, ToolbarTypeWebAll, + { IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE, + kToolsMenuRequestMobileId, + IDC_REQUEST_MOBILE_SITE, nullptr, ToolbarTypeWebAll, 0, nil }, { IDS_IOS_TOOLS_MENU_READER_MODE, kToolsMenuReaderMode, - IDC_READER_MODE, ToolbarTypeWebAll, + IDC_READER_MODE, nullptr, ToolbarTypeWebAll, 0, nil }, { IDS_IOS_TOOLS_MENU_SETTINGS, kToolsMenuSettingsId, - IDC_OPTIONS, ToolbarTypeAll, + TOOLS_SETTINGS_ITEM, + @selector(showSettings), ToolbarTypeAll, 0, nil }, - { IDS_IOS_TOOLS_MENU_HELP_MOBILE, kToolsMenuHelpId, - IDC_HELP_PAGE_VIA_MENU, ToolbarTypeWebAll, + { IDS_IOS_TOOLS_MENU_HELP_MOBILE, kToolsMenuHelpId, + IDC_HELP_PAGE_VIA_MENU, nullptr, ToolbarTypeWebAll, 0, nil }, // clang-format on };
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.h b/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.h index f4d9918..8e7ff99 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.h +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.h
@@ -7,6 +7,7 @@ #import <UIKit/UIKit.h> +@protocol ApplicationCommands; @protocol BrowserCommands; @class ToolsMenuConfiguration; @@ -61,7 +62,7 @@ @property(nonatomic, weak) id<ToolsPopupTableDelegate> delegate; // Dispatcher for browser commands. -@property(nonatomic, weak) id<BrowserCommands> dispatcher; +@property(nonatomic, weak) id<ApplicationCommands, BrowserCommands> dispatcher; // Initializes the Tools popup menu. - (void)initializeMenuWithConfiguration:(ToolsMenuConfiguration*)configuration;
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.mm b/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.mm index 4899098d..4c15cf3 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.mm +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_view_controller.mm
@@ -248,11 +248,12 @@ Class itemClass = item.item_class ? item.item_class : [ToolsMenuViewItem class]; // Sanity check that the class is a useful one. - DCHECK([itemClass respondsToSelector:@selector(menuItemWithTitle: - accessibilityIdentifier: - command:)]); + DCHECK([itemClass + respondsToSelector:@selector + (menuItemWithTitle:accessibilityIdentifier:selector:command:)]); [menu addObject:[itemClass menuItemWithTitle:title accessibilityIdentifier:item.accessibility_id + selector:item.selector command:item.command_id]]; } @@ -298,6 +299,7 @@ - (ToolsMenuViewItem*)createViewSourceItem { return [ToolsMenuViewItem menuItemWithTitle:@"View Source" accessibilityIdentifier:@"View Source" + selector:nullptr command:IDC_VIEW_SOURCE]; } #endif // !defined(NDEBUG) @@ -565,7 +567,17 @@ ToolsMenuViewItem* menuItem = [_menuItems objectAtIndex:item]; DCHECK([menuItem tag]); [_delegate commandWasSelected:[menuItem tag]]; - [self chromeExecuteCommand:menuItem]; + if ([menuItem tag] > 0) { + [self chromeExecuteCommand:menuItem]; + } else { + DCHECK([menuItem selector]); + DCHECK([self.dispatcher respondsToSelector:[menuItem selector]]); +// TODO(crbug.com/738881): Find a better way to call these methods. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [self.dispatcher performSelector:[menuItem selector]]; +#pragma clang diagnostic pop + } }); }
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.h b/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.h index 8afe3e8..19cb2ad 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.h +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.h
@@ -13,6 +13,7 @@ @property(nonatomic, copy) NSString* accessibilityIdentifier; @property(nonatomic, copy) NSString* title; @property(nonatomic, assign) NSInteger tag; +@property(nonatomic, assign) SEL selector; @property(nonatomic, assign) BOOL active; @property(nonatomic, weak) ToolsMenuViewCell* tableViewCell; @@ -21,6 +22,7 @@ + (instancetype)menuItemWithTitle:(NSString*)title accessibilityIdentifier:(NSString*)accessibilityIdentifier + selector:(SEL)selector command:(int)commandID; @end
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.mm b/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.mm index dc01e5ba..250357bf 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.mm +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_view_item.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/browser/ui/tools_menu/tools_menu_view_item.h" #include "base/i18n/rtl.h" +#include "base/logging.h" #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" #include "ui/base/l10n/l10n_util.h" @@ -24,6 +25,7 @@ @synthesize active = _active; @synthesize title = _title; @synthesize tag = _tag; +@synthesize selector = _selector; @synthesize tableViewCell = _tableViewCell; - (id)init { @@ -45,11 +47,16 @@ + (instancetype)menuItemWithTitle:(NSString*)title accessibilityIdentifier:(NSString*)accessibilityIdentifier + selector:(SEL)selector command:(int)commandID { + // Only commandIDs < 0 should have associated selectors. + DCHECK((commandID >= 0 && selector == nullptr) || + (commandID < 0 && selector != nullptr)); ToolsMenuViewItem* menuItem = [[self alloc] init]; [menuItem setAccessibilityLabel:title]; [menuItem setAccessibilityIdentifier:accessibilityIdentifier]; [menuItem setTag:commandID]; + [menuItem setSelector:selector]; [menuItem setTitle:title]; return menuItem;
diff --git a/ios/chrome/browser/ui/tools_menu/tools_popup_controller.h b/ios/chrome/browser/ui/tools_menu/tools_popup_controller.h index 4bc35c7..84fc9db1 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_popup_controller.h +++ b/ios/chrome/browser/ui/tools_menu/tools_popup_controller.h
@@ -12,6 +12,7 @@ // The a11y ID of the tools menu table view (used by integration tests). extern NSString* const kToolsMenuTableViewId; +@protocol ApplicationCommands; @protocol BrowserCommands; @class ToolsMenuConfiguration; @@ -25,7 +26,8 @@ // Initializes the popup with the given |configuration|, a set of information // used to determine the appearance of the menu and the entries displayed. - (instancetype)initWithConfiguration:(ToolsMenuConfiguration*)configuration - dispatcher:(id<BrowserCommands>)dispatcher; + dispatcher:(id<ApplicationCommands, BrowserCommands>) + dispatcher; // Called when the current tab loading state changes. - (void)setIsTabLoading:(BOOL)isTabLoading;
diff --git a/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm b/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm index cfb14a9..b77bb75 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm +++ b/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm
@@ -48,7 +48,8 @@ @synthesize isCurrentPageBookmarked = _isCurrentPageBookmarked; - (instancetype)initWithConfiguration:(ToolsMenuConfiguration*)configuration - dispatcher:(id<BrowserCommands>)dispatcher { + dispatcher:(id<ApplicationCommands, BrowserCommands>) + dispatcher { DCHECK(configuration.displayView); self = [super initWithParentView:configuration.displayView]; if (self) { @@ -187,7 +188,7 @@ case IDC_NEW_TAB: base::RecordAction(UserMetricsAction("MobileMenuNewTab")); break; - case IDC_OPTIONS: + case TOOLS_SETTINGS_ITEM: base::RecordAction(UserMetricsAction("MobileMenuSettings")); break; case TOOLS_RELOAD_ITEM:
diff --git a/ios/chrome/browser/ui/webui/crashes_ui.cc b/ios/chrome/browser/ui/webui/crashes_ui.cc index 37ae935c..0586d13 100644 --- a/ios/chrome/browser/ui/webui/crashes_ui.cc +++ b/ios/chrome/browser/ui/webui/crashes_ui.cc
@@ -55,8 +55,7 @@ //////////////////////////////////////////////////////////////////////////////// // The handler for Javascript messages for the chrome://crashes/ page. -class CrashesDOMHandler : public web::WebUIIOSMessageHandler, - public CrashUploadList::Delegate { +class CrashesDOMHandler : public web::WebUIIOSMessageHandler { public: CrashesDOMHandler(); ~CrashesDOMHandler() override; @@ -64,17 +63,18 @@ // WebUIMessageHandler implementation. void RegisterMessages() override; - // CrashUploadList::Delegate implemenation. - void OnUploadListAvailable() override; private: + // Crash UploadList callback. + void OnUploadListAvailable(); + // Asynchronously fetches the list of crashes. Called from JS. void HandleRequestCrashes(const base::ListValue* args); // Sends the recent crashes list JS. void UpdateUI(); - scoped_refptr<CrashUploadList> upload_list_; + scoped_refptr<UploadList> upload_list_; bool list_available_; bool first_load_; @@ -83,15 +83,16 @@ CrashesDOMHandler::CrashesDOMHandler() : list_available_(false), first_load_(true) { - upload_list_ = ios::CreateCrashUploadList(this); + upload_list_ = ios::CreateCrashUploadList(); } CrashesDOMHandler::~CrashesDOMHandler() { - upload_list_->ClearDelegate(); + upload_list_->CancelCallback(); } void CrashesDOMHandler::RegisterMessages() { - upload_list_->LoadUploadListAsynchronously(); + upload_list_->Load(base::BindOnce(&CrashesDOMHandler::OnUploadListAvailable, + base::Unretained(this))); web_ui()->RegisterMessageCallback( crash::kCrashesUIRequestCrashList, base::Bind(&CrashesDOMHandler::HandleRequestCrashes, @@ -105,7 +106,8 @@ UpdateUI(); } else { list_available_ = false; - upload_list_->LoadUploadListAsynchronously(); + upload_list_->Load(base::Bind(&CrashesDOMHandler::OnUploadListAvailable, + base::Unretained(this))); } }
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn index 57f2156..f5f171e 100644 --- a/ios/chrome/test/earl_grey/BUILD.gn +++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -27,6 +27,7 @@ "//ios/chrome/browser/device_sharing:eg_tests", "//ios/chrome/browser/metrics:eg_tests", "//ios/chrome/browser/net:eg_tests", + "//ios/chrome/browser/ntp_tiles:eg_tests", ] }
diff --git a/ios/clean/chrome/browser/ui/tab_collection/tab_collection_tab_cell_unittest.mm b/ios/clean/chrome/browser/ui/tab_collection/tab_collection_tab_cell_unittest.mm index 23605ab..7575de5 100644 --- a/ios/clean/chrome/browser/ui/tab_collection/tab_collection_tab_cell_unittest.mm +++ b/ios/clean/chrome/browser/ui/tab_collection/tab_collection_tab_cell_unittest.mm
@@ -23,12 +23,10 @@ @interface TestTabCell : TabCollectionTabCell @property(nonatomic) UILabel* titleLabel; -@property(nonatomic) TabSwitcherButton* snapshotButton; @end @implementation TestTabCell @dynamic titleLabel; -@dynamic snapshotButton; @end class TabCollectionTabCellTest : public PlatformTest { @@ -69,7 +67,7 @@ callback(nil); }); [cell_ configureCell:item_ snapshotCache:snapshotCache_]; - EXPECT_EQ(nil, [cell_.snapshotButton imageForState:UIControlStateNormal]); + EXPECT_EQ(nil, cell_.snapshot); } // Tests that -configureCell: updates the cell's snapshot from the cache. @@ -82,9 +80,8 @@ callback(snapshot_); }); [cell_ configureCell:item_ snapshotCache:snapshotCache_]; - UIImage* cellImage = - [cell_.snapshotButton imageForState:UIControlStateNormal]; - EXPECT_TRUE(ui::test::uiimage_utils::UIImagesAreEqual(snapshot_, cellImage)); + EXPECT_TRUE( + ui::test::uiimage_utils::UIImagesAreEqual(snapshot_, cell_.snapshot)); } // Tests that asynchronous snapshot retrieval does not set the image after @@ -100,5 +97,5 @@ callback(snapshot_); }); [cell_ configureCell:item_ snapshotCache:snapshotCache_]; - EXPECT_EQ(nil, [cell_.snapshotButton imageForState:UIControlStateNormal]); + EXPECT_EQ(nil, cell_.snapshot); }
diff --git a/media/base/cdm_promise.h b/media/base/cdm_promise.h index d48a114..26247c4 100644 --- a/media/base/cdm_promise.h +++ b/media/base/cdm_promise.h
@@ -50,7 +50,7 @@ VOID_TYPE, INT_TYPE, STRING_TYPE, - KEY_IDS_VECTOR_TYPE + KEY_STATUS_TYPE }; CdmPromise(); @@ -92,10 +92,16 @@ static const CdmPromise::ResolveParameterType kType = CdmPromise::STRING_TYPE; }; +template <> +struct CdmPromiseTraits<CdmKeyInformation::KeyStatus> { + static const CdmPromise::ResolveParameterType kType = + CdmPromise::KEY_STATUS_TYPE; +}; + // This class adds the resolve(T) method. This class is still an interface, and // is used as the type of promise that gets passed around. template <typename... T> -class MEDIA_EXPORT CdmPromiseTemplate : public CdmPromise { +class CdmPromiseTemplate : public CdmPromise { public: CdmPromiseTemplate() : is_settled_(false) {}
diff --git a/media/base/content_decryption_module.cc b/media/base/content_decryption_module.cc index a3c21d6e..782c34e 100644 --- a/media/base/content_decryption_module.cc +++ b/media/base/content_decryption_module.cc
@@ -4,12 +4,22 @@ #include "media/base/content_decryption_module.h" +#include "media/base/cdm_promise.h" + namespace media { ContentDecryptionModule::ContentDecryptionModule() {} ContentDecryptionModule::~ContentDecryptionModule() {} +// By default a CDM does not support this method. +void ContentDecryptionModule::GetStatusForPolicy( + HdcpVersion min_hdcp_version, + std::unique_ptr<KeyStatusCdmPromise> promise) { + promise->reject(CdmPromise::NOT_SUPPORTED_ERROR, 0, + "GetStatusForPolicy() is not supported."); +} + CdmContext* ContentDecryptionModule::GetCdmContext() { return nullptr; }
diff --git a/media/base/content_decryption_module.h b/media/base/content_decryption_module.h index f40cc1b..52ca83c 100644 --- a/media/base/content_decryption_module.h +++ b/media/base/content_decryption_module.h
@@ -14,6 +14,7 @@ #include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "media/base/cdm_key_information.h" #include "media/base/eme_constants.h" #include "media/base/media_export.h" #include "url/gurl.h" @@ -25,7 +26,6 @@ namespace media { class CdmContext; -struct CdmKeyInformation; struct ContentDecryptionModuleTraits; template <typename... T> @@ -33,6 +33,8 @@ typedef CdmPromiseTemplate<std::string> NewSessionCdmPromise; typedef CdmPromiseTemplate<> SimpleCdmPromise; +typedef CdmPromiseTemplate<CdmKeyInformation::KeyStatus> KeyStatusCdmPromise; + typedef std::vector<std::unique_ptr<CdmKeyInformation>> CdmKeysInfo; // Type of license required when creating/loading a session. @@ -55,6 +57,18 @@ MESSAGE_TYPE_MAX = LICENSE_RELEASE }; +enum class HdcpVersion { + kHdcpVersionNone, + kHdcpVersion1_0, + kHdcpVersion1_1, + kHdcpVersion1_2, + kHdcpVersion1_3, + kHdcpVersion1_4, + kHdcpVersion2_0, + kHdcpVersion2_1, + kHdcpVersion2_2 +}; + // An interface that represents the Content Decryption Module (CDM) in the // Encrypted Media Extensions (EME) spec in Chromium. // See http://w3c.github.io/encrypted-media/#cdm @@ -88,6 +102,13 @@ const std::vector<uint8_t>& certificate, std::unique_ptr<SimpleCdmPromise> promise) = 0; + // Gets the key status if there's a hypothetical key that requires the + // |min_hdcp_version|. Resolve the |promise| with the key status after the + // operation completes. Reject the |promise| if this operation is not + // supported or unexpected error happened. + virtual void GetStatusForPolicy(HdcpVersion min_hdcp_version, + std::unique_ptr<KeyStatusCdmPromise> promise); + // Creates a session with |session_type|. Then generates a request with the // |init_data_type| and |init_data|. // Note:
diff --git a/media/blink/cdm_result_promise.h b/media/blink/cdm_result_promise.h index 017585a..c3b3002 100644 --- a/media/blink/cdm_result_promise.h +++ b/media/blink/cdm_result_promise.h
@@ -69,6 +69,14 @@ web_cdm_result_.Complete(); } +template <> +inline void CdmResultPromise<CdmKeyInformation::KeyStatus>::resolve( + const CdmKeyInformation::KeyStatus& key_status) { + MarkPromiseSettled(); + ReportCdmResultUMA(uma_name_, SUCCESS); + web_cdm_result_.CompleteWithKeyStatus(ConvertCdmKeyStatus(key_status)); +} + template <typename... T> void CdmResultPromise<T...>::reject(CdmPromise::Exception exception_code, uint32_t system_code,
diff --git a/media/blink/cdm_result_promise_helper.cc b/media/blink/cdm_result_promise_helper.cc index 16ede5d9d..e45d29f 100644 --- a/media/blink/cdm_result_promise_helper.cc +++ b/media/blink/cdm_result_promise_helper.cc
@@ -58,6 +58,30 @@ return blink::kWebContentDecryptionModuleExceptionUnknownError; } +blink::WebEncryptedMediaKeyInformation::KeyStatus ConvertCdmKeyStatus( + media::CdmKeyInformation::KeyStatus key_status) { + switch (key_status) { + case media::CdmKeyInformation::USABLE: + return blink::WebEncryptedMediaKeyInformation::KeyStatus::kUsable; + case media::CdmKeyInformation::INTERNAL_ERROR: + return blink::WebEncryptedMediaKeyInformation::KeyStatus::kInternalError; + case media::CdmKeyInformation::EXPIRED: + return blink::WebEncryptedMediaKeyInformation::KeyStatus::kExpired; + case media::CdmKeyInformation::OUTPUT_RESTRICTED: + return blink::WebEncryptedMediaKeyInformation::KeyStatus:: + kOutputRestricted; + case media::CdmKeyInformation::OUTPUT_DOWNSCALED: + return blink::WebEncryptedMediaKeyInformation::KeyStatus:: + kOutputDownscaled; + case media::CdmKeyInformation::KEY_STATUS_PENDING: + return blink::WebEncryptedMediaKeyInformation::KeyStatus::kStatusPending; + case media::CdmKeyInformation::RELEASED: + return blink::WebEncryptedMediaKeyInformation::KeyStatus::kReleased; + } + NOTREACHED(); + return blink::WebEncryptedMediaKeyInformation::KeyStatus::kInternalError; +} + void ReportCdmResultUMA(const std::string& uma_name, CdmResultForUMA result) { if (uma_name.empty()) return;
diff --git a/media/blink/cdm_result_promise_helper.h b/media/blink/cdm_result_promise_helper.h index badeb5d6..617a9547 100644 --- a/media/blink/cdm_result_promise_helper.h +++ b/media/blink/cdm_result_promise_helper.h
@@ -8,6 +8,7 @@ #include <string> #include "base/time/time.h" +#include "media/base/cdm_key_information.h" #include "media/base/cdm_promise.h" #include "media/blink/media_blink_export.h" #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h" @@ -36,6 +37,9 @@ MEDIA_BLINK_EXPORT blink::WebContentDecryptionModuleException ConvertCdmException(CdmPromise::Exception exception_code); +MEDIA_BLINK_EXPORT blink::WebEncryptedMediaKeyInformation::KeyStatus +ConvertCdmKeyStatus(media::CdmKeyInformation::KeyStatus key_status); + MEDIA_BLINK_EXPORT void ReportCdmResultUMA(const std::string& uma_name, CdmResultForUMA result);
diff --git a/media/blink/cdm_session_adapter.cc b/media/blink/cdm_session_adapter.cc index 147ab34..66483948 100644 --- a/media/blink/cdm_session_adapter.cc +++ b/media/blink/cdm_session_adapter.cc
@@ -69,6 +69,12 @@ cdm_->SetServerCertificate(certificate, std::move(promise)); } +void CdmSessionAdapter::GetStatusForPolicy( + HdcpVersion min_hdcp_version, + std::unique_ptr<KeyStatusCdmPromise> promise) { + cdm_->GetStatusForPolicy(min_hdcp_version, std::move(promise)); +} + WebContentDecryptionModuleSessionImpl* CdmSessionAdapter::CreateSession() { return new WebContentDecryptionModuleSessionImpl(this); }
diff --git a/media/blink/cdm_session_adapter.h b/media/blink/cdm_session_adapter.h index f870ce0..4fdecc9b 100644 --- a/media/blink/cdm_session_adapter.h +++ b/media/blink/cdm_session_adapter.h
@@ -49,6 +49,11 @@ void SetServerCertificate(const std::vector<uint8_t>& certificate, std::unique_ptr<SimpleCdmPromise> promise); + // Gets the key status for a hypothetical key with |min_hdcp_version| + // requirement. + void GetStatusForPolicy(HdcpVersion min_hdcp_version, + std::unique_ptr<KeyStatusCdmPromise> promise); + // Creates a new session and adds it to the internal map. The caller owns the // created session. RemoveSession() must be called when destroying it, if // RegisterSession() was called.
diff --git a/media/blink/webcontentdecryptionmodule_impl.cc b/media/blink/webcontentdecryptionmodule_impl.cc index d5b872b..8a0aa48 100644 --- a/media/blink/webcontentdecryptionmodule_impl.cc +++ b/media/blink/webcontentdecryptionmodule_impl.cc
@@ -25,6 +25,43 @@ namespace media { +namespace { + +bool ConvertHdcpVersion(const blink::WebString& hdcp_version_string, + HdcpVersion* hdcp_version) { + if (!hdcp_version_string.ContainsOnlyASCII()) + return false; + + std::string hdcp_version_ascii = hdcp_version_string.Ascii(); + + // TODO(xhwang): This implementation assumes exact string match. Update this + // when we have the string format speced in the spec/registry. + if (hdcp_version_ascii.empty()) + *hdcp_version = HdcpVersion::kHdcpVersionNone; + else if (hdcp_version_ascii == "hdcp-1.0") + *hdcp_version = HdcpVersion::kHdcpVersion1_0; + else if (hdcp_version_ascii == "hdcp-1.1") + *hdcp_version = HdcpVersion::kHdcpVersion1_1; + else if (hdcp_version_ascii == "hdcp-1.2") + *hdcp_version = HdcpVersion::kHdcpVersion1_2; + else if (hdcp_version_ascii == "hdcp-1.3") + *hdcp_version = HdcpVersion::kHdcpVersion1_3; + else if (hdcp_version_ascii == "hdcp-1.4") + *hdcp_version = HdcpVersion::kHdcpVersion1_4; + else if (hdcp_version_ascii == "hdcp-2.0") + *hdcp_version = HdcpVersion::kHdcpVersion2_0; + else if (hdcp_version_ascii == "hdcp-2.1") + *hdcp_version = HdcpVersion::kHdcpVersion2_1; + else if (hdcp_version_ascii == "hdcp-2.2") + *hdcp_version = HdcpVersion::kHdcpVersion2_2; + else + return false; + + return true; +} + +} // namespace + void WebContentDecryptionModuleImpl::Create( media::CdmFactory* cdm_factory, const base::string16& key_system, @@ -102,12 +139,21 @@ } void WebContentDecryptionModuleImpl::GetStatusForPolicy( - const blink::WebString& /* min_hdcp_version */, + const blink::WebString& min_hdcp_version_string, blink::WebContentDecryptionModuleResult result) { - NOTIMPLEMENTED(); - result.CompleteWithError( - blink::kWebContentDecryptionModuleExceptionNotSupportedError, 0, - "Not Implemented"); + HdcpVersion min_hdcp_version; + if (!ConvertHdcpVersion(min_hdcp_version_string, &min_hdcp_version)) { + result.CompleteWithError( + blink::kWebContentDecryptionModuleExceptionTypeError, 0, + "Invalid HDCP version"); + return; + } + + // TODO(xhwang): Enable UMA reporting for GetStatusForPolicy(). + adapter_->GetStatusForPolicy( + min_hdcp_version, std::unique_ptr<KeyStatusCdmPromise>( + new CdmResultPromise<CdmKeyInformation::KeyStatus>( + result, std::string()))); } scoped_refptr<ContentDecryptionModule>
diff --git a/media/blink/webcontentdecryptionmodule_impl.h b/media/blink/webcontentdecryptionmodule_impl.h index 8152d95..28c62ea9 100644 --- a/media/blink/webcontentdecryptionmodule_impl.h +++ b/media/blink/webcontentdecryptionmodule_impl.h
@@ -49,7 +49,7 @@ blink::WebContentDecryptionModuleResult result) override; void GetStatusForPolicy( - const blink::WebString& min_hdcp_version, + const blink::WebString& min_hdcp_version_string, blink::WebContentDecryptionModuleResult result) override; // Returns a reference to the CDM used by |adapter_|.
diff --git a/media/blink/webcontentdecryptionmodulesession_impl.cc b/media/blink/webcontentdecryptionmodulesession_impl.cc index 6b5302a..2e85f54b 100644 --- a/media/blink/webcontentdecryptionmodulesession_impl.cc +++ b/media/blink/webcontentdecryptionmodulesession_impl.cc
@@ -19,6 +19,7 @@ #include "media/base/key_systems.h" #include "media/base/limits.h" #include "media/blink/cdm_result_promise.h" +#include "media/blink/cdm_result_promise_helper.h" #include "media/blink/cdm_session_adapter.h" #include "media/blink/webmediaplayer_util.h" #include "media/cdm/json_web_key.h" @@ -63,31 +64,6 @@ kLicenseRequest; } -blink::WebEncryptedMediaKeyInformation::KeyStatus convertStatus( - media::CdmKeyInformation::KeyStatus status) { - switch (status) { - case media::CdmKeyInformation::USABLE: - return blink::WebEncryptedMediaKeyInformation::KeyStatus::kUsable; - case media::CdmKeyInformation::INTERNAL_ERROR: - return blink::WebEncryptedMediaKeyInformation::KeyStatus::kInternalError; - case media::CdmKeyInformation::EXPIRED: - return blink::WebEncryptedMediaKeyInformation::KeyStatus::kExpired; - case media::CdmKeyInformation::OUTPUT_RESTRICTED: - return blink::WebEncryptedMediaKeyInformation::KeyStatus:: - kOutputRestricted; - case media::CdmKeyInformation::OUTPUT_DOWNSCALED: - return blink::WebEncryptedMediaKeyInformation::KeyStatus:: - kOutputDownscaled; - case media::CdmKeyInformation::KEY_STATUS_PENDING: - return blink::WebEncryptedMediaKeyInformation::KeyStatus::kStatusPending; - case media::CdmKeyInformation::RELEASED: - return blink::WebEncryptedMediaKeyInformation::KeyStatus::kReleased; - } - - NOTREACHED(); - return blink::WebEncryptedMediaKeyInformation::KeyStatus::kInternalError; -} - CdmSessionType convertSessionType( blink::WebEncryptedMediaSessionType session_type) { switch (session_type) { @@ -501,7 +477,7 @@ auto& key_info = keys_info[i]; keys[i].SetId(blink::WebData(reinterpret_cast<char*>(&key_info->key_id[0]), key_info->key_id.size())); - keys[i].SetStatus(convertStatus(key_info->status)); + keys[i].SetStatus(ConvertCdmKeyStatus(key_info->status)); keys[i].SetSystemCode(key_info->system_code); // Sparse histogram macro does not cache the histogram, so it's safe to use
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index cdc7be4..b4ac739 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -351,8 +351,8 @@ // Only URL or MSE blob URL is supported. DCHECK(source.IsURL()); blink::WebURL url = source.GetAsURL(); - DVLOG(1) << __func__ << "(" << load_type << ", " << url << ", " << cors_mode - << ")"; + DVLOG(1) << __func__ << "(" << load_type << ", " << GURL(url) << ", " + << cors_mode << ")"; if (!defer_load_cb_.is_null()) { defer_load_cb_.Run(base::Bind(&WebMediaPlayerImpl::DoLoad, AsWeakPtr(), load_type, url, cors_mode));
diff --git a/media/filters/vp9_parser_fuzzertest.cc b/media/filters/vp9_parser_fuzzertest.cc index 468a151..77817b6 100644 --- a/media/filters/vp9_parser_fuzzertest.cc +++ b/media/filters/vp9_parser_fuzzertest.cc
@@ -21,6 +21,9 @@ // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + std::string str = std::string(reinterpret_cast<const char*>(data), size); + std::size_t data_hash = std::hash<std::string>()(str); + const uint8_t* ivf_payload = nullptr; media::IvfParser ivf_parser; media::IvfFileHeader ivf_file_header; @@ -29,12 +32,12 @@ if (!ivf_parser.Initialize(data, size, &ivf_file_header)) return 0; + media::Vp9Parser vp9_parser(data_hash % 2 == 1); // Parse until the end of stream/unsupported stream/error in stream is found. while (ivf_parser.ParseNextFrame(&ivf_frame_header, &ivf_payload)) { - // TODO(kcwu): fuzzing with parsing_compressed_header=true. - media::Vp9Parser vp9_parser(false); media::Vp9FrameHeader vp9_frame_header; vp9_parser.SetStream(ivf_payload, ivf_frame_header.frame_size); + // TODO(kcwu): further fuzzing the case of Vp9Parser::kAwaitingRefresh. while (vp9_parser.ParseNextFrame(&vp9_frame_header) == media::Vp9Parser::kOk) { // Repeat until all frames processed.
diff --git a/mojo/edk/system/message_pipe_dispatcher.cc b/mojo/edk/system/message_pipe_dispatcher.cc index 6a4706c0..3b09c71 100644 --- a/mojo/edk/system/message_pipe_dispatcher.cc +++ b/mojo/edk/system/message_pipe_dispatcher.cc
@@ -274,11 +274,14 @@ const SerializedState* state = static_cast<const SerializedState*>(data); + ports::Node* node = internal::g_core->GetNodeController()->node(); ports::PortRef port; - if (internal::g_core->GetNodeController()->node()->GetPort(ports[0], &port) != - ports::OK) { + if (node->GetPort(ports[0], &port) != ports::OK) return nullptr; - } + + ports::PortStatus status; + if (node->GetStatus(port, &status) != ports::OK) + return nullptr; return new MessagePipeDispatcher(internal::g_core->GetNodeController(), port, state->pipe_id, state->endpoint);
diff --git a/mojo/edk/system/ports/message_queue.cc b/mojo/edk/system/ports/message_queue.cc index f99f738..8596362 100644 --- a/mojo/edk/system/ports/message_queue.cc +++ b/mojo/edk/system/ports/message_queue.cc
@@ -69,13 +69,6 @@ } } -void MessageQueue::GetReferencedPorts(std::vector<PortName>* port_names) { - for (const auto& message : heap_) { - for (size_t i = 0; i < message->num_ports(); ++i) - port_names->push_back(message->ports()[i]); - } -} - void MessageQueue::TakeAllMessages( std::vector<std::unique_ptr<UserMessageEvent>>* messages) { *messages = std::move(heap_);
diff --git a/mojo/edk/system/ports/message_queue.h b/mojo/edk/system/ports/message_queue.h index 4142999..724f0bb 100644 --- a/mojo/edk/system/ports/message_queue.h +++ b/mojo/edk/system/ports/message_queue.h
@@ -56,9 +56,6 @@ void AcceptMessage(std::unique_ptr<UserMessageEvent> message, bool* has_next_message); - // Returns all of the ports referenced by messages in this message queue. - void GetReferencedPorts(std::vector<PortName>* ports); - // Takes all messages from this queue. Used to safely destroy queued messages // without holding any Port lock. void TakeAllMessages(
diff --git a/mojo/edk/system/ports/node.cc b/mojo/edk/system/ports/node.cc index 3a051eb..8554533 100644 --- a/mojo/edk/system/ports/node.cc +++ b/mojo/edk/system/ports/node.cc
@@ -205,7 +205,7 @@ } int Node::ClosePort(const PortRef& port_ref) { - std::vector<PortName> referenced_port_names; + std::vector<std::unique_ptr<UserMessageEvent>> undelivered_messages; NodeName peer_node_name; PortName peer_port_name; uint64_t last_sequence_num = 0; @@ -231,7 +231,7 @@ // If the port being closed still has unread messages, then we need to // take care to close those ports so as to avoid leaking memory. - port->message_queue.GetReferencedPorts(&referenced_port_names); + port->message_queue.TakeAllMessages(&undelivered_messages); break; default: @@ -247,10 +247,12 @@ delegate_->ForwardEvent(peer_node_name, base::MakeUnique<ObserveClosureEvent>( peer_port_name, last_sequence_num)); - for (const auto& name : referenced_port_names) { - PortRef ref; - if (GetPort(name, &ref) == OK) - ClosePort(ref); + for (const auto& message : undelivered_messages) { + for (size_t i = 0; i < message->num_ports(); ++i) { + PortRef ref; + if (GetPort(message->ports()[i], &ref) == OK) + ClosePort(ref); + } } } return OK; @@ -554,6 +556,9 @@ event_to_forward = base::MakeUnique<ObserveProxyAckEvent>( event->proxy_port_name(), port->next_sequence_num_to_send - 1); update_status = true; + DVLOG(2) << "Forwarding ObserveProxyAck from " << event->port_name() + << "@" << name_ << " to " << event->proxy_port_name() << "@" + << event_target_node; } else { // As a proxy ourselves, we don't know how to honor the ObserveProxy // event or to populate the last_sequence_num field of ObserveProxyAck. @@ -1240,7 +1245,7 @@ std::vector<PortRef> ports_to_notify; std::vector<PortName> dead_proxies_to_broadcast; - std::vector<PortName> referenced_port_names; + std::vector<std::unique_ptr<UserMessageEvent>> undelivered_messages; { PortLocker::AssertNoPortsLockedOnCurrentThread(); @@ -1276,8 +1281,10 @@ // inefficient but rare. if (port->state != Port::kReceiving) { dead_proxies_to_broadcast.push_back(iter->first); - iter->second->message_queue.GetReferencedPorts( - &referenced_port_names); + std::vector<std::unique_ptr<UserMessageEvent>> messages; + iter->second->message_queue.TakeAllMessages(&messages); + for (auto& message : messages) + undelivered_messages.emplace_back(std::move(message)); } } } @@ -1306,11 +1313,13 @@ DestroyAllPortsWithPeer(name_, proxy_name); } - // Close any ports referenced by the closed proxies. - for (const auto& name : referenced_port_names) { - PortRef ref; - if (GetPort(name, &ref) == OK) - ClosePort(ref); + // Close any ports referenced by undelivered messages. + for (const auto& message : undelivered_messages) { + for (size_t i = 0; i < message->num_ports(); ++i) { + PortRef ref; + if (GetPort(message->ports()[i], &ref) == OK) + ClosePort(ref); + } } }
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 7ceb5aa5..6d1edca 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -202,6 +202,10 @@ # define SK_SUPPORT_LEGACY_ANISOTROPIC_MIPMAP_SCALE #endif +#ifndef SK_SUPPORT_LEGACY_IMAGE_ENCODE_API +#define SK_SUPPORT_LEGACY_IMAGE_ENCODE_API +#endif + // Remove this after we fixed all the issues related to the new SDF algorithm // (https://codereview.chromium.org/1643143002) #ifndef SK_USE_LEGACY_DISTANCE_FIELDS
diff --git a/storage/browser/blob/blob_registry_impl.cc b/storage/browser/blob/blob_registry_impl.cc index bc398b3..fb8b8bd 100644 --- a/storage/browser/blob/blob_registry_impl.cc +++ b/storage/browser/blob/blob_registry_impl.cc
@@ -215,7 +215,16 @@ // TODO(mek): Fill BlobDataBuilder with elements_ other than blobs. auto blob_uuid_it = referenced_blob_uuids_.begin(); for (const auto& element : elements_) { - if (element->is_blob()) { + if (element->is_file()) { + const auto& f = element->get_file(); + builder_.AppendFile(f->path, f->offset, f->length, + f->expected_modification_time.value_or(base::Time())); + } else if (element->is_file_filesystem()) { + const auto& f = element->get_file_filesystem(); + builder_.AppendFileSystemFile( + f->url, f->offset, f->length, + f->expected_modification_time.value_or(base::Time())); + } else if (element->is_blob()) { DCHECK(blob_uuid_it != referenced_blob_uuids_.end()); const std::string& blob_uuid = *blob_uuid_it++; builder_.AppendBlob(blob_uuid, element->get_blob()->offset, @@ -251,13 +260,19 @@ } #endif -BlobRegistryImpl::BlobRegistryImpl(BlobStorageContext* context) - : context_(context), weak_ptr_factory_(this) {} +BlobRegistryImpl::BlobRegistryImpl( + BlobStorageContext* context, + scoped_refptr<FileSystemContext> file_system_context) + : context_(context), + file_system_context_(std::move(file_system_context)), + weak_ptr_factory_(this) {} BlobRegistryImpl::~BlobRegistryImpl() {} -void BlobRegistryImpl::Bind(mojom::BlobRegistryRequest request) { - bindings_.AddBinding(this, std::move(request)); +void BlobRegistryImpl::Bind(mojom::BlobRegistryRequest request, + std::unique_ptr<Delegate> delegate) { + DCHECK(delegate); + bindings_.AddBinding(this, std::move(request), std::move(delegate)); } void BlobRegistryImpl::Register(mojom::BlobRequest blob, @@ -272,7 +287,41 @@ return; } - // TODO(mek): Security policy checks for files and filesystem items. + Delegate* delegate = bindings_.dispatch_context().get(); + DCHECK(delegate); + for (const auto& element : elements) { + if (element->is_file()) { + if (!delegate->CanReadFile(element->get_file()->path)) { + // TODO(mek) Using ERR_FILE_WRITE_FAILED matches the IPC based + // implementation, but this is really a very different error than what + // FILE_WRITE_FAILED is used for elsewhere, so this should probably be a + // dfferent error status. http://crbug.com/740730 + std::unique_ptr<BlobDataHandle> handle = + context_->AddBrokenBlob(uuid, content_type, content_disposition, + BlobStatus::ERR_FILE_WRITE_FAILED); + BlobImpl::Create(std::move(handle), std::move(blob)); + std::move(callback).Run(); + return; + } + } else if (element->is_file_filesystem()) { + FileSystemURL filesystem_url( + file_system_context_->CrackURL(element->get_file_filesystem()->url)); + if (!filesystem_url.is_valid() || + !file_system_context_->GetFileSystemBackend(filesystem_url.type()) || + !delegate->CanReadFileSystemFile(filesystem_url)) { + // TODO(mek) Using ERR_FILE_WRITE_FAILED matches the IPC based + // implementation, but this is really a very different error than what + // FILE_WRITE_FAILED is used for elsewhere, so this should probably be a + // dfferent error status. http://crbug.com/740730 + std::unique_ptr<BlobDataHandle> handle = + context_->AddBrokenBlob(uuid, content_type, content_disposition, + BlobStatus::ERR_FILE_WRITE_FAILED); + BlobImpl::Create(std::move(handle), std::move(blob)); + std::move(callback).Run(); + return; + } + } + } blobs_under_construction_[uuid] = base::MakeUnique<BlobUnderConstruction>( this, uuid, content_type, content_disposition, std::move(elements),
diff --git a/storage/browser/blob/blob_registry_impl.h b/storage/browser/blob/blob_registry_impl.h index 7fa0e4d8..c022e1e2c 100644 --- a/storage/browser/blob/blob_registry_impl.h +++ b/storage/browser/blob/blob_registry_impl.h
@@ -5,20 +5,34 @@ #ifndef STORAGE_BROWSER_BLOB_BLOB_REGISTRY_IMPL_H_ #define STORAGE_BROWSER_BLOB_BLOB_REGISTRY_IMPL_H_ +#include <memory> #include "mojo/public/cpp/bindings/binding_set.h" +#include "storage/browser/fileapi/file_system_context.h" #include "storage/browser/storage_browser_export.h" #include "storage/public/interfaces/blobs.mojom.h" namespace storage { class BlobStorageContext; +class FileSystemURL; class STORAGE_EXPORT BlobRegistryImpl : public mojom::BlobRegistry { public: - explicit BlobRegistryImpl(BlobStorageContext* context); + // Per binding delegate, used for security checks for requests coming in on + // specific bindings/from specific processes. + class Delegate { + public: + virtual ~Delegate() {} + virtual bool CanReadFile(const base::FilePath& file) = 0; + virtual bool CanReadFileSystemFile(const FileSystemURL& url) = 0; + }; + + BlobRegistryImpl(BlobStorageContext* context, + scoped_refptr<FileSystemContext> file_system_context); ~BlobRegistryImpl() override; - void Bind(mojom::BlobRegistryRequest request); + void Bind(mojom::BlobRegistryRequest request, + std::unique_ptr<Delegate> delegate); void Register(mojom::BlobRequest blob, const std::string& uuid, @@ -33,8 +47,9 @@ class BlobUnderConstruction; BlobStorageContext* context_; + scoped_refptr<FileSystemContext> file_system_context_; - mojo::BindingSet<mojom::BlobRegistry> bindings_; + mojo::BindingSet<mojom::BlobRegistry, std::unique_ptr<Delegate>> bindings_; std::map<std::string, std::unique_ptr<BlobUnderConstruction>> blobs_under_construction_;
diff --git a/storage/browser/blob/blob_registry_impl_unittest.cc b/storage/browser/blob/blob_registry_impl_unittest.cc index a181ebf..0f2a60b2 100644 --- a/storage/browser/blob/blob_registry_impl_unittest.cc +++ b/storage/browser/blob/blob_registry_impl_unittest.cc
@@ -4,12 +4,14 @@ #include "storage/browser/blob/blob_registry_impl.h" +#include "base/files/scoped_temp_dir.h" #include "base/test/scoped_task_environment.h" #include "mojo/edk/embedder/embedder.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "storage/browser/blob/blob_data_builder.h" #include "storage/browser/blob/blob_data_handle.h" #include "storage/browser/blob/blob_storage_context.h" +#include "storage/browser/test/mock_special_storage_policy.h" #include "testing/gtest/include/gtest/gtest.h" namespace storage { @@ -33,14 +35,45 @@ std::string uuid_; }; +class MockDelegate : public BlobRegistryImpl::Delegate { + public: + MockDelegate() {} + ~MockDelegate() override {} + + bool CanReadFile(const base::FilePath& file) override { + return can_read_file_result; + } + bool CanReadFileSystemFile(const FileSystemURL& url) override { + return can_read_file_system_file_result; + } + + bool can_read_file_result = true; + bool can_read_file_system_file_result = true; +}; + } // namespace class BlobRegistryImplTest : public testing::Test { public: void SetUp() override { + ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); context_ = base::MakeUnique<BlobStorageContext>(); - registry_impl_ = base::MakeUnique<BlobRegistryImpl>(context_.get()); - registry_impl_->Bind(MakeRequest(®istry_)); + auto storage_policy = + base::MakeRefCounted<content::MockSpecialStoragePolicy>(); + file_system_context_ = base::MakeRefCounted<storage::FileSystemContext>( + base::ThreadTaskRunnerHandle::Get().get(), + base::ThreadTaskRunnerHandle::Get().get(), + nullptr /* external_mount_points */, storage_policy.get(), + nullptr /* quota_manager_proxy */, + std::vector<std::unique_ptr<FileSystemBackend>>(), + std::vector<URLRequestAutoMountHandler>(), data_dir_.GetPath(), + FileSystemOptions(FileSystemOptions::PROFILE_MODE_INCOGNITO, + std::vector<std::string>(), nullptr)); + registry_impl_ = base::MakeUnique<BlobRegistryImpl>(context_.get(), + file_system_context_); + auto delegate = base::MakeUnique<MockDelegate>(); + delegate_ptr_ = delegate.get(); + registry_impl_->Bind(MakeRequest(®istry_), std::move(delegate)); mojo::edk::SetDefaultProcessErrorCallback(base::Bind( &BlobRegistryImplTest::OnBadMessage, base::Unretained(this))); } @@ -86,10 +119,13 @@ } protected: + base::ScopedTempDir data_dir_; base::test::ScopedTaskEnvironment scoped_task_environment_; std::unique_ptr<BlobStorageContext> context_; + scoped_refptr<storage::FileSystemContext> file_system_context_; std::unique_ptr<BlobRegistryImpl> registry_impl_; mojom::BlobRegistryPtr registry_; + MockDelegate* delegate_ptr_; std::vector<std::string> bad_messages_; }; @@ -365,4 +401,121 @@ EXPECT_EQ(expected_blob_data, *handle3->CreateSnapshot()); } +TEST_F(BlobRegistryImplTest, Register_UnreadableFile) { + delegate_ptr_->can_read_file_result = false; + + const std::string kId = "id"; + + std::vector<mojom::DataElementPtr> elements; + elements.push_back(mojom::DataElement::NewFile(mojom::DataElementFile::New( + base::FilePath(FILE_PATH_LITERAL("foobar")), 0, 16, base::nullopt))); + + mojom::BlobPtr blob; + EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "", + std::move(elements))); + EXPECT_TRUE(bad_messages_.empty()); + + std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId); + WaitForBlobCompletion(handle.get()); + + EXPECT_TRUE(handle->IsBroken()); + EXPECT_EQ(BlobStatus::ERR_FILE_WRITE_FAILED, handle->GetBlobStatus()); +} + +TEST_F(BlobRegistryImplTest, Register_ValidFile) { + delegate_ptr_->can_read_file_result = true; + + const std::string kId = "id"; + const base::FilePath path(FILE_PATH_LITERAL("foobar")); + + std::vector<mojom::DataElementPtr> elements; + elements.push_back(mojom::DataElement::NewFile( + mojom::DataElementFile::New(path, 0, 16, base::nullopt))); + + mojom::BlobPtr blob; + EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "", + std::move(elements))); + EXPECT_TRUE(bad_messages_.empty()); + + std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId); + WaitForBlobCompletion(handle.get()); + + EXPECT_FALSE(handle->IsBroken()); + EXPECT_EQ(BlobStatus::DONE, handle->GetBlobStatus()); + + BlobDataBuilder expected_blob_data(kId); + expected_blob_data.AppendFile(path, 0, 16, base::Time()); + + EXPECT_EQ(expected_blob_data, *handle->CreateSnapshot()); +} + +TEST_F(BlobRegistryImplTest, Register_FileSystemFile_InvalidScheme) { + const std::string kId = "id"; + + std::vector<mojom::DataElementPtr> elements; + elements.push_back(mojom::DataElement::NewFileFilesystem( + mojom::DataElementFilesystemURL::New(GURL("http://foobar.com/"), 0, 16, + base::nullopt))); + + mojom::BlobPtr blob; + EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "", + std::move(elements))); + EXPECT_TRUE(bad_messages_.empty()); + + std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId); + WaitForBlobCompletion(handle.get()); + + EXPECT_TRUE(handle->IsBroken()); + EXPECT_EQ(BlobStatus::ERR_FILE_WRITE_FAILED, handle->GetBlobStatus()); +} + +TEST_F(BlobRegistryImplTest, Register_FileSystemFile_UnreadablFile) { + delegate_ptr_->can_read_file_system_file_result = false; + + const std::string kId = "id"; + const GURL url("filesystem:http://example.com/temporary/myfile.png"); + + std::vector<mojom::DataElementPtr> elements; + elements.push_back(mojom::DataElement::NewFileFilesystem( + mojom::DataElementFilesystemURL::New(url, 0, 16, base::nullopt))); + + mojom::BlobPtr blob; + EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "", + std::move(elements))); + EXPECT_TRUE(bad_messages_.empty()); + + std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId); + WaitForBlobCompletion(handle.get()); + + EXPECT_TRUE(handle->IsBroken()); + EXPECT_EQ(BlobStatus::ERR_FILE_WRITE_FAILED, handle->GetBlobStatus()); +} + +TEST_F(BlobRegistryImplTest, Register_FileSystemFile_Valid) { + delegate_ptr_->can_read_file_system_file_result = true; + + const std::string kId = "id"; + const GURL url("filesystem:http://example.com/temporary/myfile.png"); + + std::vector<mojom::DataElementPtr> elements; + elements.push_back(mojom::DataElement::NewFileFilesystem( + mojom::DataElementFilesystemURL::New(url, 0, 16, base::nullopt))); + + mojom::BlobPtr blob; + EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "", + std::move(elements))); + EXPECT_TRUE(bad_messages_.empty()); + + std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId); + WaitForBlobCompletion(handle.get()); + + EXPECT_FALSE(handle->IsBroken()); + EXPECT_EQ(BlobStatus::DONE, handle->GetBlobStatus()); + + BlobDataBuilder expected_blob_data(kId); + expected_blob_data.AppendFileSystemFile(url, 0, 16, base::Time()); + + EXPECT_EQ(expected_blob_data, *handle->CreateSnapshot()); +} + } // namespace storage
diff --git a/storage/public/interfaces/blobs.mojom b/storage/public/interfaces/blobs.mojom index cba6116e4..eb51dd8 100644 --- a/storage/public/interfaces/blobs.mojom +++ b/storage/public/interfaces/blobs.mojom
@@ -5,6 +5,7 @@ module storage.mojom; import "mojo/common/file.mojom"; +import "mojo/common/file_path.mojom"; import "mojo/common/time.mojom"; import "url/mojo/url.mojom"; @@ -97,7 +98,7 @@ // A reference to a slice of a file on disk. struct DataElementFile { // Path of the file. - string path; + mojo.common.mojom.FilePath path; // Offset inside the file. uint64 offset; // Length of the slice. Can be uint64_max if the length is unknown. If this is
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 0ceb38a..5521ff7 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -4872,65 +4872,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build249-m4--device5", - "os": "Android", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build249-m4--device5", - "os": "Android", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -10065,65 +10006,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:22b1", - "id": "build151-b1", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:22b1", - "id": "build151-b1", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -15172,65 +15054,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:9874", - "id": "build215-b4", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:9874", - "id": "build215-b4", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results",
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 51bc228..8b2bf384 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -4937,65 +4937,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build48-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build48-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -10025,65 +9966,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build75-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build75-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -12696,36 +12578,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-webview", - "--webview-embedder-apk=../../out/Release/apks/SystemWebViewShell.apk" - ], - "isolate_name": "telemetry_perf_webview_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_webview_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build166-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -17717,65 +17569,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build45-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build45-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -20388,36 +20181,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-webview", - "--webview-embedder-apk=../../out/Release/apks/SystemWebViewShell.apk" - ], - "isolate_name": "telemetry_perf_webview_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_webview_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build114-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -25409,65 +25172,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build49-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build49-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -30497,65 +30201,6 @@ }, { "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.mobile_infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.mobile_infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device5", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtimestats.browsing_mobile", "-v", "--upload-results", @@ -35573,65 +35218,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0166", - "id": "build106-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0166", - "id": "build106-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -40700,65 +40286,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "id": "build162-m1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "id": "build162-m1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -45827,65 +45354,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1626", - "id": "build127-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1626", - "id": "build127-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -50934,65 +50402,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a26", - "id": "build28-b1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a26", - "id": "build28-b1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -56061,65 +55470,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "id": "build132-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "id": "build132-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -61188,65 +60538,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0d26", - "id": "build30-b4", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0d26", - "id": "build30-b4", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -66295,65 +65586,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1616", - "id": "build180-b4", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1616", - "id": "build180-b4", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -71422,65 +70654,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0534", - "id": "build136-m1", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0534", - "id": "build136-m1", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -76609,65 +75782,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6613", - "id": "build105-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6613", - "id": "build105-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -81776,65 +80890,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:041a", - "id": "build168-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:041a", - "id": "build168-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -86943,65 +85998,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:104a", - "id": "build95-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:104a", - "id": "build95-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -92090,65 +91086,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build189-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build189-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -97237,65 +96174,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build142-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build142-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results", @@ -102404,65 +101282,6 @@ }, { "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=release_x64" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build146-m1", - "os": "Windows-2012ServerR2-SP0", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "v8.infinite_scroll_tbmv2", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "v8.infinite_scroll_tbmv2.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build146-m1", - "os": "Windows-2012ServerR2-SP0", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "v8.runtime_stats.top_25", "-v", "--upload-results",
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index b79229b..19116ea 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -1074,7 +1074,7 @@ "type": "windowed_test_launcher", }, "vr_common_unittests": { - "label": "//chrome/browser/android/vr_shell:vr_common_unittests", + "label": "//chrome/browser/vr:vr_common_unittests", "type": "console_test_launcher", }, "webapk_client_junit_tests": {
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index 867450f..747b4af 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -219,7 +219,7 @@ crbug.com/591099 accessibility/table-with-empty-thead-causes-crash.html [ Failure ] crbug.com/591099 accessibility/table-with-hidden-head-section.html [ Failure ] crbug.com/591099 accessibility/text-change-notification.html [ Crash Failure ] -crbug.com/591099 accessibility/textarea-caret-position.html [ Crash Timeout ] +crbug.com/591099 accessibility/textarea-caret-position.html [ Crash Failure Timeout ] crbug.com/591099 accessibility/textarea-line-for-index.html [ Crash Failure ] crbug.com/591099 accessibility/textarea-selection.html [ Crash Failure ] crbug.com/591099 accessibility/textbox-role-on-contenteditable-crash.html [ Failure ] @@ -229,20 +229,20 @@ crbug.com/591099 animations/3d/change-transform-in-end-event.html [ Failure Pass ] crbug.com/591099 animations/3d/state-at-end-event-transform.html [ Failure Pass ] crbug.com/591099 animations/animation-css-rule-types.html [ Failure ] -crbug.com/591099 animations/events/animation-events-create.html [ Failure ] crbug.com/591099 animations/animations-parsing.html [ Timeout ] -crbug.com/591099 animations/responsive/animations-responsive-to-color-change.html [ Crash Pass ] -crbug.com/591099 animations/svg/clear-svg-animation-effects.html [ Crash Pass ] crbug.com/591099 animations/composition/background-position-composition.html [ Crash Pass ] crbug.com/591099 animations/composition/caret-color-composition.html [ Crash Pass ] crbug.com/591099 animations/composition/stroke-dasharray-composition.html [ Crash Pass ] crbug.com/591099 animations/computed-style.html [ Failure ] -crbug.com/591099 animations/svg/css-animation-overrides-svg-presentation-attribute-animation.html [ Crash Pass ] -crbug.com/591099 animations/events/delay-start-event.html [ Failure ] crbug.com/591099 animations/display-change-does-not-terminate-animation.html [ Crash Failure ] crbug.com/591099 animations/display-inline-style-adjust.html [ Failure ] crbug.com/591099 animations/display-none-cancel-computedstyle.html [ Failure ] crbug.com/591099 animations/display-none-terminates-animation.html [ Failure ] +crbug.com/591099 animations/events/animation-events-create.html [ Failure ] +crbug.com/591099 animations/events/delay-start-event.html [ Failure ] +crbug.com/591099 animations/events/negative-delay-events.html [ Failure ] +crbug.com/591099 animations/events/play-state-initially-paused-start-event.html [ Failure ] +crbug.com/591099 animations/font-size-using-ems.html [ Failure ] crbug.com/591099 animations/hit-testing/inline-element-animation-end-hit-test.html [ Failure ] crbug.com/591099 animations/interpolation/backdrop-filter-interpolation.html [ Crash Timeout ] crbug.com/591099 animations/interpolation/background-color-interpolation.html [ Crash Pass ] @@ -330,14 +330,19 @@ crbug.com/591099 animations/interpolation/webkit-transform-origin-interpolation.html [ Crash Pass ] crbug.com/591099 animations/keyframes-rule.html [ Failure ] crbug.com/591099 animations/lazy-detached-animation-stop.html [ Failure ] -crbug.com/591099 animations/events/negative-delay-events.html [ Failure ] -crbug.com/591099 animations/events/play-state-initially-paused-start-event.html [ Failure ] crbug.com/591099 animations/play-state.html [ Failure ] crbug.com/591099 animations/prefixed/animation-inherit-initial-unprefixed.html [ Failure ] crbug.com/591099 animations/prefixed/keyframes-cssom-prefixed-02.html [ Failure ] crbug.com/591099 animations/prefixed/keyframes-cssom-unprefixed-02.html [ Failure ] +crbug.com/591099 animations/responsive/animations-responsive-to-color-change.html [ Crash Pass ] crbug.com/591099 animations/responsive/interpolation/d-responsive.html [ Crash Pass ] crbug.com/591099 animations/responsive/interpolation/line-height-responsive.html [ Pass Timeout ] +crbug.com/591099 animations/responsive/interpolation/svg-d-responsive.html [ Crash Pass ] +crbug.com/591099 animations/responsive/interpolation/svg-points-responsive.html [ Crash Pass ] +crbug.com/591099 animations/responsive/interpolation/svg-tableValues-responsive.html [ Crash Pass ] +crbug.com/591099 animations/responsive/interpolation/svg-transform-responsive.html [ Crash Pass ] +crbug.com/591099 animations/responsive/interpolation/svg-x-list-responsive.html [ Crash Pass ] +crbug.com/591099 animations/responsive/svg-responsive-to-timing-updates.html [ Crash Pass ] crbug.com/591099 animations/rotate-transform-equivalent.html [ Failure ] crbug.com/591099 animations/skew-notsequential-compositor.html [ Failure ] crbug.com/591099 animations/stability/animation-end-event-destroy-renderer.html [ Failure ] @@ -502,13 +507,9 @@ crbug.com/591099 animations/svg-attribute-interpolation/svg-xChannelSelector-interpolation.html [ Crash Pass ] crbug.com/591099 animations/svg-attribute-interpolation/svg-y-list-interpolation.html [ Crash Pass ] crbug.com/591099 animations/svg-attribute-interpolation/svg-z-interpolation.html [ Crash Pass ] -crbug.com/591099 animations/responsive/interpolation/svg-d-responsive.html [ Crash Pass ] -crbug.com/591099 animations/responsive/interpolation/svg-points-responsive.html [ Crash Pass ] -crbug.com/591099 animations/responsive/interpolation/svg-tableValues-responsive.html [ Crash Pass ] -crbug.com/591099 animations/responsive/interpolation/svg-transform-responsive.html [ Crash Pass ] -crbug.com/591099 animations/responsive/interpolation/svg-x-list-responsive.html [ Crash Pass ] +crbug.com/591099 animations/svg/clear-svg-animation-effects.html [ Crash Pass ] +crbug.com/591099 animations/svg/css-animation-overrides-svg-presentation-attribute-animation.html [ Crash Pass ] crbug.com/591099 animations/svg/svg-presentation-attribute-animation.html [ Crash Pass ] -crbug.com/591099 animations/responsive/svg-responsive-to-timing-updates.html [ Crash Pass ] crbug.com/591099 animations/timing/timing-model.html [ Pass Timeout ] crbug.com/591099 battery-status/api-defined.html [ Failure ] crbug.com/591099 battery-status/detached-no-crash.html [ Failure ] @@ -4650,6 +4651,12 @@ crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html [ Crash Pass ] crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html [ Crash Pass ] +crbug.com/591099 external/wpt/css/css-grid-1/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-007.html [ Failure ] +crbug.com/591099 external/wpt/css/css-grid-1/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-008.html [ Failure ] +crbug.com/591099 external/wpt/css/css-grid-1/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-009.html [ Failure ] +crbug.com/591099 external/wpt/css/css-grid-1/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-010.html [ Failure ] +crbug.com/591099 external/wpt/css/css-grid-1/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-011.html [ Failure ] +crbug.com/591099 external/wpt/css/css-grid-1/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-012.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/fr-unit-with-percentage.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/fr-unit.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html [ Failure ] @@ -5666,6 +5673,7 @@ crbug.com/591099 external/wpt/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html [ Crash Pass ] crbug.com/591099 external/wpt/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html [ Crash Pass ] crbug.com/591099 external/wpt/http/basic-auth-cache-test.html [ Crash Timeout ] +crbug.com/591099 external/wpt/http/content_length.html [ Crash Pass ] crbug.com/591099 external/wpt/innerText/getter.html [ Crash Failure ] crbug.com/591099 external/wpt/input-events/input-events-typing-data-manual.html [ Crash Pass ] crbug.com/591099 external/wpt/intersection-observer/client-rect.html [ Crash Pass ] @@ -5675,7 +5683,7 @@ crbug.com/591099 external/wpt/intersection-observer/remove-element.html [ Failure ] crbug.com/591099 external/wpt/intersection-observer/root-margin.html [ Crash Pass ] crbug.com/591099 external/wpt/intersection-observer/same-document-root.html [ Crash Failure ] -crbug.com/591099 external/wpt/media-source/mediasource-activesourcebuffers.html [ Crash Pass ] +crbug.com/591099 external/wpt/media-source/mediasource-activesourcebuffers.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/media-source/mediasource-addsourcebuffer-mode.html [ Crash Pass ] crbug.com/591099 external/wpt/media-source/mediasource-addsourcebuffer.html [ Crash Pass ] crbug.com/591099 external/wpt/media-source/mediasource-append-buffer.html [ Crash Pass ] @@ -10131,7 +10139,7 @@ crbug.com/591099 fast/events/popup-forwarded-gesture-blocked.html [ Failure ] crbug.com/591099 fast/events/popup-forwarded-gesture.html [ Failure ] crbug.com/591099 fast/events/programmatic-check-no-change-event.html [ Failure ] -crbug.com/591099 fast/events/recorded-keydown-event.html [ Crash Failure ] +crbug.com/591099 fast/events/recorded-keydown-event.html [ Crash Failure Timeout ] crbug.com/591099 fast/events/related-target-focusevent.html [ Failure Timeout ] crbug.com/591099 fast/events/related-target.html [ Failure ] crbug.com/591099 fast/events/relative-offset-of-simulated-click.html [ Failure ] @@ -11377,10 +11385,10 @@ crbug.com/591099 fast/forms/textarea/textarea-placeholder-visibility-1.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-visibility-2.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-wrapping.html [ Crash Failure ] -crbug.com/591099 fast/forms/textarea/textarea-resize-above-min-size-and-below-initial-size.html [ Crash Pass ] +crbug.com/591099 fast/forms/textarea/textarea-resize-above-min-size-and-below-initial-size.html [ Crash Pass Timeout ] crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-intrinsic-size.html [ Crash Pass Timeout ] crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-size-zoomed.html [ Crash Pass Timeout ] -crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-size.html [ Crash Pass ] +crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-size.html [ Crash Pass Timeout ] crbug.com/591099 fast/forms/textarea/textarea-resize-orthogonal-containing-block.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-rows-cols.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-scroll-height.html [ Crash Failure ] @@ -12375,7 +12383,7 @@ crbug.com/591099 fast/multicol/break-before-first-line-in-first-child.html [ Failure ] crbug.com/591099 fast/multicol/caret-range-anonymous-block-rtl.html [ Failure ] crbug.com/591099 fast/multicol/caret-range-anonymous-block.html [ Failure ] -crbug.com/591099 fast/multicol/caret-range-outside-columns-rtl.html [ Failure ] +crbug.com/591099 fast/multicol/caret-range-outside-columns-rtl.html [ Failure Timeout ] crbug.com/591099 fast/multicol/caret-range-outside-columns.html [ Failure ] crbug.com/591099 fast/multicol/client-rect-after-spanner.html [ Failure ] crbug.com/591099 fast/multicol/client-rect-nested.html [ Failure ] @@ -14477,89 +14485,156 @@ crbug.com/591099 html5lib/generated/run-tests2-write.html [ Failure ] crbug.com/591099 html5lib/generated/run-webkit02-data.html [ Failure ] crbug.com/591099 html5lib/generated/run-webkit02-write.html [ Failure ] -crbug.com/591099 http/tests/accessibility/slow-document-load.html [ Failure ] +crbug.com/591099 http/tests/accessibility/slow-document-load.html [ Crash Failure ] crbug.com/591099 http/tests/activedomobject/media.html [ Failure ] -crbug.com/591099 http/tests/appcache/404-manifest.html [ Failure ] -crbug.com/591099 http/tests/appcache/404-resource-cross-origin.html [ Failure ] -crbug.com/591099 http/tests/appcache/404-resource.html [ Failure ] +crbug.com/591099 http/tests/appcache/404-manifest.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/404-resource-cross-origin.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/404-resource.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/abort-cache-onchecking-manifest-404.html [ Crash ] +crbug.com/591099 http/tests/appcache/abort-cache-onchecking-resource-404.html [ Crash ] +crbug.com/591099 http/tests/appcache/abort-cache-onchecking.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/abort-cache-ondownloading-resource-404.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/abort-cache-ondownloading.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/abort-cache-onprogress.html [ Crash Pass ] crbug.com/591099 http/tests/appcache/access-via-redirect.php [ Failure ] -crbug.com/591099 http/tests/appcache/credential-url.html [ Failure Timeout ] +crbug.com/591099 http/tests/appcache/crash-when-navigating-away-then-back.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/credential-url.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/appcache/cyrillic-uri.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/deferred-events-delete-while-raising-timer.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/deferred-events-delete-while-raising.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/deferred-events.html [ Crash Pass ] crbug.com/591099 http/tests/appcache/destroyed-frame.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/detached-iframe.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/different-https-origin-resource-main.html [ Failure ] crbug.com/591099 http/tests/appcache/different-origin-manifest.html [ Failure ] crbug.com/591099 http/tests/appcache/different-scheme.html [ Failure Timeout ] -crbug.com/591099 http/tests/appcache/exceptions.html [ Failure ] -crbug.com/591099 http/tests/appcache/fallback.html [ Failure ] -crbug.com/591099 http/tests/appcache/foreign-fallback.html [ Failure ] -crbug.com/591099 http/tests/appcache/foreign-iframe-main.html [ Failure Timeout ] -crbug.com/591099 http/tests/appcache/local-content.html [ Failure ] -crbug.com/591099 http/tests/appcache/main-resource-hash.html [ Failure Timeout ] -crbug.com/591099 http/tests/appcache/main-resource-redirect.html [ Failure ] +crbug.com/591099 http/tests/appcache/document-write-html-element-2.html [ Crash ] +crbug.com/591099 http/tests/appcache/document-write-html-element.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/empty-manifest.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/exceptions.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/fail-on-update-2.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/fail-on-update.html [ Crash ] +crbug.com/591099 http/tests/appcache/fallback.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/foreign-fallback.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/foreign-iframe-main.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/appcache/insert-html-element-with-manifest-2.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/local-content.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/main-resource-hash.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/appcache/main-resource-redirect.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/manifest-parsing.html [ Failure ] crbug.com/591099 http/tests/appcache/manifest-redirect-2.html [ Failure ] crbug.com/591099 http/tests/appcache/manifest-redirect.html [ Failure ] +crbug.com/591099 http/tests/appcache/manifest-with-empty-file.html [ Crash Pass ] crbug.com/591099 http/tests/appcache/modified-manifest.html [ Failure ] -crbug.com/591099 http/tests/appcache/multi-fallback.html [ Failure ] +crbug.com/591099 http/tests/appcache/multi-fallback.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/non-html.xhtml [ Failure ] crbug.com/591099 http/tests/appcache/obsolete-error-events.html [ Failure Timeout ] -crbug.com/591099 http/tests/appcache/offline-access.html [ Failure ] -crbug.com/591099 http/tests/appcache/online-fallback-layering.html [ Failure ] -crbug.com/591099 http/tests/appcache/online-whitelist.html [ Failure ] -crbug.com/591099 http/tests/appcache/reload.html [ Failure ] +crbug.com/591099 http/tests/appcache/offline-access.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/online-fallback-layering.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/online-whitelist.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/progress-counter.html [ Crash Pass ] +crbug.com/591099 http/tests/appcache/reload.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/remove-cache.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/resource-redirect-2.html [ Failure ] -crbug.com/591099 http/tests/appcache/resource-redirect.html [ Failure ] +crbug.com/591099 http/tests/appcache/resource-redirect.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/simple.html [ Crash ] crbug.com/591099 http/tests/appcache/top-frame-1.html [ Failure ] -crbug.com/591099 http/tests/appcache/top-frame-2.html [ Failure Timeout ] -crbug.com/591099 http/tests/appcache/top-frame-3.html [ Failure ] -crbug.com/591099 http/tests/appcache/top-frame-4.html [ Failure ] +crbug.com/591099 http/tests/appcache/top-frame-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/appcache/top-frame-3.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/top-frame-4.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/update-cache.html [ Failure ] crbug.com/591099 http/tests/appcache/video.html [ Crash Pass ] -crbug.com/591099 http/tests/appcache/whitelist-wildcard.html [ Failure ] -crbug.com/591099 http/tests/appcache/wrong-content-type.html [ Failure ] -crbug.com/591099 http/tests/appcache/wrong-signature-2.html [ Failure ] +crbug.com/591099 http/tests/appcache/whitelist-wildcard.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/wrong-content-type.html [ Crash Failure ] +crbug.com/591099 http/tests/appcache/wrong-signature-2.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/wrong-signature.html [ Failure ] -crbug.com/591099 http/tests/appcache/xhr-foreign-resource.html [ Failure ] +crbug.com/591099 http/tests/appcache/xhr-foreign-resource.html [ Crash Failure ] +crbug.com/591099 http/tests/background_fetch/background-fetch-fail-event.https.html [ Crash Pass ] +crbug.com/591099 http/tests/background_fetch/background-fetch-manager-fetch.https.html [ Crash Pass ] +crbug.com/591099 http/tests/background_fetch/background-fetch-manager-get.https.html [ Crash Pass ] +crbug.com/591099 http/tests/background_sync/chromium/stop-worker-no-crash.html [ Crash Pass ] +crbug.com/591099 http/tests/background_sync/oneshot-register-failure-worker-not-activated.html [ Crash Pass ] +crbug.com/591099 http/tests/background_sync/permission_denied.html [ Crash ] +crbug.com/591099 http/tests/budget/get-budget-in-service-worker.html [ Crash Pass ] +crbug.com/591099 http/tests/budget/get-budget.html [ Crash ] +crbug.com/591099 http/tests/budget/get-cost-fails-in-service-worker.html [ Crash ] +crbug.com/591099 http/tests/budget/get-cost.html [ Crash Pass ] +crbug.com/591099 http/tests/budget/interfaces-in-service-worker.html [ Crash ] +crbug.com/591099 http/tests/cache/cached-main-resource.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/cancel-multiple-post-xhrs.html [ Crash Pass ] crbug.com/591099 http/tests/cache/content-type-ignored-during-revalidation.html [ Failure ] -crbug.com/591099 http/tests/cache/history-only-cached-subresource-loads-max-age-https.html [ Failure ] +crbug.com/591099 http/tests/cache/history-only-cached-subresource-loads-max-age-https.html [ Crash Failure ] crbug.com/591099 http/tests/cache/history-only-cached-subresource-loads.html [ Failure ] +crbug.com/591099 http/tests/cache/iframe-304-crash.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/image-with-dpr-header-cached.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/loaded-from-cache-after-reload-within-iframe.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/loaded-from-cache-after-reload.html [ Crash Pass ] crbug.com/591099 http/tests/cache/network-error-during-revalidation.html [ Failure ] +crbug.com/591099 http/tests/cache/post-redirect-get.php [ Crash Pass ] +crbug.com/591099 http/tests/cache/post-with-cached-subresources.php [ Crash Pass ] +crbug.com/591099 http/tests/cache/preload-cleared-after-parsing-canceled-by-js.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/smil-usecounter-in-cached-image.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/subresource-expiration-1.html [ Crash Pass ] +crbug.com/591099 http/tests/cache/subresource-expiration-2.html [ Crash ] +crbug.com/591099 http/tests/cache/subresource-failover-to-network.html [ Crash Pass ] crbug.com/591099 http/tests/cache/subresource-fragment-identifier.html [ Crash Failure ] -crbug.com/591099 http/tests/cache/subresource-multiple-instances.html [ Failure ] +crbug.com/591099 http/tests/cache/subresource-multiple-instances.html [ Crash Failure ] crbug.com/591099 http/tests/cache/subresource-revalidation-referrer.html [ Failure ] crbug.com/591099 http/tests/cache/x-frame-options-304.html [ Failure ] -crbug.com/591099 http/tests/cache/xhr-body.html [ Failure ] -crbug.com/591099 http/tests/cache/xhr-vary-header.html [ Failure ] +crbug.com/591099 http/tests/cache/xhr-body.html [ Crash Failure ] +crbug.com/591099 http/tests/cache/xhr-vary-header.html [ Crash Failure ] crbug.com/591099 http/tests/cache/zero-length-xhr.html [ Failure ] -crbug.com/591099 http/tests/canvas/canvas-filter-svg-external-multiple.html [ Failure ] -crbug.com/591099 http/tests/canvas/canvas-filter-svg-external.html [ Failure ] -crbug.com/591099 http/tests/canvas/webgl/origin-clean-conformance.html [ Failure ] -crbug.com/591099 http/tests/cookies/double-quoted-value-with-semi-colon.html [ Failure ] -crbug.com/591099 http/tests/cookies/http-get-cookie-set-in-js.html [ Failure ] -crbug.com/591099 http/tests/cookies/js-get-and-set-http-only-cookie.html [ Failure ] -crbug.com/591099 http/tests/cookies/js-set-null.html [ Failure ] -crbug.com/591099 http/tests/cookies/multiple-cookies.html [ Failure ] -crbug.com/591099 http/tests/cookies/simple-cookies-expired.html [ Failure ] -crbug.com/591099 http/tests/cookies/simple-cookies-max-age.html [ Failure ] +crbug.com/591099 http/tests/cachestorage/serviceworker/credentials.html [ Crash Pass ] +crbug.com/591099 http/tests/canvas/canvas-filter-svg-external-multiple.html [ Crash Failure ] +crbug.com/591099 http/tests/canvas/canvas-filter-svg-external.html [ Crash Failure ] +crbug.com/591099 http/tests/canvas/philip/tests/security.drawImage.image.html [ Crash ] +crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.canvas.fillStyle.html [ Crash Pass ] +crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.canvas.timing.html [ Crash Pass ] +crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.cross.html [ Crash Pass ] +crbug.com/591099 http/tests/canvas/philip/tests/security.reset.html [ Crash Pass ] +crbug.com/591099 http/tests/canvas/webgl/origin-clean-conformance.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/double-quoted-value-with-semi-colon.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/http-get-cookie-set-in-js.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/js-get-and-set-http-only-cookie.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/js-set-null.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/multiple-cookies.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/same-site/basics.html [ Crash Pass ] +crbug.com/591099 http/tests/cookies/same-site/popup-cross-site.html [ Crash ] +crbug.com/591099 http/tests/cookies/set-cookie-on-redirect.html [ Crash Pass ] +crbug.com/591099 http/tests/cookies/simple-cookies-expired.html [ Crash Failure ] +crbug.com/591099 http/tests/cookies/simple-cookies-max-age.html [ Crash Failure ] crbug.com/591099 http/tests/cookies/single-quoted-value.html [ Failure ] +crbug.com/591099 http/tests/credentialmanager/credentialscontainer-create-basics.html [ Crash Pass ] crbug.com/591099 http/tests/credentialmanager/credentialscontainer-frame-errors.html [ Crash Pass ] +crbug.com/591099 http/tests/credentialmanager/credentialscontainer-get-basics.html [ Crash Pass ] +crbug.com/591099 http/tests/credentialmanager/credentialscontainer-get-warnings.html [ Crash Pass ] +crbug.com/591099 http/tests/credentialmanager/credentialscontainer-preventsilentaccess-basics.html [ Crash Pass ] +crbug.com/591099 http/tests/credentialmanager/credentialscontainer-requireusermediation-basics.html [ Crash ] +crbug.com/591099 http/tests/credentialmanager/passwordcredential-fetch-registrabledomain.html [ Crash Pass ] +crbug.com/591099 http/tests/credentialmanager/passwordcredential-fetch.html [ Crash Pass ] +crbug.com/591099 http/tests/credentialmanager/passwordcredential-redirect.html [ Crash Pass ] crbug.com/591099 http/tests/css/border-image-loading.html [ Failure ] +crbug.com/591099 http/tests/css/cross-fade-reload.html [ Crash Pass ] crbug.com/591099 http/tests/css/css-image-loading.html [ Crash Failure ] -crbug.com/591099 http/tests/css/css-image-valued-shape.html [ Failure ] +crbug.com/591099 http/tests/css/css-image-valued-shape.html [ Crash Failure ] +crbug.com/591099 http/tests/css/css-imports-redirect-cycle.html [ Crash Pass ] +crbug.com/591099 http/tests/css/css-imports-url-fragment.html [ Crash ] crbug.com/591099 http/tests/css/css-non-blocking.html [ Failure ] +crbug.com/591099 http/tests/css/css-resources-referrer-srcdoc.html [ Crash ] crbug.com/591099 http/tests/css/font-face-src-loading.html [ Failure ] crbug.com/591099 http/tests/css/image-value-cached.html [ Crash Pass ] -crbug.com/591099 http/tests/css/mask-image-loading.html [ Failure ] +crbug.com/591099 http/tests/css/mask-image-loading.html [ Crash Failure ] +crbug.com/591099 http/tests/css/missing-repaint-after-slow-style-sheet.pl [ Crash Pass ] +crbug.com/591099 http/tests/css/object-fit-delayed-img-svg.html [ Crash ] crbug.com/591099 http/tests/css/pending-stylesheet-offset-width.html [ Failure ] crbug.com/591099 http/tests/css/performance-info-with-cached-sheet.html [ Failure ] crbug.com/591099 http/tests/css/reflection-mask-image-loading.html [ Failure ] +crbug.com/591099 http/tests/css/remove-blocking-with-loading-import.html [ Crash ] crbug.com/591099 http/tests/css/shape-image-file.html [ Failure ] -crbug.com/591099 http/tests/css/shared-stylesheet-mutation-preconstruct.html [ Failure ] +crbug.com/591099 http/tests/css/shared-stylesheet-mutation-preconstruct.html [ Crash Failure ] crbug.com/591099 http/tests/css/shared-stylesheet-mutation.html [ Failure ] +crbug.com/591099 http/tests/css/vertical-align-baseline-after-image-load-3.html [ Crash Pass ] +crbug.com/591099 http/tests/css/vertical-align-baseline-after-image-load.html [ Crash ] crbug.com/591099 http/tests/csspaint/border-color.html [ Failure ] crbug.com/591099 http/tests/csspaint/invalidation-background-image.html [ Timeout ] crbug.com/591099 http/tests/csspaint/invalidation-border-image.html [ Timeout ] @@ -14567,39 +14642,44 @@ crbug.com/591099 http/tests/dom/EventListener-incumbent-global-1.html [ Crash Pass ] crbug.com/591099 http/tests/dom/EventListener-incumbent-global-2.html [ Crash Pass ] crbug.com/591099 http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Failure ] -crbug.com/591099 http/tests/dom/create-contextual-fragment-from-svg-document-range.html [ Failure ] +crbug.com/591099 http/tests/dom/create-contextual-fragment-from-svg-document-range.html [ Crash Failure ] +crbug.com/591099 http/tests/dom/document-contentType-xhr.html [ Crash Pass ] +crbug.com/591099 http/tests/dom/document-contentType.html [ Crash Pass ] +crbug.com/591099 http/tests/dom/iframe-crash-reload-from-encoding-detection.html [ Crash Pass ] crbug.com/591099 http/tests/dom/location-stringify.html [ Crash Failure ] crbug.com/591099 http/tests/download/basic-ascii.html [ Failure ] crbug.com/591099 http/tests/download/default-encoding.html [ Failure Timeout ] crbug.com/591099 http/tests/download/inherited-encoding-form-submission-result.html [ Failure ] crbug.com/591099 http/tests/download/inherited-encoding.html [ Failure Timeout ] crbug.com/591099 http/tests/download/literal-utf-8.html [ Failure ] +crbug.com/591099 http/tests/encoding/meta-switch-mid-parse-with-title.html [ Crash Pass ] +crbug.com/591099 http/tests/encoding/meta-switch-mid-parse.html [ Crash Pass ] crbug.com/591099 http/tests/eventsource/eventsource-bad-mime-type.html [ Failure ] -crbug.com/591099 http/tests/eventsource/eventsource-content-type-charset.html [ Failure ] -crbug.com/591099 http/tests/eventsource/eventsource-cors-basic.html [ Failure ] +crbug.com/591099 http/tests/eventsource/eventsource-content-type-charset.html [ Crash Failure ] +crbug.com/591099 http/tests/eventsource/eventsource-cors-basic.html [ Crash Failure ] crbug.com/591099 http/tests/eventsource/eventsource-cors-no-server.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-cors-non-http.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-cors-redirect.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-cors-with-credentials.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-csp-redirect.html [ Failure ] -crbug.com/591099 http/tests/eventsource/eventsource-eof.html [ Failure ] +crbug.com/591099 http/tests/eventsource/eventsource-eof.html [ Crash Failure ] crbug.com/591099 http/tests/eventsource/eventsource-events-after-close.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-parse-event-stream.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-reconnect-on-redirect.html [ Failure ] -crbug.com/591099 http/tests/eventsource/eventsource-reconnect.html [ Failure ] +crbug.com/591099 http/tests/eventsource/eventsource-reconnect.html [ Crash Failure ] crbug.com/591099 http/tests/eventsource/eventsource-retry-precision.html [ Failure ] crbug.com/591099 http/tests/eventsource/eventsource-status-code-states.html [ Failure ] -crbug.com/591099 http/tests/eventsource/eventsource-url-attribute.html [ Failure ] +crbug.com/591099 http/tests/eventsource/eventsource-url-attribute.html [ Crash Failure ] crbug.com/591099 http/tests/eventsource/existent-eventsource-status-error-iframe-crash.html [ Crash Pass ] crbug.com/591099 http/tests/eventsource/non-existent-eventsource-status-error-iframe-crash.html [ Crash Pass ] crbug.com/591099 http/tests/eventsource/workers/eventsource-bad-mime-type.html [ Failure ] -crbug.com/591099 http/tests/eventsource/workers/eventsource-content-type-charset.html [ Failure ] +crbug.com/591099 http/tests/eventsource/workers/eventsource-content-type-charset.html [ Crash Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-cors-basic.html [ Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-cors-no-server.html [ Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-cors-non-http.html [ Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-cors-redirect.html [ Failure ] -crbug.com/591099 http/tests/eventsource/workers/eventsource-cors-with-credentials.html [ Failure ] -crbug.com/591099 http/tests/eventsource/workers/eventsource-csp-redirect.html [ Failure ] +crbug.com/591099 http/tests/eventsource/workers/eventsource-cors-with-credentials.html [ Crash Failure ] +crbug.com/591099 http/tests/eventsource/workers/eventsource-csp-redirect.html [ Crash Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-eof.html [ Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-events-after-close.html [ Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-parse-event-stream.html [ Failure ] @@ -14609,11 +14689,11 @@ crbug.com/591099 http/tests/eventsource/workers/eventsource-status-code-states.html [ Failure ] crbug.com/591099 http/tests/eventsource/workers/eventsource-url-attribute.html [ Failure ] crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy-relocate-and-no-reload.html [ Timeout ] -crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy-relocate-and-reload.html [ Timeout ] -crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy.html [ Timeout ] -crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-disabled.php [ Timeout ] +crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy-relocate-and-reload.html [ Crash Timeout ] +crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy.html [ Crash Timeout ] +crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-disabled.php [ Crash Timeout ] crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-enabledforall.php [ Timeout ] -crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-enabledforself.php [ Timeout ] +crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-enabledforself.php [ Crash Timeout ] crbug.com/591099 http/tests/feature-policy/fullscreen-allowed-by-container-policy-relocate.html [ Crash Pass ] crbug.com/591099 http/tests/feature-policy/fullscreen-allowed-by-container-policy.html [ Crash Pass ] crbug.com/591099 http/tests/feature-policy/fullscreen-disabled.php [ Crash Pass ] @@ -14624,7 +14704,17 @@ crbug.com/591099 http/tests/feature-policy/payment-disabled.php [ Crash Failure ] crbug.com/591099 http/tests/feature-policy/payment-enabledforall.php [ Crash Failure ] crbug.com/591099 http/tests/feature-policy/payment-enabledforself.php [ Crash Pass ] +crbug.com/591099 http/tests/feature-policy/xslt-document-insertion.xml [ Crash ] +crbug.com/591099 http/tests/fetch/chromium/close-worker-while-requesting.html [ Crash ] +crbug.com/591099 http/tests/fetch/chromium/data-saver.html [ Crash Pass ] crbug.com/591099 http/tests/fetch/chromium/discarded-window.html [ Crash Pass ] +crbug.com/591099 http/tests/fetch/referrer/no-referrer-document.html [ Crash ] +crbug.com/591099 http/tests/fetch/referrer/origin-when-cross-origin-document.html [ Crash Pass ] +crbug.com/591099 http/tests/fetch/referrer/serviceworker-from-origin-only-document.html [ Crash ] +crbug.com/591099 http/tests/fetch/serviceworker-proxied/thorough/redirect-password.html [ Crash ] +crbug.com/591099 http/tests/fetch/serviceworker/headers-guard-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 http/tests/fetch/serviceworker/referrer-base-https-other-https.html [ Crash ] +crbug.com/591099 http/tests/fetch/serviceworker/response-base-https-other-https.html [ Crash ] crbug.com/591099 http/tests/fetch/window/pageimportancesignals.html [ Failure ] crbug.com/591099 http/tests/fileapi/blob-url-in-subframe.html [ Failure ] crbug.com/591099 http/tests/fileapi/create-blob-url-from-data-url.html [ Failure ] @@ -14739,7 +14829,7 @@ crbug.com/591099 http/tests/inspector/bindings/bindings-frame-attach-detach.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/bindings/bindings-frame-navigate.html [ Failure Timeout ] crbug.com/591099 http/tests/inspector/bindings/bindings-main-frame-navigated.html [ Failure ] -crbug.com/591099 http/tests/inspector/bindings/bindings-multiple-frames.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/bindings/bindings-multiple-frames.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/bindings/contentscripts-bindings-multiple-frames.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/bindings/contentscripts-navigator-multiple-frames.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/bindings/dynamic-bindings-frame-attach-detach.html [ Failure ] @@ -14775,25 +14865,25 @@ crbug.com/591099 http/tests/inspector/console/console-links-on-messages-before-inspection.html [ Failure ] crbug.com/591099 http/tests/inspector/console/console-on-paint-worklet.html [ Failure ] crbug.com/591099 http/tests/inspector/debugger/fetch-breakpoints.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/inspector/elements/elements-linkify-attributes.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/elements/elements-linkify-attributes.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/event-listeners-framework-with-service-worker.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/html-link-import.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/edit-css-with-source-url.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/import-added-through-js-crash.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/inline-stylesheet-sourceurl-and-sourcemapurl.html [ Crash Failure ] -crbug.com/591099 http/tests/inspector/elements/styles/selector-line-deprecated.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/elements/styles/selector-line-deprecated.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/selector-line-sourcemap-header-deprecated.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/selector-line-sourcemap-header.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/selector-line.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/styles-do-not-add-inline-stylesheets-in-navigator.html [ Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/styles-redirected-css.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/elements/styles/stylesheet-tracking.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/inspector/elements/styles/xsl-transformed.xml [ Crash Failure ] +crbug.com/591099 http/tests/inspector/elements/styles/xsl-transformed.xml [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions-headers.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/extensions-iframe-eval.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/extensions-ignore-cache.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/extensions-network-redirect.html [ Crash Failure ] -crbug.com/591099 http/tests/inspector/extensions-useragent.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/extensions-useragent.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions/extensions-api.html [ Failure ] crbug.com/591099 http/tests/inspector/extensions/extensions-audits-api.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/extensions/extensions-audits-content-script.html [ Crash Failure ] @@ -14812,7 +14902,7 @@ crbug.com/591099 http/tests/inspector/fragment.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/indexeddb/database-data.html [ Failure ] crbug.com/591099 http/tests/inspector/indexeddb/database-names.html [ Failure ] -crbug.com/591099 http/tests/inspector/indexeddb/database-refresh-view.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/indexeddb/database-refresh-view.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/indexeddb/database-structure.html [ Failure ] crbug.com/591099 http/tests/inspector/indexeddb/resources-panel.html [ Failure ] crbug.com/591099 http/tests/inspector/indexeddb/transaction-promise-console.html [ Failure ] @@ -15074,7 +15164,7 @@ crbug.com/591099 http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html [ Crash Pass ] crbug.com/591099 http/tests/media/media-source/mediasource-detach.html [ Crash Pass ] crbug.com/591099 http/tests/media/media-source/mediasource-duration-boundaryconditions.html [ Crash Pass ] -crbug.com/591099 http/tests/media/media-source/mediasource-duration.html [ Crash Pass ] +crbug.com/591099 http/tests/media/media-source/mediasource-duration.html [ Crash Failure Pass ] crbug.com/591099 http/tests/media/media-source/mediasource-endofstream-invaliderror.html [ Crash Pass ] crbug.com/591099 http/tests/media/media-source/mediasource-errors.html [ Crash Pass ] crbug.com/591099 http/tests/media/media-source/mediasource-garbage-collection-before-sourceopen.html [ Crash Pass ] @@ -16424,7 +16514,7 @@ crbug.com/591099 inspector-enabled/sources/debugger/script-formatter-console.html [ Failure ] crbug.com/591099 inspector-enabled/tabbed-pane-closeable-persistence-restore.html [ Failure ] crbug.com/591099 inspector-protocol/accessibility/accessibility-ignoredNodes.js [ Crash Failure Timeout ] -crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-buttons.js [ Crash Failure Timeout ] +crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-buttons.js [ Crash Failure Pass Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-img-figure.js [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input-buttons.js [ Crash Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input.js [ Crash Failure Timeout ] @@ -16464,7 +16554,7 @@ crbug.com/591099 inspector/animation/animation-group-matching-transitions.html [ Crash Failure ] crbug.com/591099 inspector/animation/animation-group-matching.html [ Crash Failure ] crbug.com/591099 inspector/animation/animation-timeline.html [ Crash Failure ] -crbug.com/591099 inspector/animation/animation-transition-setTiming-crash.html [ Crash Failure ] +crbug.com/591099 inspector/animation/animation-transition-setTiming-crash.html [ Crash Failure Timeout ] crbug.com/591099 inspector/animation/animation-web-anim-negative-start-time.html [ Crash Failure ] crbug.com/591099 inspector/audits/audits-empty-stylesheet.html [ Crash Failure ] crbug.com/591099 inspector/audits/audits-panel-functional.html [ Crash Failure ] @@ -16628,7 +16718,6 @@ crbug.com/591099 inspector/database-table-name-excaping.html [ Failure ] crbug.com/591099 inspector/device-mode/device-mode-responsive.html [ Crash Failure ] crbug.com/591099 inspector/device-mode/device-mode-switching-devices.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/device-mode/forced-viewport-unobserved.html [ Crash Failure ] crbug.com/591099 inspector/diff-module.html [ Failure ] crbug.com/591099 inspector/domdebugger/domdebugger-getEventListeners.html [ Crash Failure Timeout ] crbug.com/591099 inspector/editor/php-highlighter.html [ Crash Failure ] @@ -16646,7 +16735,7 @@ crbug.com/591099 inspector/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] crbug.com/591099 inspector/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] crbug.com/591099 inspector/editor/text-editor-search-replace.html [ Crash Failure ] -crbug.com/591099 inspector/editor/text-editor-selection-to-search.html [ Crash Failure ] +crbug.com/591099 inspector/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] crbug.com/591099 inspector/editor/text-editor-smart-braces.html [ Crash Failure ] crbug.com/591099 inspector/editor/text-editor-token-at-position.html [ Crash Failure ] crbug.com/591099 inspector/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] @@ -17224,7 +17313,7 @@ crbug.com/591099 inspector/tracing/timeline-js/timeline-js-line-level-profile.html [ Crash Pass ] crbug.com/591099 inspector/tracing/timeline-js/timeline-microtasks.html [ Crash Failure ] crbug.com/591099 inspector/tracing/timeline-js/timeline-open-function-call.html [ Failure ] -crbug.com/591099 inspector/tracing/timeline-js/timeline-runtime-stats.html [ Crash Pass ] +crbug.com/591099 inspector/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure Pass ] crbug.com/591099 inspector/tracing/timeline-js/timeline-script-id.html [ Crash Failure ] crbug.com/591099 inspector/tracing/timeline-js/timeline-script-tag-1.html [ Crash Failure ] crbug.com/591099 inspector/tracing/timeline-js/timeline-script-tag-2.html [ Crash Failure ] @@ -18438,7 +18527,7 @@ crbug.com/591099 plugins/focus-change-2-change-focus.html [ Failure ] crbug.com/591099 plugins/focus-change-3-change-blur.html [ Failure ] crbug.com/591099 plugins/focus-change-4-change-focus-and-blur.html [ Failure ] -crbug.com/591099 plugins/focus.html [ Crash Failure ] +crbug.com/591099 plugins/focus.html [ Crash Failure Timeout ] crbug.com/591099 plugins/fullscreen-plugins-dont-reload.html [ Failure ] crbug.com/591099 plugins/hidden-iframe-with-swf-plugin.html [ Failure ] crbug.com/591099 plugins/iframe-plugin-bgcolor.html [ Failure ] @@ -20351,113 +20440,224 @@ crbug.com/591099 vibration/vibration-exceptions.html [ Failure ] crbug.com/591099 vibration/vibration-iframe.html [ Timeout ] crbug.com/591099 vibration/vibration-patterns.html [ Failure ] -crbug.com/591099 virtual/android/fast/rootscroller/set-root-scroller.html [ Failure ] +crbug.com/591099 virtual/android/fast/rootscroller/root-scroller-apply-filter-to-parent.html [ Crash Pass ] +crbug.com/591099 virtual/android/fast/rootscroller/set-root-scroller.html [ Crash Failure ] crbug.com/591099 virtual/android/fullscreen/anonymous-block-merge-crash.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/api/element-request-fullscreen-two-elements.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/api/element-request-fullscreen-two-iframes.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/api/element-request-fullscreen-vs-exit.html [ Crash Pass ] crbug.com/591099 virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ] +crbug.com/591099 virtual/android/fullscreen/enter-exit-full-screen-hover.html [ Crash ] crbug.com/591099 virtual/android/fullscreen/exit-full-screen-iframe.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-api.html [ Crash ] crbug.com/591099 virtual/android/fullscreen/full-screen-cancel-nested.html [ Crash Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-child-not-allowed-crash.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-crash-offsetLeft.html [ Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-cancel.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-child-not-allowed-crash.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-contentEditable-crash.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-crash-offsetLeft.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-css.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-detached-document.html [ Crash Pass ] crbug.com/591099 virtual/android/fullscreen/full-screen-element-stack.html [ Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-enabled.html [ Crash Pass ] crbug.com/591099 virtual/android/fullscreen/full-screen-frameset.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-allowed-nested.html [ Timeout ] +crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-allowed-nested.html [ Crash Timeout ] +crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Crash ] crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-allowed.html [ Crash Failure ] crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-legacy.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-not-allowed.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-placeholder.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-request-removed.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/full-screen-table-section.html [ Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-not-allowed.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-ua-style.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-inline-split-crash.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-keyboard-enabled.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-no-style-sharing.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/full-screen-not-enabled-when-unsupported.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-placeholder.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-remove-ancestor-after.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-remove-ancestor.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-remove-children.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/full-screen-remove-sibling.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-remove.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-render-inline.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-request-removed.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-request.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-restrictions.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-ruleset-crash.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/full-screen-table-section.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-twice.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-unprefixed-and-prefixed.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/full-screen-will-change.html [ Crash Pass ] crbug.com/591099 virtual/android/fullscreen/full-screen-with-css-reference-filter.html [ Failure ] crbug.com/591099 virtual/android/fullscreen/full-screen-with-flex-item.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/full-screen-zIndex-after.html [ Crash Pass ] crbug.com/591099 virtual/android/fullscreen/model/fully-exit-fullscreen-nested-iframe.html [ Crash Pass ] -crbug.com/591099 virtual/android/fullscreen/video-controls-override.html [ Failure ] +crbug.com/591099 virtual/android/fullscreen/model/fully-exit-fullscreen-nested.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/model/fully-exit-fullscreen-single.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/non-ancestor-iframe.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/notify-paint-crash.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/orthogonal-writing-mode-full-screen-crash.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/orthogonal-writing-mode-full-screen-reattach-crash.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/video-controls-override.html [ Crash Failure ] crbug.com/591099 virtual/android/fullscreen/video-controls-timeline.html [ Failure ] -crbug.com/591099 virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Failure ] +crbug.com/591099 virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Crash Failure ] +crbug.com/591099 virtual/android/fullscreen/video-fixed-at-top-left.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/video-fixed-background.html [ Crash Pass ] +crbug.com/591099 virtual/android/fullscreen/video-specified-size.html [ Crash ] +crbug.com/591099 virtual/android/fullscreen/video-transform.html [ Crash Pass ] crbug.com/591099 virtual/android/media/mediadocument/media-document-with-download-button.html [ Failure ] +crbug.com/591099 virtual/color_space/fast/canvas/color-space/imageData-colorSpace.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.composite.globalAlpha.fillPath.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.fillText.gradient.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.text.draw.fill.maxWidth.gradient.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.text.draw.fill.maxWidth.negative.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.text.draw.fill.maxWidth.verySmall.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/CanvasRendering2D-prototype-chain.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-drawImage-in-worker.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-drawImage.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-imageSmoothing-in-worker.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-pattern.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-ImageBitmapSource.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-commit-invalid-call.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-commit-promise.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-constructor-in-worker.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transferable-exceptions.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-convertToBlob-exceptions.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-currentColor.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-fillRect-in-worker.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-getContext-in-worker.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-opaque-background-compositing.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-placeholder-image-source-with-worker.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-placeholder-image-source.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-resize.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transferControlToOffscreen.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transferToImageBitmap-state-persistency.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transferToImageBitmap.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transferable-exceptions.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transferable.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-zero-size-readback.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/access-zero-sized-canvas.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/alpha.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/arc-crash.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/arc360.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/bug412718.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/bug535171.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/bug544329.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-2d-clip-anti-aliasing.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-2d-imageData-create-nonfinite.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ImageBitmap-close.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ImageBitmap-structured-clone.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ImageBitmap-transferable.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ImageData-neutered-source.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ImageData-neutered-source.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ImageData-workers.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-after-destroy-iframe.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-after-detachment.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-alphaImageData-behavior.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-arc-circumference.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-arc-connecting-line.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-arc-zero-lineto.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-background-alpha.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-bezier-same-endpoint.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-image-over-image.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-text.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blend-solid.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-color-over-color.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-fill-style.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-gradient-over-image.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-gradient-over-pattern.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-image-over-color.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-image-over-gradient.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-image-over-image.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-pattern-over-image.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-text.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-blending-transforms.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-clearRect.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-clip-stack-persistence.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-closePath-single-point.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-alpha.html [ Crash Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-canvas.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-canvas.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-fill-repaint.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-image.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-stroke-alpha.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-text-alpha.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-context-attributes-default-value.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-blob-in-workers.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-colorClamping.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-createPattern.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-data-in-workers.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-data-preserves-alpha.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-drawImage-video.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-drawImage-video.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-drawImage.html [ Timeout ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-immutable.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-invalid-args.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-recursive.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-recursive.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-resize.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-svg.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-webgl.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createPattern-fillRect-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-currentColor.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-direction.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-draw-canvas-on-canvas-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-animated-images.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-animated.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-bleed.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-live-video.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-out-of-bounds-src.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-svg.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ellipse-360-winding.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ellipse-circumference.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ellipse-connecting-line.html [ Failure Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ellipse-negative-radius.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ellipse-zero-lineto.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-ellipse.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-empty-image-pattern.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fill-zeroSizeGradient.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillPath-alpha-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillPath-gradient-shadow.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillPath-pattern-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillPath-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillRect-gradient-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillRect-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillRect-zeroSizeGradient.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillRect.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillStyle-strokeStyle-stringification.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-fillText-zeroSizeGradient.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-drop-shadow.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-fill-liveness.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-fill-paint-color.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-fill-paint-color.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-fill-paint-gradient.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-fill-paint-pattern.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-fill-paint-pattern.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-liveness.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-removed.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-stroke-liveness.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-stroke-paint-color.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-stroke-paint-gradient.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-stroke-paint-pattern.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-bbox.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-inline.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-liveness.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-off-screen.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-inline.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-liveness.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-svg-off-screen.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-undefined.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-units-off-screen.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-width-height-hidpi-scale.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-width-height-hidpi.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-width-height-hidpi.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-width-height-scale.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-filter-width-height.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-font-cache.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-getImageData-linear-rgb.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-getImageData-p3.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-getImageData-rec2020.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-getImageData-rounding.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-getImageData.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-gradient-without-path.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hides-fallback.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hidpi-blurry.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-accessibility-test.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-basic-test.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-clear-test.html [ Crash Pass ] @@ -20474,41 +20674,56 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-path2d-transform-test.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-scale-factor.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-transform-test.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothing-disabled-scaling-down.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingEnabled-patterns.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingQuality.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-fillstyle.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-strokestyle.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-video.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-video.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-isPointInStroke-with-path.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-isPointInStroke.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-large-dimensions.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-large-pattern.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lineDash-input-sequence.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lineDash-invalid.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lineDash.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lineWidth-intact-after-strokeRect.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lineWidth.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-longlived-context.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lose-restore-googol-size.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-lost-gpu-context.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-measure-bidi-text.html [ Failure Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-negative-size.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-negative-size.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-normalize-string.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-overloads-drawImage.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-overloads-strokeText.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-path-context-clip.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-path-context-fill.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-path-context-stroke.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-path-object.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-path-with-inf-nan-dimensions.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-behaviour.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-modify.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-set-transform.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-putImageData.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-quadratic-same-endpoint.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-radial-gradient-spreadMethod.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-render-layer.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-resetTransform.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-resize-after-paint-without-layout.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-resize-after-paint.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-resize-reset.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-save-restore-with-path.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scale-drawImage-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scale-fillPath-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scale-fillRect-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scale-shadowBlur.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scale-strokePath-shadow.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scroll-path-into-view.html [ Failure Timeout ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scroll-path-into-view.html [ Crash Failure Timeout ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-set-properties-with-non-invertible-ctm.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-shadow-source-in.html [ Failure Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-shadow.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-skia-excessive-size.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-strokePath-alpha-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-strokePath-cap-join.html [ Crash Pass ] @@ -20518,162 +20733,263 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-strokeRect-gradient-shadow.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-text-space-characters.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-textMetrics-all.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-textMetrics-width.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transforms-during-path.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-jpeg-maximum-quality.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-toDataURL-jpeg-crash.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-toDataURL-webp-alpha.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-toDataURL-webp.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transform-identity.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transform-nan.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transform-skewed.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transforms-during-path.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transforms-fillRect-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-zero-length-lineCap.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas_arc_largeangles.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/change-context.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/color-space/display_linear-rgb.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/currentTransform-null.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/downsample-quality.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed-invisible-crash.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed-on-event.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed-with-path2d.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/drawImage-with-bad-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/drawImage-with-globalAlpha.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/drawImage-with-negative-source-destination.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/fallback-content.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/feimage-with-foreignobject-taint-canvas-2.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/feimage-with-foreignobject-taint-canvas.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/fill-stroke-clip-reset-path.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/fill-stroke-clip-reset-path.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/fillText-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/fillrect-gradient-zero-stops.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/fillrect_gradient.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/font-no-zoom.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/getPutImageDataPairTest.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/gradient-addColorStop-with-invalid-offset.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/gradient-with-clip.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/image-object-in-canvas.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/image-object-in-canvas.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/image-with-foreignobject-taint-canvas-2.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/image-with-foreignobject-taint-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/imagebitmap/transferFromImageBitmap-alpha.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/imagebitmap/transferFromImageBitmap-no-alpha.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/imagebitmap/transferFromImageBitmap.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/linearGradient-infinite-values.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/painting-on-bad-canvas.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/pattern-with-transform.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/quadraticCurveTo.xml [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/pixelated-resize.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/pixelated.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/quadraticCurveTo.xml [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/resize-while-save-active.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/set-empty-font-crash.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/setWidthResetAfterForcedRender.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/shadow-huge-blur.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/shadow-offset-1.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/strokeText-missing-args.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/synchronous-create-pattern.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/toDataURL-alpha.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/toDataURL-noData.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/toDataURL-supportedTypes.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/transformed-canvas-reset.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/unclosed-canvas-1.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/unclosed-canvas-3.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/unclosed-canvas-2.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/unclosed-canvas-3.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/unclosed-canvas-4.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/canvas-getContext-crash.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/canvas-resize-crash.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/compressed-tex-image.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/canvas-to-data-url.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/compressed-tex-image.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/context-destroyed-crash.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/context-gc-custom-properties.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/draw-webgl-to-canvas-2d-after-to-data-url-without-context.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/draw-webgl-to-canvas-2d.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-APIs-NOT-alter-webgl-states.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-context-lost-restored-worker.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-context-lost-worker.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-transferToImageBitmap-texImage2D.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/pixelated.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/renderer-and-vendor-strings.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/shader-deleted-by-accessor.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/tex-sub-image-cube-maps.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/shader-deleted-by-accessor.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/tex-sub-image-cube-maps.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-blob.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-canvas-resize.html [ Crash Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texture-color-profile.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-texture-binding-preserved.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-image-resize.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-image.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-blob.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-image.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-imageData.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-video-resize.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-video.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-structured-clone.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-transferable.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/texture-color-profile.html [ Crash Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-repaint.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-tabswitching.html [ Crash ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-context-attributes-default-value.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-error-response.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-shadow-no-alpha.html [ Crash Pass ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-texture-binding-preserved.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-viewport-parameters-preserved.html [ Failure ] +crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/yuv-video-on-accelerated-canvas.html [ Crash Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/zero-size-fill-rect.html [ Crash Pass ] crbug.com/591099 virtual/enable_wasm/external/wpt/wasm/wasm_local_iframe_test.html [ Crash Pass Timeout ] +crbug.com/591099 virtual/enable_wasm/external/wpt/wasm/wasm_serialization_tests.html [ Crash Pass ] +crbug.com/591099 virtual/enable_wasm/external/wpt/wasm/wasm_service_worker_test.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/12-55.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/182.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/2-comp.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/2-dht.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/23-55.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/182.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/2-comp.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/2-dht.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/23-55.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/55.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/alt-text-wrapping.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/animated-background-image-crash.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-jpeg-with-color-profile.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-clip-text.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cover.html [ Failure Pass ] +crbug.com/591099 virtual/exotic-color-space/images/animated-gif-fast-crash.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/animated-gif-with-offsets.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/animated-png.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-jpeg-with-color-profile.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-animate-rotate.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-clip-text.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cover.html [ Crash Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cross-fade.html [ Failure Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cross-fade.html [ Crash Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-repeat.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-space.html [ Failure Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-space.html [ Crash Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-image-source.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-image.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-radius.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-drag-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-clip.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-drag-image.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-filter.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-group.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-iframe.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-group.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-iframe.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas-pattern.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas.html [ Failure Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas.html [ Crash Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-filter-all.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-object-fit.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-profile-match.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-pseudo-content.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-shape.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-image.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer-filter.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-mask-image-svg.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-pseudo-content.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-shape.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-svg-resource-url.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer-filter.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-mask-image-svg.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-object.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-svg-foreign-object.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-svg.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/content-url-broken-image-with-alt-text.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/content-url-image-with-alt-text-dynamic-2.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/content-url-image-with-alt-text-dynamic.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/crash-bad-cast.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/crash-when-zoom-factor-changes.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-background-size.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-blending.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-broken-image.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-invalidation.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/cross-fade-overflow-position.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-overflow-position.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-simple.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/cross-fade-sizing.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-sizing.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-svg-fragments.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-svg-size-diff.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/cross-fade-svg-size.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/cross-fade-tiled.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-svg-size.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-tiled.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/destroyed-image-load-event.html [ Crash Failure ] -crbug.com/591099 virtual/exotic-color-space/images/drag-svg-image.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/embed-does-not-propagate-dimensions-to-object-ancestor.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/dispose-previous.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/dont-crash-with-null-gif-frames.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/drag-image-descendant-painting-sibling.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/drag-image-transformed-parent.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/drag-pdf-as-image.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/drag-svg-image.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/embed-does-not-propagate-dimensions-to-object-ancestor.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/embed-image.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-css.html [ Crash Failure ] -crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-height-image-document.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-height-image-document.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-image-document.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/exif-orientation.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/extra-image-in-image-document.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/favicon-as-image.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/gif-loop-count.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/gif-short-app-extension-string.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/favicon-as-image.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gif-loop-count.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gif-short-app-extension-string.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/gray-scale-jpeg-with-color-profile.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/gray-scale-png-with-color-profile.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gray-scale-png-with-color-profile.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/icon-0colors.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/icon-decoding.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-change-src.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/image-change-without-resize-shouldnt-layout.html [ Crash Pass ] -crbug.com/591099 virtual/exotic-color-space/images/image-click-scale-restore-zoomed-image.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-css3-content-data.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-document-write-assert.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-click-scale-restore-zoomed-image.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-css3-content-data.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-document-write-assert.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-empty-data.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-hover-display-alt.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-in-map.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-invalid-data.html [ Crash Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-load-event-in-fragment.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-load-event-in-fragment.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-map-anchor-children.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple-xhtml.xhtml [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple-xhtml.xhtml [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom-alt-content.html [ Crash Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-page-injected-script-crash.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-use-counters.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-25.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-500.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-500.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-circle-focus-ring.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zoom.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zoom-style-default-shape.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zoom-style.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zoom.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-polygon-focus-ring.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/imagemap-scroll.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/img-dimensions-styled.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/invalid-image-url-crash.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/jpeg-with-color-profile.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-image-decoding.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-image.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/link-body-content-imageDimensionChanged-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas.html [ Crash Failure Pass ] +crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-image.html [ Crash Failure Pass ] +crbug.com/591099 virtual/exotic-color-space/images/link-body-content-imageDimensionChanged-crash.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/load-img-with-empty-src.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/motion-jpeg-single-frame.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/mask-box-image-crash.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/motion-jpeg-single-frame.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/move-image-to-new-document.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/multiple-inflight-error-event-crash.html [ Crash Pass ] -crbug.com/591099 virtual/exotic-color-space/images/pdf-as-background.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/natural-dimensions-correct-after-image-reset.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/onload-event-when-reloading-image-after-interrupted-broken-image-load.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/onload-event-when-reloading-image-after-interrupted-null-src-load.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/onload-event-when-reloading-image-after-successful-image-load.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/optimize-contrast-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/optimize-contrast-image.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/paint-subrect-grid.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/paletted-png-with-color-profile.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/pdf-as-background.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/pdf-as-tiled-background.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/percent-height-image.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/pixel-crack-image-background-webkit-transform-scale.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/png-extra-row-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/percentage-height-image-with-auto-height-container-computes-as-percentage.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/pixel-crack-image-background-webkit-transform-scale.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/pixelated-border-image.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/pixelated-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/pixelated-hidpi.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/pixelated-image.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/pixelated-svg-image.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/png-color-profile-ignore-gamma.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/png-extra-row-crash.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/png-missing-plte-before-trns-crash.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/png-suite/test.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/png-with-color-profile.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/png_per_row_alpha_decoding.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/read-past-end-of-buffer.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images-quirk.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-10px-images.html [ Crash Failure ] @@ -20682,83 +20998,113 @@ crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-block-flow-images.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images-empty-alt.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images.html [ Crash Failure ] -crbug.com/591099 virtual/exotic-color-space/images/script-counter-imageDimensionChanged-crash.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/sprite-no-bleed.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/script-counter-imageDimensionChanged-crash.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/size-failure.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/sprite-no-bleed.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-crash.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-style-freeze.html [ Crash Pass ] -crbug.com/591099 virtual/exotic-color-space/images/text-content-crash-2.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/text-content-crash-2.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/text-content-crash.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/update-alt-text.html [ Crash Pass ] -crbug.com/591099 virtual/exotic-color-space/images/viewport-in-standalone-image-document.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/viewport-in-standalone-image-document.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/webgl-teximage2d.html [ Crash Pass ] -crbug.com/591099 virtual/exotic-color-space/images/webp-flip.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/zoomed-img-size.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/webp-color-profile-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/webp-color-profile-lossless.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/webp-color-profile-lossy-alpha.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/webp-color-profile-lossy.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/webp-flip.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/webp-image-decoding.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/zoomed-img-height-acid3.html [ Crash Pass ] +crbug.com/591099 virtual/exotic-color-space/images/zoomed-img-size.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/zoomed-offset-size.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/12-55.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/182.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/2-comp.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/2-dht.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/23-55.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/182.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/2-comp.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/2-dht.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/23-55.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/55.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/alt-text-wrapping.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/animated-background-image-crash.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-jpeg-with-color-profile.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-cover.html [ Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/animated-gif-advance-frames.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/animated-gif-fast-crash.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/animated-gif-with-offsets.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/animated-png.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/cHRM_color_spin.html [ Crash ] +crbug.com/591099 virtual/gpu-rasterization/images/color-jpeg-with-color-profile.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-clip-text.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-cover.html [ Crash Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png.html [ Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-cross-fade.html [ Crash Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-repeat.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-space.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-image-source.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-radius.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-drag-image.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-space.html [ Crash Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-image-source.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-radius.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-drag-image.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-filter.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-group.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-iframe.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas-pattern.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-object-fit.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-profile-match.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-pseudo-content.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-iframe.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas-pattern.html [ Crash Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas-svg.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas.html [ Crash Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-object-fit.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-profile-match.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-pseudo-content.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-shape.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-svg-resource-url.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer-filter.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer.html [ Failure Timeout ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-svg-foreign-object.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer-filter.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer.html [ Crash Failure Timeout ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-object.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-reflection.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-svg-foreign-object.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/content-url-image-with-alt-text-dynamic-2.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/content-url-image-with-alt-text.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/crash-when-fallback-content-deleted.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/crash-when-zoom-factor-changes.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-background-size.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-blending.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-invalidation.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-overflow-position.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-simple.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-sizing.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-broken-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-invalidation.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-overflow-position.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-simple.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-sizing.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-svg-fragments.html [ Crash ] crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-tiled.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/destroyed-image-load-event.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/drag-svg-image.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/embed-does-not-propagate-dimensions-to-object-ancestor.html [ Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/drag-image-2.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/drag-image-transformed-child.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/drag-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/drag-svg-image.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/embed-does-not-propagate-dimensions-to-object-ancestor.html [ Crash Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/exif-orientation-css.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/exif-orientation-height-image-document.html [ Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/exif-orientation-height-image-document.html [ Crash Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/exif-orientation-image-document.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/exif-orientation.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/extra-image-in-image-document.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/favicon-as-image.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/extra-image-in-image-document.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/favicon-as-image.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/gif-loop-count.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/gif-short-app-extension-string.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/gray-scale-jpeg-with-color-profile.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/gray-scale-png-with-color-profile.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/gif-short-app-extension-string.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/gray-scale-jpeg-with-color-profile.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/gray-scale-png-with-color-profile.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/icon-0colors.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/icon-decoding.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-change-src.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/image-change-without-resize-shouldnt-layout.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/image-click-scale-restore-zoomed-image.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-css3-content-data.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/image-document-write-assert.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/image-document-write-assert.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-empty-data.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-hover-display-alt.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-in-map.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-invalid-data.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/image-load-event-in-fragment.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/image-load-event-in-fragment.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-map-anchor-children.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-map-multiple-xhtml.xhtml [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-map-multiple.html [ Failure ] @@ -20767,38 +21113,53 @@ crbug.com/591099 virtual/gpu-rasterization/images/image-page-injected-script-crash.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/image-use-counters.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/image-zoom-to-25.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/image-zoom-to-500.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/image-zoom-to-500.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-circle-focus-ring.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/imagemap-duplicate-outlines-crash.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/imagemap-dynamic-area-updates.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-not-inherited-from-map.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-zero-outline-width.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-zoom.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring-zoom.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-focus-ring.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/imagemap-polygon-focus-ring.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/imagemap-polygon-focus-ring.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/imagemap-scroll.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/img-dimensions-styled.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/invalid-image-url-crash.html [ Crash Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/jpeg-yuv-image-decoding.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/jpeg-yuv-progressive-canvas.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/jpeg-yuv-progressive-image.html [ Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/jpeg-with-color-profile.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/jpeg-yuv-image-decoding.html [ Crash Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/jpeg-yuv-progressive-canvas.html [ Crash Failure Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/jpeg-yuv-progressive-image.html [ Crash Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/link-body-content-imageDimensionChanged-crash.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/load-img-with-empty-src.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/motion-jpeg-single-frame.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/load-img-with-empty-src.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/motion-jpeg-single-frame.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/move-image-to-new-document.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/multiple-inflight-error-event-crash.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/natural-dimensions-correct-after-image-reset.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/object-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/onload-event-when-reloading-image-after-interrupted-broken-image-load.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/onload-event-when-reloading-image-after-interrupted-null-src-load.html [ Crash ] +crbug.com/591099 virtual/gpu-rasterization/images/optimize-contrast-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/paint-subrect-grid.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/paletted-png-with-color-profile.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/pdf-as-background.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/pdf-as-tiled-background.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/percent-height-image.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/pdf-as-tiled-background.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/percent-height-image.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/percentage-height-image-with-auto-height-container-computes-as-percentage.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/pixel-crack-image-background-webkit-transform-scale.html [ Crash Failure Timeout ] +crbug.com/591099 virtual/gpu-rasterization/images/pixelated-background-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/pixelated-border-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/pixelated-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/pixelated-svg-image.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/png-extra-row-crash.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/png-suite/test.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/png_per_row_alpha_decoding.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/png_per_row_alpha_decoding.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-0px-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-10px-images.html [ Crash Failure ] @@ -20807,17 +21168,22 @@ crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-block-flow-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-images-empty-alt.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-images.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/rgb-jpeg-endian-pixels.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/script-counter-imageDimensionChanged-crash.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/size-failure.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/sprite-no-bleed.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/style-access-during-imageChanged-crash.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/style-access-during-imageChanged-style-freeze.html [ Crash Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/text-content-crash-2.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/text-content-crash-2.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/text-content-crash.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/update-alt-text.html [ Crash Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/viewport-in-standalone-image-document.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/viewport-in-standalone-image-document.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/webgl-teximage2d.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/webp-animation.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/webp-color-profile-lossless.html [ Crash Pass ] +crbug.com/591099 virtual/gpu-rasterization/images/webp-color-profile-lossy-alpha.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/webp-flip.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/zoomed-img-size.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/zoomed-img-size.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/zoomed-offset-size.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/2d.composite.globalAlpha.fillPath.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/2d.fillText.gradient.html [ Crash Pass ] @@ -20825,14 +21191,37 @@ crbug.com/591099 virtual/gpu/fast/canvas/2d.text.draw.fill.maxWidth.negative.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/2d.text.draw.fill.maxWidth.verySmall.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/CanvasRendering2D-prototype-chain.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-2d-drawImage-no-context.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-2d-globalAlpha.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageSmoothing-in-worker.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-ImageBitmapSource.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-commit-frameless-doc.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-commit-promise.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-commit-retains-backing.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-constructor-in-worker.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-currentColor.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-filter-in-worker.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-opaque-background-compositing.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-paths-in-worker.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-placeholder-image-source-with-worker.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-resize.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-transferToImageBitmap-state-persistency.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-transferable-exceptions.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-transferable.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-transform-shadow-in-worker.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-webgl-preserveDrawingBuffer.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/access-zero-sized-canvas.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/alpha.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/arc-crash.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/arc360.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/bidi-multi-run.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/bug445162.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/bug532148.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/bug535171.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/bug544329.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-2d-clip-anti-aliasing.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-ImageBitmap-close.html [ Failure ] @@ -20842,35 +21231,53 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-ImageData-workers.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-after-destroy-iframe.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-alphaImageData-behavior.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-arc-360-winding.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-arc-connecting-line.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-arc-zero-lineto.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-before-css.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-bezier-same-endpoint.html [ Crash Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-image-over-image.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-color-over-pattern.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-gradient-over-color.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-gradient-over-pattern.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-image-over-image.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-image-over-pattern.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-pattern-over-gradient.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-pattern-over-image.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-text.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-clip-stack-persistence.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-closePath-single-point.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-composite-alpha.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-composite-canvas.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-composite-image.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-composite-stroke-alpha.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-composite-text-alpha.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-composite-video.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-context-attributes-default-value.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-animated.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-blob-in-workers.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-createPattern.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-data-in-workers.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-data-in-workers.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-data-preserves-alpha.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage-video.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage.html [ Timeout ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage.html [ Crash Timeout ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-immutable.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-args.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-args.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-recursive.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-resize.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-svg.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-svg.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-webgl.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createPattern-fillRect-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-currentColor.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-direction.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-draw-canvas-on-canvas-shadow.html [ Crash Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-animated-images.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-animated-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-animated.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-incomplete.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-live-video.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-ellipse-360-winding.html [ Crash Pass ] @@ -20886,22 +21293,32 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-fillRect-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-fill-liveness.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-fill-paint-color.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-fill-paint-gradient.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-fill-paint-gradient.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-fill-paint-pattern.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-frameless-document.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-liveness.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-modified.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-multiple-drop-shadows.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-origin-clean.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-stroke-liveness.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-stroke-paint-color.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-stroke-paint-color.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-stroke-paint-gradient.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-stroke-paint-pattern.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-stroke-paint-pattern.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-svg-bbox.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-svg-inline.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-svg-liveness.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-svg-off-screen.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-width-height-hidpi-scale.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-svg-off-screen.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-undefined-then-defined.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-width-height-hidpi-scale.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-width-height-hidpi.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-width-height-scale.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-width-height-scale.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-filter-width-height.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-font-cache.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-getImageData-invalid.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-getImageData-negative-source.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-gradient-without-path.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-hides-fallback.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-hidpi-blurry.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-accessibility-test.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-basic-test.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-clear-test.html [ Crash Pass ] @@ -20918,11 +21335,17 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-path2d-transform-test.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-scale-factor.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-transform-test.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-patterns.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-zero-size.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingQuality.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-incremental-repaint-3.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-fillstyle.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-strokestyle.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-values.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-video.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-isPointInPath-winding.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-isPointInStroke-with-path.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-isPointInStroke.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-large-dimensions.html [ Crash Pass ] @@ -20932,19 +21355,28 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-lineWidth-intact-after-strokeRect.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-lost-gpu-context.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-measure-bidi-text.html [ Failure Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-measureText.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-messagechannel-imagebitmap-transfer.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-negative-size.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-normalize-string.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-no-alpha-invalidation.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-normalize-string.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-overloads-strokeText.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-addpath.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-constructors.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-context-clip.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-context-fill.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-context-stroke.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-object.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-path-with-inf-nan-dimensions.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-pattern-behaviour.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-pattern-no-repeat-with-transformations.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-pattern-set-transform.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-putImageData.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-quadratic-same-endpoint.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-render-layer.html [ Failure Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-resetTransform.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-resize-after-paint.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-save-restore.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-scale-drawImage-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-scale-fillPath-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-scale-fillRect-shadow.html [ Crash Pass ] @@ -20953,71 +21385,348 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-scroll-path-into-view.html [ Failure Timeout ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-set-properties-with-non-invertible-ctm.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-shadow-source-in.html [ Failure Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-skia-excessive-size.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-state-persistence-no-dirty.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokePath-alpha-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokePath-cap-join.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokePath-gradient-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokePath-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokeRect-alpha-shadow.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokeRect-gradient-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-style-intact-after-text.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-baseline.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-ideographic-space.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-space-characters.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-textMetrics-width.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-during-path.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-toBlob-case-insensitive-mimetype.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-toBlob-invalid.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-toBlob-jpeg-medium-quality.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-toDataURL-crash.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-toDataURL-jpeg-maximum-quality.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-toDataURL-webp-alpha.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-transform-nan.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-during-path.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-fillRect-shadow.html [ Crash Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/currentTransform-null.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas-with-illegal-args.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/canvasDrawingIntoSelf.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/canvas_arc_largeangles.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/change-context.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/color-space/display_linear-rgb.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/currentTransform-null.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/downsample-quality.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed-invisible-crash.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed-on-event.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed-with-path2d.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/drawImage-with-bad-canvas.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/drawImage-with-negative-source-destination.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/drawImage-with-valid-image.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/fallback-content.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/feimage-with-foreignobject-taint-canvas-2.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/feimage-with-foreignobject-taint-canvas.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/fill-stroke-clip-reset-path.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/fillText-shadow.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/fillrect-gradient-zero-stops.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/fillrect_gradient.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/font-no-zoom.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/font-update.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/getPutImageDataPairTest.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/gradient-addColorStop-with-invalid-offset.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/gradient-with-clip.html [ Crash Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/image-object-in-canvas.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/image-object-in-canvas.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/image-pattern-rotate.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/image-with-foreignobject-taint-canvas-2.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/image-with-foreignobject-taint-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/imagebitmap/transferFromImageBitmap-alpha.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/invalid-set-font-crash.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/linearGradient-infinite-values.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/painting-on-bad-canvas.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/pattern-with-transform.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/patternfill-repeat.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/pixelated-off-screen.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/quadraticCurveTo.xml [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/resize-while-save-active.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/rgba-parsing.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/set-colors.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/set-empty-font-crash.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/setWidthResetAfterForcedRender.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/shadow-huge-blur.html [ Crash Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/shadow-offset-1.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/shadow-offset-1.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/text-globalAlpha.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/thin-drawImages.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/toDataURL-alpha.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/toDataURL-noData.html [ Crash Pass ] crbug.com/591099 virtual/gpu/fast/canvas/toDataURL-supportedTypes.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/transformed-canvas-reset.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/translate-text.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/unclosed-canvas-1.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/unclosed-canvas-3.html [ Crash Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/unclosed-canvas-4.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/webgl/canvas-getContext-crash.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/webgl/canvas-resize-crash.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/webgl/compressed-tex-image.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/unclosed-canvas-4.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/canvas-getContext-crash.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/canvas-resize-crash.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/canvas-to-data-url.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/compressed-tex-image.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/webgl/context-gc-custom-properties.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/webgl/renderer-and-vendor-strings.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/draw-webgl-to-canvas-2d.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/offscreenCanvas-APIs-NOT-alter-webgl-states.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/offscreenCanvas-context-lost-restored.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/offscreenCanvas-context-lost.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/offscreenCanvas-transferToImageBitmap-invalid-mailbox.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/offscreenCanvas-transferToImageBitmap-texImage2D.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/renderer-and-vendor-strings.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/webgl/shader-deleted-by-accessor.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/webgl/tex-sub-image-cube-maps.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-blob.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-canvas-resize.html [ Crash Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/webgl/texture-color-profile.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-texture-binding-preserved.html [ Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-canvas.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-image.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-blob.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-image.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-imageData.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-imageData.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-video-resize.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-video.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-transferable.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/texture-color-profile.html [ Crash Failure ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-composite-modes-repaint.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-composite-modes-tabswitching.html [ Crash Pass ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-error-response.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-layer-update.html [ Crash ] +crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-texture-binding-preserved.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/webgl/webgl-viewport-parameters-preserved.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/zero-size-fill-rect.html [ Crash Pass ] -crbug.com/591099 virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-all/text-on-backgrounds.html [ Failure ] +crbug.com/591099 virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-all/gradient-invert.html [ Crash Pass ] +crbug.com/591099 virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-all/image-invert.html [ Crash Pass ] +crbug.com/591099 virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-all/text-on-backgrounds.html [ Crash Failure ] +crbug.com/591099 virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-none/image-noinvert.html [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-004b.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-004c.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-004d.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-004e.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-005a.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-005b.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009e.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009f.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/adjacent-floats-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-002.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-003.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-000.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-004.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-005.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-009.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-012.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-015.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-float-003.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-float-004.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-float-005.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-float-007.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-initial-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-inline-001.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-006.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-002.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-005.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-008.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-009.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-013.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-015.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-non-replaced-width-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-non-replaced-width-003.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-non-replaced-width-004.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-non-replaced-width-007.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-non-replaced-width-009.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-non-replaced-width-011.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-height-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-height-003.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-height-005.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-height-006.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-height-007.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-002.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-003.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-004.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-006.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-007.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-002.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-005.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-007.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-015.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-019.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-023.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-026.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-030.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-031.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-036.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-038.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-101.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-112.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-116.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-119.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-120.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-121.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-122.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-136.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-139.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-142.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-143.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-144.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-149.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-153.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-018.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-024.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-035.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-123.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-134.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-142.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-166.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-clear-003.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-clear-016.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001a.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001c.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-003.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-004.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-left-002.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-right-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-right-002.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-001-right-table.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-002-right-table.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-003-left-table.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-003-right-overflow.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-003-right-table.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-004.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-005.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-006.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-bfc-001l.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-bfc-001r.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-bfc-003r.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-001r.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-002l.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-002r.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-003l.xht [ Crash ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-003r.xht [ Failure Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-zero-height-wrap-001.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/empty-inline-002.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/inline-box-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/inline-formatting-context-011.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/inline-formatting-context-015.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/inline-formatting-context-023.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/leading-001.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-016.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-018.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-035.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-037.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-039.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-040.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-048.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-049.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-050.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-059.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-061.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-072.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-079.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-083.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-084.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-093.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-095.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-102.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-105.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-126.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-129.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-applies-to-001.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-applies-to-006.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-applies-to-008.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/line-height-applies-to-013.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-004.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-008.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-019.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-020.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-032.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-065.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-067.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-076.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-088.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-089.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-091.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-092.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-100.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-104.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-109.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-110.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-117a.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-applies-to-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-applies-to-004.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-applies-to-005.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-applies-to-008.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-applies-to-013.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-baseline-007.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-baseline-008.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-sub-001.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-super-001.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-contexts-012.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-empty-004.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-001c.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-replaced-height-007.xht [ Crash Pass ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-replaced-width-006.xht [ Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/blocks-013.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/blocks-019.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/height-017.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/height-029.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/height-061.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/height-084.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/height-applies-to-009.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/height-percentage-003.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-height-002.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-008.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-replaced-width-013.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-table-width-001a.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-table-zorder-003.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inlines-016.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inlines-017.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-height-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-height-038.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-023.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-058.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-083.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-092.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-093.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-percentage-001.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-024.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-034.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-045.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-062.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-093.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-103.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-height-111.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-049.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-062.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-078.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-079.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-applies-to-016.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-006.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-058.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-068.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-091.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/absolute-non-replaced-height-004.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/absolute-non-replaced-width-018.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/absolute-replaced-height-016.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/absolute-replaced-width-003b.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-025.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/bottom-008.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/dynamic-top-change-004.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/left-019.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/right-030.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/right-101.xht [ Crash Pass ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/right-offset-004.xht [ Crash Pass ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-019.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-020.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-031.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-032.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-043.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-044.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-053.xht [ Crash ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-055.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-056.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-067.xht [ Crash Failure ] @@ -21029,19 +21738,189 @@ crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-103.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-104.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-113.xht [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/top-offset-003.xht [ Crash ] +crbug.com/591099 virtual/layout_ng/fast/block/basic/002.html [ Crash ] +crbug.com/591099 virtual/layout_ng/fast/block/basic/016.html [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/basic/adding-near-anonymous-block.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/basic/fieldset-stretch-to-legend.html [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/basic/minheight.html [ Crash ] +crbug.com/591099 virtual/layout_ng/fast/block/basic/quirk-percent-height-table-cell.html [ Crash ] crbug.com/591099 virtual/layout_ng/fast/block/float/002.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/014.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/017.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/assert-when-moving-float.html [ Failure ] -crbug.com/591099 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/floats-offset-image-quirk-line-height.html [ Crash Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/overhanging-float-add-in-static-position-block.html [ Failure Pass ] crbug.com/591099 virtual/layout_ng/fast/block/float/overhanging-float-add-in-static-position-block2.html [ Failure Pass ] +crbug.com/591099 virtual/layout_ng/fast/block/float/previous-sibling-abspos-002.html [ Crash ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-made-inline-crash.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash-2.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/margin-collapse/line-beside-float-complex-margin-collapsing.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-creates-block-formatting-context.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/canvas/canvas-filter-svg-external-multiple.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/cookies/multiple-cookies.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/credentialmanager/credentialscontainer-frame-errors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/dom/mutationobserver-parserappend-childlist.php [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/dom/script-module-load-incomplete-no-crash.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/download/default-encoding.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/eventsource-cors-redirect.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/eventsource-reconnect-during-navigate-crash.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/eventsource-retry-precision.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/workers/eventsource-cors-basic.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/workers/eventsource-cors-with-credentials.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/workers/eventsource-eof.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/eventsource/workers/eventsource-url-attribute.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy-relocate-and-no-reload.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/feature-policy-experimental-features/vibrate-allowed-by-container-policy.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/feature-policy/fullscreen-allowed-by-container-policy-relocate.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/feature-policy/fullscreen-disabled.php [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/feature-policy/payment-allowed-by-container-policy.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/feature-policy/payment-enabledforself.php [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/chromium/data-saver.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/chromium/discarded-window.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/chromium/mime-sniffing.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/referrer/origin-when-cross-origin-dedicated-worker.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/referrer/serviceworker-from-origin-only-document.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/access-control.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/nocors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/cache-override-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/filtered-response-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/filtered-response-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/headers-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/headers-guard-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/headers-guard.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/referrer-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/request-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/response-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/response-content-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/response-content.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/response.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/stream-reader.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/access-control-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-nocors-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-nocors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight2-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight2-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight2.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/nocors-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/nocors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-credentials-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-credentials.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-loop-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-loop.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-nocors.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-password-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-data-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-data.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/block-mixed-content-nocors-base-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/body-mixin-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/cache-override.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/fetch-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/fetch.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/filtered-response-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/headers-guard-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/headers.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/pageimportancesignals.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/referrer-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/referrer.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/request.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/response-content.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/stream-reader-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/access-control-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/auth-nocors.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cookie-nocors-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cookie.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cors-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight2.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/cors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/nocors-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/nocors-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-credentials-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-credentials-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-credentials.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-loop-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-loop.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-nocors-base-https-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-password-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-password-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-blob-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-blob.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-data-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/body-mixin-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/body-mixin.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/filtered-response.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/headers-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/request-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/request.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/stream-reader.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-nocors-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight2-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/cors.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-loop-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-nocors-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-other-https.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-password-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-blob-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-data-base-https-other-https.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/history/post-replace-state-reload.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/history/push-state-in-grandchild-after-reload.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/history/redirect-303.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/history/redirect-307.html [ Crash Pass ] +crbug.com/591099 virtual/mojo-loading/http/tests/history/redirect-js-location-assign-before-load.html [ Crash ] +crbug.com/591099 virtual/mojo-loading/http/tests/history/redirect-meta-refresh-0-seconds.html [ Crash ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector-protocol/network/disable-interception-midway.html [ Failure Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/appcache/appcache-iframe-manifests.html [ Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/application-panel/storage-view-reports-quota.html [ Failure Pass Timeout ] @@ -21625,23 +22504,23 @@ crbug.com/591099 virtual/threaded/animations/3d/change-transform-in-end-event.html [ Failure Pass ] crbug.com/591099 virtual/threaded/animations/3d/state-at-end-event-transform.html [ Failure Pass ] crbug.com/591099 virtual/threaded/animations/animation-css-rule-types.html [ Failure ] -crbug.com/591099 virtual/threaded/animations/events/animation-events-create.html [ Failure ] crbug.com/591099 virtual/threaded/animations/animations-parsing.html [ Timeout ] -crbug.com/591099 virtual/threaded/animations/responsive/animations-responsive-to-color-change.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/svg/clear-svg-animation-effects.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/composition/background-position-composition.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/composition/caret-color-composition.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/composition/stroke-dasharray-composition.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/computed-style.html [ Failure ] -crbug.com/591099 virtual/threaded/animations/svg/css-animation-overrides-svg-presentation-attribute-animation.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/events/delay-start-event.html [ Failure ] crbug.com/591099 virtual/threaded/animations/display-change-does-not-terminate-animation.html [ Crash Failure ] crbug.com/591099 virtual/threaded/animations/display-inline-style-adjust.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/animations/display-none-cancel-computedstyle.html [ Failure ] crbug.com/591099 virtual/threaded/animations/display-none-terminates-animation.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/events/animation-events-create.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/events/delay-start-event.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/events/negative-delay-events.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/events/play-state-initially-paused-start-event.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/font-size-using-ems.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/hit-testing/inline-element-animation-end-hit-test.html [ Failure ] crbug.com/591099 virtual/threaded/animations/img-element-transform.html [ Crash Pass Timeout ] crbug.com/591099 virtual/threaded/animations/inline-block-transform.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/hit-testing/inline-element-animation-end-hit-test.html [ Failure ] crbug.com/591099 virtual/threaded/animations/interpolation/backdrop-filter-interpolation.html [ Crash Timeout ] crbug.com/591099 virtual/threaded/animations/interpolation/background-color-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/interpolation/background-image-interpolation.html [ Crash Timeout ] @@ -21728,14 +22607,19 @@ crbug.com/591099 virtual/threaded/animations/interpolation/webkit-transform-origin-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/keyframes-rule.html [ Failure ] crbug.com/591099 virtual/threaded/animations/lazy-detached-animation-stop.html [ Failure ] -crbug.com/591099 virtual/threaded/animations/events/negative-delay-events.html [ Failure ] -crbug.com/591099 virtual/threaded/animations/events/play-state-initially-paused-start-event.html [ Failure ] crbug.com/591099 virtual/threaded/animations/play-state.html [ Failure ] crbug.com/591099 virtual/threaded/animations/prefixed/animation-inherit-initial-unprefixed.html [ Failure ] crbug.com/591099 virtual/threaded/animations/prefixed/keyframes-cssom-prefixed-02.html [ Failure ] crbug.com/591099 virtual/threaded/animations/prefixed/keyframes-cssom-unprefixed-02.html [ Failure ] +crbug.com/591099 virtual/threaded/animations/responsive/animations-responsive-to-color-change.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/responsive/interpolation/d-responsive.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/responsive/interpolation/line-height-responsive.html [ Pass Timeout ] +crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-d-responsive.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-points-responsive.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-tableValues-responsive.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-transform-responsive.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-x-list-responsive.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/responsive/svg-responsive-to-timing-updates.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/rotate-transform-equivalent.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/animations/skew-notsequential-compositor.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/animations/stability/animation-end-event-destroy-renderer.html [ Failure ] @@ -21881,7 +22765,7 @@ crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-specularConstant-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-specularExponent-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-spreadMethod-interpolation.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-startOffset-interpolation.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-startOffset-interpolation.html [ Crash Failure Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-stdDeviation-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-stitchTiles-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-surfaceScale-interpolation.html [ Crash Pass ] @@ -21900,13 +22784,9 @@ crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-xChannelSelector-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-y-list-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg-attribute-interpolation/svg-z-interpolation.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-d-responsive.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-points-responsive.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-tableValues-responsive.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-transform-responsive.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/responsive/interpolation/svg-x-list-responsive.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/svg/clear-svg-animation-effects.html [ Crash Pass ] +crbug.com/591099 virtual/threaded/animations/svg/css-animation-overrides-svg-presentation-attribute-animation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/svg/svg-presentation-attribute-animation.html [ Crash Pass ] -crbug.com/591099 virtual/threaded/animations/responsive/svg-responsive-to-timing-updates.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/timing/timing-model.html [ Pass Timeout ] crbug.com/591099 virtual/threaded/compositing/visibility/compositing-and-visibility-turned-off-together.html [ Failure ] crbug.com/591099 virtual/threaded/compositing/visibility/hidden-iframe.html [ Failure ] @@ -21956,7 +22836,7 @@ crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-js-line-level-profile.html [ Crash Pass ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-microtasks.html [ Crash Failure ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-open-function-call.html [ Failure ] -crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure ] +crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure Pass ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-script-id.html [ Crash Failure ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-script-tag-1.html [ Crash Failure ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-js/timeline-script-tag-2.html [ Crash Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 index 9a2c7a75..8cde25c 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
@@ -112,7 +112,6 @@ Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering.html [ Failure ] Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering.html [ Failure ] Bug(none) virtual/new-remote-playback-pipeline/media/controls/controls-cast-do-not-fade-out.html [ Failure Crash ] -Bug(none) svg/foreignObject/overflow-clip-in-hidden-container-crash.html [ Crash ] Bug(none) images/rendering-broken-0px-images.html [ Failure ] Bug(none) images/rendering-broken-0px-images-quirk.html [ Failure ] Bug(none) paint/invalidation/overflow-hidden-to-visible.html [ Pass Failure ] @@ -999,7 +998,7 @@ Bug(none) paint/invalidation/iframe-scroll-repaint.html [ Failure ] Bug(none) paint/invalidation/repaint-subrect-grid.html [ Failure ] Bug(none) paint/invalidation/scrolled-iframe-scrollbar-change.html [ Failure ] -Bug(none) paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only.html [ Crash ] +Bug(none) paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only.html [ Crash Failure ] Bug(none) paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ] Bug(none) paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ] Bug(none) paint/invalidation/svg/use-detach.svg [ Failure ] @@ -1251,7 +1250,6 @@ crbug.com/707444 svg/batik/masking/maskRegions.svg [ Failure ] crbug.com/707444 svg/custom/clamped-masking-clipping.svg [ Failure ] crbug.com/707444 svg/custom/clip-mask-negative-scale.svg [ Failure ] -crbug.com/707444 svg/custom/mask-colorspace.svg [ Failure ] crbug.com/707444 svg/custom/mask-inside-defs.svg [ Failure ] # Subpixel differences @@ -1262,7 +1260,6 @@ Bug(none) svg/custom/absolute-root-position-masking.xhtml [ Failure ] Bug(none) svg/custom/grayscale-gradient-mask-2.svg [ Failure ] Bug(none) svg/custom/grayscale-gradient-mask.svg [ Failure ] -Bug(none) svg/custom/mask-changes.svg [ Failure ] Bug(none) svg/custom/recursive-mask.svg [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-dom-height-attr.html [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr.html [ Failure ] @@ -1476,63 +1473,63 @@ Bug(none) fast/events/overflow-composited-scroll-fake-mouse-move.html [ Skip ] -crbug.com/654554 compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-coarse.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-ru.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/month-picker-appearance-step.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/month-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/week-picker-appearance-step.html [ Crash Timeout ] -crbug.com/654554 fast/forms/calendar-picker/week-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Crash Timeout ] -crbug.com/654554 fast/forms/color/color-suggestion-picker-appearance-zoom200.html [ Crash Timeout ] -crbug.com/654554 fast/forms/color/color-suggestion-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-empty.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-long.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-many.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-minimum-font.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-rtl-default.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-rtl.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-single-option.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-styled.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-tall.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-transform.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-zoom.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-zoom110.html [ Timeout Crash ] -crbug.com/654554 fast/forms/select-popup/popup-menu-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/select/input-select-after-resize.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout ] -crbug.com/654554 fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Crash Timeout ] +crbug.com/654554 compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-coarse.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-ru.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/calendar-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/month-picker-appearance-step.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/month-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/week-picker-appearance-step.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/calendar-picker/week-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/color/color-suggestion-picker-appearance-zoom200.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/color/color-suggestion-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-empty.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-long.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-many.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-minimum-font.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-rtl-default.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-rtl.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-single-option.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-styled.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-tall.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-transform.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-zoom.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance-zoom110.html [ Timeout Crash Failure ] +crbug.com/654554 fast/forms/select-popup/popup-menu-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/select/input-select-after-resize.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Crash Timeout Failure ] +crbug.com/654554 fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Crash Timeout Failure ] crbug.com/667071 svg/foreignObject/vertical-foreignObject.html [ Failure ] @@ -1647,9 +1644,8 @@ # composite animations that paint nothing. For now we mark this test as failing, # and can explore enhancing animation test infrastructure or other # approaches. http://crbug.com/692310#c12 -crbug.com/692310 virtual/threaded/animations/composited-animations-rotate-zero-degrees.html [ Failure ] +crbug.com/692310 virtual/threaded/animations/composited-animations-rotate-zero-degrees.html [ Failure Timeout ] -Bug(none) virtual/threaded/animations/3d/change-transform-in-end-event.html [ Failure ] Bug(none) virtual/threaded/animations/svg-attribute-composition/svg-startOffset-composition.html [ Failure ] # Compositor Worker logic has not yet been fully ported to SPv2. @@ -1676,12 +1672,12 @@ Bug(700530) compositing/geometry/abs-position-inside-opacity.html [ Failure ] Bug(700530) fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk.html [ Failure ] -# The following debug crashes have not been triaged. -crbug.com/702805 virtual/threaded/compositing/visibility/overlays-persist-on-navigation.html [ Crash ] -crbug.com/702805 svg/filters/feImage-self-referencing.html [ Crash ] -crbug.com/702805 svg/filters/feImage-self-and-other-referencing.html [ Crash ] -crbug.com/702805 fast/forms/select-popup/popup-menu-appearance-coarse.html [ Crash Timeout ] -crbug.com/702805 compositing/visibility/overlays-persist-on-navigation.html [ Crash ] +# The following debug crashes / failures have not been triaged. +crbug.com/702805 virtual/threaded/compositing/visibility/overlays-persist-on-navigation.html [ Crash Failure ] +crbug.com/702805 svg/filters/feImage-self-referencing.html [ Crash Failure ] +crbug.com/702805 svg/filters/feImage-self-and-other-referencing.html [ Crash Failure ] +crbug.com/702805 fast/forms/select-popup/popup-menu-appearance-coarse.html [ Crash Timeout Failure ] +crbug.com/702805 compositing/visibility/overlays-persist-on-navigation.html [ Crash Failure ] crbug.com/730284 images/color-profile-border-radius.html [ Failure ] crbug.com/730284 images/color-profile-image-shape.html [ Failure ] @@ -1699,10 +1695,10 @@ crbug.com/730284 fast/replaced/border-radius-clip.html [ Failure ] # Paint property under-invalidation -crbug.com/728913 paint/invalidation/svg/js-late-mask-and-object-creation.svg [ Crash ] -crbug.com/728913 paint/invalidation/svg/mask-clip-target-transform.svg [ Crash ] -crbug.com/728913 paint/invalidation/svg/resource-invalidate-on-target-update.svg [ Crash ] -crbug.com/728913 paint/invalidation/svg/js-late-mask-creation.svg [ Crash ] +crbug.com/728913 paint/invalidation/svg/js-late-mask-and-object-creation.svg [ Crash Failure ] +crbug.com/728913 paint/invalidation/svg/mask-clip-target-transform.svg [ Crash Failure ] +crbug.com/728913 paint/invalidation/svg/resource-invalidate-on-target-update.svg [ Crash Failure ] +crbug.com/728913 paint/invalidation/svg/js-late-mask-creation.svg [ Crash Failure ] # Check failed: layer_list_.empty() || *page_scale_factor == 1 crbug.com/706066 compositing/background-color/background-color-outside-document.html [ Crash Timeout ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls b/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls index 755bfcbd..c1e0ddc 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls +++ b/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls
@@ -461,7 +461,6 @@ Bug(none) inspector/layers/layer-tree-model.html [ Crash ] Bug(none) inspector/layers/no-overlay-layers.html [ Crash ] Bug(none) inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot.js [ Failure ] -Bug(none) inspector/device-mode/forced-viewport-far.html [ Failure ] Bug(none) inspector-protocol/layers/get-layers.js [ Crash ] Bug(none) inspector-protocol/layers/paint-profiler.js [ Crash ] Bug(none) inspector-protocol/page/get-layout-metrics.js [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests index e9406fde..f92cde6 100644 --- a/third_party/WebKit/LayoutTests/NeverFixTests +++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -824,7 +824,6 @@ external/wpt/viewport/viewport-scale-manual.html [ WontFix ] external/wpt/viewport/viewport-scroll-event-manual.html [ WontFix ] external/wpt/web-share/share-cancel-manual.html [ WontFix ] -external/wpt/web-share/share-empty-manual.html [ WontFix ] external/wpt/web-share/share-extra-argument-manual.html [ WontFix ] external/wpt/web-share/share-extra-field-manual.html [ WontFix ] external/wpt/web-share/share-non-string-manual.html [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index 91fc5cf..92f98e3 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -115,6 +115,30 @@ {} ] ], + "clipboard-apis/async-write-dttext-read-dttext-manual.https.html": [ + [ + "/clipboard-apis/async-write-dttext-read-dttext-manual.https.html", + {} + ] + ], + "clipboard-apis/async-write-dttext-read-text-manual.https.html": [ + [ + "/clipboard-apis/async-write-dttext-read-text-manual.https.html", + {} + ] + ], + "clipboard-apis/async-write-text-read-dttext-manual.https.html": [ + [ + "/clipboard-apis/async-write-text-read-dttext-manual.https.html", + {} + ] + ], + "clipboard-apis/async-write-text-read-text-manual.https.html": [ + [ + "/clipboard-apis/async-write-text-read-text-manual.https.html", + {} + ] + ], "console/console-count-logging-manual.html": [ [ "/console/console-count-logging-manual.html", @@ -4099,12 +4123,6 @@ {} ] ], - "web-share/share-empty-manual.html": [ - [ - "/web-share/share-empty-manual.html", - {} - ] - ], "web-share/share-extra-argument-manual.html": [ [ "/web-share/share-extra-argument-manual.html", @@ -4959,6 +4977,138 @@ {} ] ], + "css-paint-api/geometry-background-image-001.html": [ + [ + "/css-paint-api/geometry-background-image-001.html", + [ + [ + "/css-paint-api/geometry-background-image-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-background-image-002.html": [ + [ + "/css-paint-api/geometry-background-image-002.html", + [ + [ + "/css-paint-api/geometry-background-image-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-background-image-003.html": [ + [ + "/css-paint-api/geometry-background-image-003.html", + [ + [ + "/css-paint-api/geometry-background-image-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-background-image-tiled-001.html": [ + [ + "/css-paint-api/geometry-background-image-tiled-001.html", + [ + [ + "/css-paint-api/geometry-background-image-tiled-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-background-image-tiled-002.html": [ + [ + "/css-paint-api/geometry-background-image-tiled-002.html", + [ + [ + "/css-paint-api/geometry-background-image-tiled-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-background-image-tiled-003.html": [ + [ + "/css-paint-api/geometry-background-image-tiled-003.html", + [ + [ + "/css-paint-api/geometry-background-image-tiled-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-border-image-001.html": [ + [ + "/css-paint-api/geometry-border-image-001.html", + [ + [ + "/css-paint-api/geometry-border-image-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-border-image-002.html": [ + [ + "/css-paint-api/geometry-border-image-002.html", + [ + [ + "/css-paint-api/geometry-border-image-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-border-image-003.html": [ + [ + "/css-paint-api/geometry-border-image-003.html", + [ + [ + "/css-paint-api/geometry-border-image-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-border-image-004.html": [ + [ + "/css-paint-api/geometry-border-image-004.html", + [ + [ + "/css-paint-api/geometry-border-image-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/geometry-border-image-005.html": [ + [ + "/css-paint-api/geometry-border-image-005.html", + [ + [ + "/css-paint-api/geometry-border-image-005-ref.html", + "==" + ] + ], + {} + ] + ], "css-paint-api/invalid-image-constructor-error.html": [ [ "/css-paint-api/invalid-image-constructor-error.html", @@ -5127,6 +5277,270 @@ {} ] ], + "css-paint-api/paint2d-zoom.html": [ + [ + "/css-paint-api/paint2d-zoom.html", + [ + [ + "/css-paint-api/paint2d-zoom-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-001.html": [ + [ + "/css-paint-api/parse-input-arguments-001.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-002.html": [ + [ + "/css-paint-api/parse-input-arguments-002.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-003.html": [ + [ + "/css-paint-api/parse-input-arguments-003.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-004.html": [ + [ + "/css-paint-api/parse-input-arguments-004.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-005.html": [ + [ + "/css-paint-api/parse-input-arguments-005.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-006.html": [ + [ + "/css-paint-api/parse-input-arguments-006.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-007.html": [ + [ + "/css-paint-api/parse-input-arguments-007.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-008.html": [ + [ + "/css-paint-api/parse-input-arguments-008.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-009.html": [ + [ + "/css-paint-api/parse-input-arguments-009.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-010.html": [ + [ + "/css-paint-api/parse-input-arguments-010.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-011.html": [ + [ + "/css-paint-api/parse-input-arguments-011.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-012.html": [ + [ + "/css-paint-api/parse-input-arguments-012.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-013.html": [ + [ + "/css-paint-api/parse-input-arguments-013.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-014.html": [ + [ + "/css-paint-api/parse-input-arguments-014.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-015.html": [ + [ + "/css-paint-api/parse-input-arguments-015.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-016.html": [ + [ + "/css-paint-api/parse-input-arguments-016.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/parse-input-arguments-017.html": [ + [ + "/css-paint-api/parse-input-arguments-017.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/registered-properties-in-custom-paint.html": [ + [ + "/css-paint-api/registered-properties-in-custom-paint.html", + [ + [ + "/css-paint-api/parse-input-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/style-background-image.html": [ + [ + "/css-paint-api/style-background-image.html", + [ + [ + "/css-paint-api/style-background-image-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/style-before-pseudo.html": [ + [ + "/css-paint-api/style-before-pseudo.html", + [ + [ + "/css-paint-api/style-before-pseudo-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/style-first-letter-pseudo.html": [ + [ + "/css-paint-api/style-first-letter-pseudo.html", + [ + [ + "/css-paint-api/style-first-letter-pseudo-ref.html", + "==" + ] + ], + {} + ] + ], "css-paint-api/valid-image-after-load.html": [ [ "/css-paint-api/valid-image-after-load.html", @@ -33371,6 +33785,18 @@ {} ] ], + "css/css-position-3/position-sticky-grid.html": [ + [ + "/css/css-position-3/position-sticky-grid.html", + [ + [ + "/css/css-position-3/position-sticky-grid-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-position-3/position-sticky-left.html": [ [ "/css/css-position-3/position-sticky-left.html", @@ -65933,21 +66359,6 @@ {} ] ], - "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-expected.txt": [ - [ - {} - ] - ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object-expected.txt": [ - [ - {} - ] - ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object.js": [ - [ - {} - ] - ], "WebIDL/ecmascript-binding/es-exceptions/exceptions-expected.txt": [ [ {} @@ -65958,6 +66369,11 @@ {} ] ], + "WebIDL/ecmascript-binding/legacy-platform-object-expected.txt": [ + [ + {} + ] + ], "WebIDL/ecmascript-binding/sequence-conversion-expected.txt": [ [ {} @@ -68633,6 +69049,61 @@ {} ] ], + "css-paint-api/geometry-background-image-001-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-background-image-002-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-background-image-003-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-background-image-tiled-001-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-background-image-tiled-002-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-background-image-tiled-003-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-border-image-001-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-border-image-002-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-border-image-003-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-border-image-004-ref.html": [ + [ + {} + ] + ], + "css-paint-api/geometry-border-image-005-ref.html": [ + [ + {} + ] + ], "css-paint-api/invalid-image-constructor-error-ref.html": [ [ {} @@ -68703,6 +69174,31 @@ {} ] ], + "css-paint-api/paint2d-zoom-ref.html": [ + [ + {} + ] + ], + "css-paint-api/parse-input-arguments-ref.html": [ + [ + {} + ] + ], + "css-paint-api/style-background-image-ref.html": [ + [ + {} + ] + ], + "css-paint-api/style-before-pseudo-ref.html": [ + [ + {} + ] + ], + "css-paint-api/style-first-letter-pseudo-ref.html": [ + [ + {} + ] + ], "css-paint-api/valid-image-after-load-ref.html": [ [ {} @@ -74363,6 +74859,11 @@ {} ] ], + "css/css-position-3/position-sticky-grid-ref.html": [ + [ + {} + ] + ], "css/css-position-3/position-sticky-left-ref.html": [ [ {} @@ -81943,11 +82444,6 @@ {} ] ], - "css/geometry-1/historical-expected.txt": [ - [ - {} - ] - ], "css/geometry-1/interfaces-expected.txt": [ [ {} @@ -83228,11 +83724,6 @@ {} ] ], - "cssom-view/cssom-getBoundingClientRect-002-expected.txt": [ - [ - {} - ] - ], "cssom-view/cssom-getClientRects-002-expected.txt": [ [ {} @@ -94993,16 +95484,6 @@ {} ] ], - "html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/getter-expected.txt": [ - [ - {} - ] - ], - "html/semantics/embedded-content/media-elements/interfaces/TextTrackList/getter-expected.txt": [ - [ - {} - ] - ], "html/semantics/embedded-content/media-elements/interfaces/TrackEvent/createEvent-expected.txt": [ [ {} @@ -96573,11 +97054,26 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/resources/load-error-events-helpers.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/resources/load-error-events.py": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/resources/set-script-executed.js": [ [ {} ] ], + "html/semantics/scripting-1/the-script-element/resources/slow.py": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt": [ [ {} @@ -98318,6 +98814,11 @@ {} ] ], + "interfaces/clipboard.idl": [ + [ + {} + ] + ], "interfaces/cssom.idl": [ [ {} @@ -100153,6 +100654,11 @@ {} ] ], + "page-visibility/resources/iframe-with-subframes.html": [ + [ + {} + ] + ], "page-visibility/resources/pagevistestharness.js": [ [ {} @@ -100198,11 +100704,6 @@ {} ] ], - "payment-request/payment-request-canmakepayment-method.https.http": [ - [ - {} - ] - ], "payment-request/payment-request-response-id.html": [ [ {} @@ -100238,6 +100739,16 @@ {} ] ], + "performance-timeline/resources/worker-with-performance-observer.js": [ + [ + {} + ] + ], + "performance-timeline/worker-with-performance-observer-expected.txt": [ + [ + {} + ] + ], "pointerevents/OWNERS": [ [ {} @@ -117077,27 +117588,43 @@ {} ] ], - "WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html": [ + "WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js": [ [ - "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html", + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.html", + {} + ], + [ + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.worker.html", {} ] ], - "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html": [ + "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js": [ [ - "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html", + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.html", + {} + ], + [ + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.worker.html", {} ] ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object.html": [ + "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js": [ [ - "/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html", + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.html", + {} + ], + [ + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.worker.html", {} ] ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js": [ + "WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js": [ [ - "/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.html", + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.html", + {} + ], + [ + "/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.worker.html", {} ] ], @@ -117131,6 +117658,12 @@ {} ] ], + "WebIDL/ecmascript-binding/legacy-platform-object.html": [ + [ + "/WebIDL/ecmascript-binding/legacy-platform-object.html", + {} + ] + ], "WebIDL/ecmascript-binding/put-forwards.html": [ [ "/WebIDL/ecmascript-binding/put-forwards.html", @@ -118629,9 +119162,27 @@ {} ] ], - "clear-site-data/navigation.html": [ + "clear-site-data/navigation-insecure.html": [ [ - "/clear-site-data/navigation.html", + "/clear-site-data/navigation-insecure.html", + {} + ] + ], + "clear-site-data/navigation.https.html": [ + [ + "/clear-site-data/navigation.https.html", + {} + ] + ], + "clipboard-apis/async-interfaces.https.html": [ + [ + "/clipboard-apis/async-interfaces.https.html", + {} + ] + ], + "clipboard-apis/async-navigator-clipboard-basics.https.html": [ + [ + "/clipboard-apis/async-navigator-clipboard-basics.https.html", {} ] ], @@ -124729,6 +125280,16 @@ {} ] ], + "dom/events/EventTarget-constructible.any.js": [ + [ + "/dom/events/EventTarget-constructible.any.html", + {} + ], + [ + "/dom/events/EventTarget-constructible.any.worker.html", + {} + ] + ], "dom/events/EventTarget-dispatchEvent-returnvalue.html": [ [ "/dom/events/EventTarget-dispatchEvent-returnvalue.html", @@ -129525,6 +130086,12 @@ {} ] ], + "hr-time/timing-attack.html": [ + [ + "/hr-time/timing-attack.html", + {} + ] + ], "hr-time/window-worker-time-origin.html": [ [ "/hr-time/window-worker-time-origin.html", @@ -135019,9 +135586,21 @@ {} ] ], - "html/semantics/scripting-1/the-script-element/load-event.html": [ + "html/semantics/scripting-1/the-script-element/load-error-events-1.html": [ [ - "/html/semantics/scripting-1/the-script-element/load-event.html", + "/html/semantics/scripting-1/the-script-element/load-error-events-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/load-error-events-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/load-error-events-2.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/load-error-events-3.html": [ + [ + "/html/semantics/scripting-1/the-script-element/load-error-events-3.html", {} ] ], @@ -135171,6 +135750,18 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/load-error-events.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/load-error-events.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html": [ [ "/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html", @@ -149551,6 +150142,12 @@ {} ] ], + "page-visibility/iframe-unload.html": [ + [ + "/page-visibility/iframe-unload.html", + {} + ] + ], "page-visibility/prerender_call.html": [ [ "/page-visibility/prerender_call.html", @@ -149695,6 +150292,12 @@ {} ] ], + "payment-request/payment-request-canmakepayment-method.https.html": [ + [ + "/payment-request/payment-request-canmakepayment-method.https.html", + {} + ] + ], "payment-request/payment-request-constructor-crash.https.html": [ [ "/payment-request/payment-request-constructor-crash.https.html", @@ -149831,6 +150434,12 @@ {} ] ], + "performance-timeline/worker-with-performance-observer.html": [ + [ + "/performance-timeline/worker-with-performance-observer.html", + {} + ] + ], "pointerevents/extension/idlharness.html": [ [ "/pointerevents/extension/idlharness.html", @@ -162405,6 +163014,12 @@ {} ] ], + "web-share/share-empty.https.html": [ + [ + "/web-share/share-empty.https.html", + {} + ] + ], "web-share/share-securecontext.http.html": [ [ "/web-share/share-securecontext.http.html", @@ -163149,6 +163764,12 @@ {} ] ], + "webrtc/RTCConfiguration-bundlePolicy.html": [ + [ + "/webrtc/RTCConfiguration-bundlePolicy.html", + {} + ] + ], "webrtc/RTCConfiguration-iceCandidatePoolSize.html": [ [ "/webrtc/RTCConfiguration-iceCandidatePoolSize.html", @@ -163245,6 +163866,12 @@ {} ] ], + "webrtc/RTCPeerConnection-getDefaultIceServers.html": [ + [ + "/webrtc/RTCPeerConnection-getDefaultIceServers.html", + {} + ] + ], "webrtc/RTCPeerConnection-getTransceivers.html": [ [ "/webrtc/RTCPeerConnection-getTransceivers.html", @@ -163311,6 +163938,12 @@ {} ] ], + "webrtc/RTCRtpTransceiver-setDirection.html": [ + [ + "/webrtc/RTCRtpTransceiver-setDirection.html", + {} + ] + ], "webrtc/RTCSctpTransport-constructor.html": [ [ "/webrtc/RTCSctpTransport-constructor.html", @@ -177746,32 +178379,20 @@ "167c7c1f53ae2bf457f6b3f917f0ef988c585c7c", "testharness" ], - "WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html": [ - "9ae0ceb48cac77c8470b114576ab17c2e7c1a88c", + "WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js": [ + "34432979f039c4e1ba4eb90d4f2acc96d1d441d8", "testharness" ], - "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-expected.txt": [ - "911eb6c33539be782926705760d10c58ea540f16", - "support" - ], - "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html": [ - "24f79517a695477aa4af4b1005ff24977fe44b72", + "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js": [ + "7fc6412ffa2a2586e5ea2dca7f5cdafba38c7585", "testharness" ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object-expected.txt": [ - "7f0da6ca4e04455ec18cccdbb75520f19b74aa15", - "support" - ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object.html": [ - "480d5c2f21d8f18e5231e8293cf44d1050b9106a", + "WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js": [ + "d297d4c52ecf1667cb79ddb076260f9005ee5df4", "testharness" ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object.js": [ - "3d637243f719e2df7ecc9af4e44522e746f38ab7", - "support" - ], - "WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js": [ - "b986594f41fc9df68ee2d3a3aaccae51bf7dd3e9", + "WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js": [ + "f20cbaff1efb774748241b90778a0964f5671fee", "testharness" ], "WebIDL/ecmascript-binding/es-exceptions/exceptions-expected.txt": [ @@ -177779,7 +178400,7 @@ "support" ], "WebIDL/ecmascript-binding/es-exceptions/exceptions.html": [ - "15537c428eeb22a3addb13497ff02181666a1de1", + "fc4d6cf93ff64192ee325d7309ac267cf8ff5d6c", "testharness" ], "WebIDL/ecmascript-binding/has-instance.html": [ @@ -177802,6 +178423,14 @@ "4eac8c853a0627577d2bd96ed76c45bd187a5734", "testharness" ], + "WebIDL/ecmascript-binding/legacy-platform-object-expected.txt": [ + "6590f7ecb08504332e418020ebd7543630c72a1e", + "support" + ], + "WebIDL/ecmascript-binding/legacy-platform-object.html": [ + "952b388d06c804b0a145fba585aa81dc533ff0c2", + "testharness" + ], "WebIDL/ecmascript-binding/put-forwards.html": [ "95fcfc28dae32ab9aadf21d2512a519d6a9fd5ab", "testharness" @@ -179354,18 +179983,46 @@ "5d4d8278b1f24798765974c35777f70fcbfc9cfa", "testharness" ], - "clear-site-data/navigation.html": [ - "daf340429ca71997c7d9c6021354522f0285c4d1", + "clear-site-data/navigation-insecure.html": [ + "4e1b422168f236cff16fd2a03b8baad179be1836", + "testharness" + ], + "clear-site-data/navigation.https.html": [ + "d984555fcc5e26f7647c816a5b37bd9370d1dcfb", "testharness" ], "clear-site-data/support/echo-clear-site-data.py": [ - "d8768caed378b9a3eadeb7a566bcd099f6c2e9de", + "87087d99371d829cd627224379d2970602a434aa", "support" ], "clear-site-data/support/test_utils.js": [ - "6980ed5592440f13bccbd83afdf6c6aa0b55e2f2", + "c48c8340e1360e9203a8b5f865d0816298ec71ea", "support" ], + "clipboard-apis/async-interfaces.https.html": [ + "68a1ea255a72e54e6a2147797d4213914a79aece", + "testharness" + ], + "clipboard-apis/async-navigator-clipboard-basics.https.html": [ + "59f25a9968d47079857989146e26562c3784be34", + "testharness" + ], + "clipboard-apis/async-write-dttext-read-dttext-manual.https.html": [ + "7b2a4d7f1e1e918f8a96694f6619875b746d0255", + "manual" + ], + "clipboard-apis/async-write-dttext-read-text-manual.https.html": [ + "d0fbfc54f1d1a68aaf5a2b96e25101dfe9aec883", + "manual" + ], + "clipboard-apis/async-write-text-read-dttext-manual.https.html": [ + "4b0df740f9f8fa6f3831b1255dde491b83e3ef6c", + "manual" + ], + "clipboard-apis/async-write-text-read-text-manual.https.html": [ + "e69933ca4cdc42105d469b7ffb105aa60a8e0875", + "manual" + ], "common/PrefixedLocalStorage.js": [ "0516e849d40a16e82e1bb800372df28ed802aa8d", "support" @@ -182430,6 +183087,94 @@ "03aff62fc21832b44d9de15805232d87d0089ed3", "reftest" ], + "css-paint-api/geometry-background-image-001-ref.html": [ + "bca138ca3ce5b6dee10f935fd2ff9756d18b12ef", + "support" + ], + "css-paint-api/geometry-background-image-001.html": [ + "a1f6d2148bfcdb68e4ca437b396b0ccbada101a9", + "reftest" + ], + "css-paint-api/geometry-background-image-002-ref.html": [ + "4d33168e6298c1ed7d44ff431791615cdaf9038f", + "support" + ], + "css-paint-api/geometry-background-image-002.html": [ + "f48a940cfc7b3654ee92b655330ae30af5315e17", + "reftest" + ], + "css-paint-api/geometry-background-image-003-ref.html": [ + "e5b4098a1f1b9aab0a27c7bdae0532db4dc26a92", + "support" + ], + "css-paint-api/geometry-background-image-003.html": [ + "98eac1f4d92084ebee4c26d87706bc394d8d5a79", + "reftest" + ], + "css-paint-api/geometry-background-image-tiled-001-ref.html": [ + "df994fa58244f5e8d4b4aac7f0ad335fe8570dcc", + "support" + ], + "css-paint-api/geometry-background-image-tiled-001.html": [ + "f89e6c4f164c10a64037a3feefd915d760a99765", + "reftest" + ], + "css-paint-api/geometry-background-image-tiled-002-ref.html": [ + "c5363f4f7843ff8025ae5457524c0c9f4aac144c", + "support" + ], + "css-paint-api/geometry-background-image-tiled-002.html": [ + "051788b53366cffcc10debdf2d678d50bffd1f54", + "reftest" + ], + "css-paint-api/geometry-background-image-tiled-003-ref.html": [ + "d4f9428be3b8f9003eb9373b3eb87ebed0c55c15", + "support" + ], + "css-paint-api/geometry-background-image-tiled-003.html": [ + "29141ae2c9c87237ed3406dd43c6b3a7a1a5aa36", + "reftest" + ], + "css-paint-api/geometry-border-image-001-ref.html": [ + "81026e756ea8e3be653e176c09f1762507915cb8", + "support" + ], + "css-paint-api/geometry-border-image-001.html": [ + "d8f948af1254c810496739e4c7cc570ba96cf64f", + "reftest" + ], + "css-paint-api/geometry-border-image-002-ref.html": [ + "076c1f3e3b5cfd3a434e94f33872f5f598a7225b", + "support" + ], + "css-paint-api/geometry-border-image-002.html": [ + "57b518eb310db31c40f0db37637b0f8199ee9734", + "reftest" + ], + "css-paint-api/geometry-border-image-003-ref.html": [ + "141bf94dcd935420b95ee4da52139bf51318196d", + "support" + ], + "css-paint-api/geometry-border-image-003.html": [ + "9d01df8817d9e5beb27d3439789cbe914c418b2c", + "reftest" + ], + "css-paint-api/geometry-border-image-004-ref.html": [ + "d730b44bd1020305b70da095a15f9a4f7e9f262a", + "support" + ], + "css-paint-api/geometry-border-image-004.html": [ + "368a9d855ffc46457e6c54cddfbc934e92096ee0", + "reftest" + ], + "css-paint-api/geometry-border-image-005-ref.html": [ + "b401ed261976a4acd2408a84fda9d63d27d1c3a4", + "support" + ], + "css-paint-api/geometry-border-image-005.html": [ + "a2d9214ac53508c5e551547be9beb953be7ab141", + "reftest" + ], "css-paint-api/invalid-image-constructor-error-ref.html": [ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" @@ -182542,6 +183287,114 @@ "f840916bab6d10cff1b08d1cfaecee97699d80cb", "reftest" ], + "css-paint-api/paint2d-zoom-ref.html": [ + "37354f2479a070eadd2a571ff6207953cad3597d", + "support" + ], + "css-paint-api/paint2d-zoom.html": [ + "4d790b6ab70a3a80dc11a08677ea2a1f1cfbadf6", + "reftest" + ], + "css-paint-api/parse-input-arguments-001.html": [ + "0ba1a9978d295825784a2909447e565701e6fc09", + "reftest" + ], + "css-paint-api/parse-input-arguments-002.html": [ + "d35b4e39d8b0f54935571ee62fe7255e93c917dd", + "reftest" + ], + "css-paint-api/parse-input-arguments-003.html": [ + "f6c8cb6feba2b14349bc3fa3170b278e698df526", + "reftest" + ], + "css-paint-api/parse-input-arguments-004.html": [ + "1dd64759c041d9633ce04add066f4e1573fd05e5", + "reftest" + ], + "css-paint-api/parse-input-arguments-005.html": [ + "25d32d33e5de6d289d0e8c776876cb66f03e7c2e", + "reftest" + ], + "css-paint-api/parse-input-arguments-006.html": [ + "effa515567b0212403d83588c335d8fc72c056f6", + "reftest" + ], + "css-paint-api/parse-input-arguments-007.html": [ + "f2f837e7c82462f17d9ebb1a8ab5346e5b8c945c", + "reftest" + ], + "css-paint-api/parse-input-arguments-008.html": [ + "60034209a8984ac0be807494fc4373329d3792eb", + "reftest" + ], + "css-paint-api/parse-input-arguments-009.html": [ + "d57e2370218d385a02e2021219869b5dec0e45c4", + "reftest" + ], + "css-paint-api/parse-input-arguments-010.html": [ + "9d4ef380f3596a73ea7816d13b3913b541ec05b9", + "reftest" + ], + "css-paint-api/parse-input-arguments-011.html": [ + "15edc8fc44d339514911566fe7cf07ec899cf04a", + "reftest" + ], + "css-paint-api/parse-input-arguments-012.html": [ + "0cc064f143a0b1bed6b6e3b79f9a95754eb60ea3", + "reftest" + ], + "css-paint-api/parse-input-arguments-013.html": [ + "e4a99687b156723308ed27a9e863754cb6dcdbd2", + "reftest" + ], + "css-paint-api/parse-input-arguments-014.html": [ + "c10d44a53a00e6a9745d6ea1c359298723a0aee1", + "reftest" + ], + "css-paint-api/parse-input-arguments-015.html": [ + "a78c728b67af31e47c8d46e60e33ba437769a020", + "reftest" + ], + "css-paint-api/parse-input-arguments-016.html": [ + "e06d4a98a350f1cd2ba3bacf132f1ada83f750c1", + "reftest" + ], + "css-paint-api/parse-input-arguments-017.html": [ + "6a16052f0435cc615447b548c598a6da5ce7d49b", + "reftest" + ], + "css-paint-api/parse-input-arguments-ref.html": [ + "6133bd65ef569456f58f1e501d81e088256bdc0a", + "support" + ], + "css-paint-api/registered-properties-in-custom-paint.html": [ + "3855c8c28ea3a24bade81080f3f288ef75243dce", + "reftest" + ], + "css-paint-api/style-background-image-ref.html": [ + "0985e20363c8aac715c534ad59f1209889244fb0", + "support" + ], + "css-paint-api/style-background-image.html": [ + "a3202db04922cc2527436fa319ea9e8432eecdcd", + "reftest" + ], + "css-paint-api/style-before-pseudo-ref.html": [ + "6dcbe78ab89343178e18e3e92744b25759ec8241", + "support" + ], + "css-paint-api/style-before-pseudo.html": [ + "7808e4e86a0556202a0e2ea5574d60c94bf2c537", + "reftest" + ], + "css-paint-api/style-first-letter-pseudo-ref.html": [ + "c6a94e5bafa098b8f4023312db97abebe992abc3", + "support" + ], + "css-paint-api/style-first-letter-pseudo.html": [ + "034cc6ebdf18ea4d346a2a363be69eb8added8e7", + "reftest" + ], "css-paint-api/valid-image-after-load-ref.html": [ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" @@ -200182,6 +201035,14 @@ "5b9a1a29084f46228749c1b2b1a664be3ce02c43", "testharness" ], + "css/css-position-3/position-sticky-grid-ref.html": [ + "9748c25d3db9b5ec2753ff53ceb0b82db9453cdc", + "support" + ], + "css/css-position-3/position-sticky-grid.html": [ + "a06a40f39b4a748c111dc01281261c5451204f95", + "reftest" + ], "css/css-position-3/position-sticky-left-ref.html": [ "9de7a8ba6019395d729b32e514cc3bd9fee25d2b", "support" @@ -215130,10 +215991,6 @@ "35d9a1d1a7f655b55d94d0b409e9562a3fd08db5", "testharness" ], - "css/geometry-1/historical-expected.txt": [ - "8511b6d1ffa140cd38cd68cd756c3d7b5e9afda5", - "support" - ], "css/geometry-1/historical.html": [ "f3462b981784755425a82ba050850ef8d3d36976", "testharness" @@ -217822,10 +218679,6 @@ "7118495560adadebcca98e6add47a74669f87788", "testharness" ], - "cssom-view/cssom-getBoundingClientRect-002-expected.txt": [ - "3a77f2a2a04d37ae64ca7c4fb1a47534faa8bdee", - "support" - ], "cssom-view/cssom-getBoundingClientRect-002.html": [ "8dfaa313b4abad30281d07ce22ac06a61754cc06", "testharness" @@ -218847,7 +219700,7 @@ "testharness" ], "dom/collections/HTMLCollection-supported-property-indices-expected.txt": [ - "f13683da962c681b75b4d33fee384ab7580a0846", + "4fd8dc6c2e84f32bb94460a4e38b9854262ea66b", "support" ], "dom/collections/HTMLCollection-supported-property-indices.html": [ @@ -219050,6 +219903,10 @@ "85dea0178b16b5c3e8ddbfa9a8b4bd8424bc0a3d", "testharness" ], + "dom/events/EventTarget-constructible.any.js": [ + "cd6977c89454651d094f8679c71b5ba512dd687f", + "testharness" + ], "dom/events/EventTarget-dispatchEvent-returnvalue.html": [ "70fedeb118930fdc57292ce5f2bfe621f63c2563", "testharness" @@ -219075,7 +219932,7 @@ "testharness" ], "dom/interfaces.html": [ - "f8eb7f5fcfdc9ca4a500d5e43855a24a169c81cf", + "aae8f328bc52cbb17f47f78ace6d20c25a9c3acc", "testharness" ], "dom/lists/DOMTokenList-Iterable.html": [ @@ -219563,7 +220420,7 @@ "testharness" ], "dom/nodes/Document-getElementsByTagName-expected.txt": [ - "a7e42a7152761f5974f193d2f390822cd0fc1838", + "e184b2d38e6ee7b78316115879b057b3db515117", "support" ], "dom/nodes/Document-getElementsByTagName-xhtml.xhtml": [ @@ -219723,7 +220580,7 @@ "testharness" ], "dom/nodes/Element-getElementsByTagName-expected.txt": [ - "838fa4636275a4656766c3c68f73457c39c34d4b", + "96af851083113bfd7dc2267dd9c4c99377fe746b", "support" ], "dom/nodes/Element-getElementsByTagName.html": [ @@ -224203,7 +225060,7 @@ "testharness" ], "hr-time/idlharness.html": [ - "b56993b32650d40226e08beee147bc28c76cfa22", + "2f10557869a4841ec9d826906d542109f606df43", "testharness" ], "hr-time/monotonic-clock.any.js": [ @@ -224218,6 +225075,10 @@ "289c39cd0c74f3ca28fe5087b75ef01135396594", "testharness" ], + "hr-time/timing-attack.html": [ + "1d3d88e71fb886374b50c6dc2c1141a80c8c0a06", + "testharness" + ], "hr-time/window-worker-time-origin.html": [ "556079c9d81c55df55c69738384991d31cad2c77", "testharness" @@ -226555,11 +227416,11 @@ "testharness" ], "html/browsers/the-window-object/window-indexed-properties-expected.txt": [ - "993d4ee44994a8a0d06d354abe3aa596946dd72a", + "56b31c55fc865b08b89c82207990ea00e1b45240", "support" ], "html/browsers/the-window-object/window-indexed-properties-strict-expected.txt": [ - "624baff00a9efae0597ae657ed81dfd2403248d4", + "afb98a47953d8fec2b1fe4e11647cd826192ec9a", "support" ], "html/browsers/the-window-object/window-indexed-properties-strict.html": [ @@ -228663,7 +229524,7 @@ "support" ], "html/dom/interfaces-expected.txt": [ - "f3a223067481ba42ffbbf26aa314da421b787ab5", + "f49e7e627e4802214f110a1a838b17385a8198b2", "support" ], "html/dom/interfaces.html": [ @@ -234386,10 +235247,6 @@ "075014da26e3a5571feb7af16656f83aa0d5df1f", "testharness" ], - "html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/getter-expected.txt": [ - "85045b646926dc16ac2bf42d0d93d27365c7d483", - "support" - ], "html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/getter.html": [ "119472b70b588c3032529a7959e6b3e3ef8fcb88", "testharness" @@ -234402,10 +235259,6 @@ "cb76121ffc7f6d4a8cb434c375468742007e0673", "testharness" ], - "html/semantics/embedded-content/media-elements/interfaces/TextTrackList/getter-expected.txt": [ - "e1ceedeec4428cbcdfcf5fa1d4aa1cbd171e7ae4", - "support" - ], "html/semantics/embedded-content/media-elements/interfaces/TextTrackList/getter.html": [ "38f55a09a5d33c2e46e5ff2c60dd5d7c7b73ca37", "testharness" @@ -236762,8 +237615,16 @@ "5d5e954fd50f3d474e69875d11e03ade7c80d7cd", "testharness" ], - "html/semantics/scripting-1/the-script-element/load-event.html": [ - "e702aa5d09183d147850f61503d2e18f78a0a660", + "html/semantics/scripting-1/the-script-element/load-error-events-1.html": [ + "f97f03f6a6e73665eb2f5c4c61801f432f75a59d", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/load-error-events-2.html": [ + "a20dbe60fad2827bc97fb647c3a29ec1c54cfd0c", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/load-error-events-3.html": [ + "a2dd0a60944fb8785493a50ad802f7793355a385", "testharness" ], "html/semantics/scripting-1/the-script-element/log.py": [ @@ -237058,6 +237919,14 @@ "2fd8c4ee6fcc66a8ddc2100a0840ebcc324a7d58", "testharness" ], + "html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html": [ + "9b35d8d7ba6bb4826274c9570056cc962660d715", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/load-error-events.html": [ + "304dc3a7e9cd48699742b0a1431adda1d0f253c0", + "testharness" + ], "html/semantics/scripting-1/the-script-element/module/missing-export-nested.js": [ "5c6c1dae178b88b42ce87964e372f7d7db99ba70", "support" @@ -237214,10 +238083,22 @@ "5797045ac8591d2662a6714367ae5fb257881793", "support" ], + "html/semantics/scripting-1/the-script-element/resources/load-error-events-helpers.js": [ + "57a043fff23635ce04b62672429b6abb088cdb9b", + "support" + ], + "html/semantics/scripting-1/the-script-element/resources/load-error-events.py": [ + "0a9007a17bed4635d7f384d3a32a6d2dff11738c", + "support" + ], "html/semantics/scripting-1/the-script-element/resources/set-script-executed.js": [ "87f80eee703965c88f2bf7015bfa76233d459d06", "support" ], + "html/semantics/scripting-1/the-script-element/resources/slow.py": [ + "200bd721dadd0eb50d0b7734b17a081505697cc9", + "support" + ], "html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt": [ "89ed2800022ff8f95d94bd1f5035de488b8c75f1", "support" @@ -239175,7 +240056,7 @@ "manual" ], "html/webappapis/scripting/events/event-handler-all-global-events-expected.txt": [ - "5c8a11538bc70d93f3a7f4cbd33710bac3a34bc0", + "4f354373460dfe647b47cf902259e84a4d3da481", "support" ], "html/webappapis/scripting/events/event-handler-all-global-events.html": [ @@ -240094,6 +240975,10 @@ "f94325d74e69fbd62bfdff3c0f4676a3d2c50d09", "manual" ], + "interfaces/clipboard.idl": [ + "5af2846c7f9ff93f2f4f13780d0356cdac6a0d4f", + "support" + ], "interfaces/cssom.idl": [ "bb17bbe93776dbeb33f061a7a90889e922e3138e", "support" @@ -240103,7 +240988,7 @@ "support" ], "interfaces/dom.idl": [ - "86f2e15d4b32af7b5127283eb3cfab5a78b46c0a", + "2b94c6332d8535bbcfd605bc3ed46ba6f705de62", "support" ], "interfaces/fullscreen.idl": [ @@ -240135,7 +241020,7 @@ "support" ], "interfaces/web-share.idl": [ - "0f43a814700a62e8f5ea54056ae901e1bdb3a610", + "d3ab33fa078f1b3bd4b29e174369073aab3963d5", "support" ], "interfaces/webrtc-pc.idl": [ @@ -242863,7 +243748,7 @@ "support" ], "navigation-timing/nav2_idlharness.html": [ - "6931ae3947e9f6553890c4c7895b774faad02102", + "ffc5d6f4a11a4bf2ad72404fc62d88be1c45a5f5", "testharness" ], "navigation-timing/nav2_test_attributes_exist.html": [ @@ -242971,7 +243856,7 @@ "support" ], "navigation-timing/resources/webperftestharness.js": [ - "670154a84de50de0c6b310edfeb23a1f3d0d72d1", + "c149cde434fc6e82e9e50936308ec0ad9b3c2997", "support" ], "navigation-timing/test_document_open.html": [ @@ -249351,7 +250236,11 @@ "support" ], "page-visibility/idlharness.html": [ - "6bbcc548a783a56340aa256e5f51ca51c1b3f4d3", + "d6d16a7aed48659afaf14acd5e21271a8ce8cec0", + "testharness" + ], + "page-visibility/iframe-unload.html": [ + "b97bb09efe6a8e410f6bfd71dc92f041d1b980bf", "testharness" ], "page-visibility/prerender_call-expected.txt": [ @@ -249366,8 +250255,12 @@ "2d6d55d85e17a9fe978db6dbe25ae35a599d5683", "support" ], + "page-visibility/resources/iframe-with-subframes.html": [ + "17615ac4c33fd7f2e49c3b5357de3b976eb2963b", + "support" + ], "page-visibility/resources/pagevistestharness.js": [ - "63604473eabaa8d3b9b410a1a0087d9b4b2e7b90", + "1c77f9af66e2d39e97056273c35197827f03bb06", "support" ], "page-visibility/resources/prerender_target.html": [ @@ -249443,7 +250336,7 @@ "testharness" ], "payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html": [ - "9452392f0dc2b4feb4ee87f09952819998b9e39c", + "41265b7c3d0e8d4c8f462f957627139f8aa5a3a3", "testharness" ], "payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub-expected.txt": [ @@ -249451,11 +250344,11 @@ "support" ], "payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html": [ - "b8c0121e830a6b2c8897d98ee8cbd381802d4735", + "5eb37c0c6ad39187c4505a8cbe113c4b68e51c92", "testharness" ], "payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html": [ - "6e4028440fff617d6a0e9abb06625891eb53b28a", + "e5be539c1b0ca1c571df1fc979fde5bf6482b43d", "testharness" ], "payment-request/historical.https.html": [ @@ -249502,9 +250395,9 @@ "c9ee5af2ccd5ad364090807c8427f1d4624d3747", "testharness" ], - "payment-request/payment-request-canmakepayment-method.https.http": [ + "payment-request/payment-request-canmakepayment-method.https.html": [ "b20131bc3f2717212f9940920183d650ee111333", - "support" + "testharness" ], "payment-request/payment-request-constructor-crash.https.html": [ "dd2f95bd4d94a819c507e942b19a60de05a16971", @@ -249567,7 +250460,7 @@ "testharness" ], "performance-timeline/idlharness.html": [ - "14c5244fdb2af22bdad8b5333d2dd5b9696a9e49", + "b021a9528875942d44b33c3fc3f4cd643194fad5", "testharness" ], "performance-timeline/performanceobservers.js": [ @@ -249610,6 +250503,18 @@ "f2f3c2b3cef895f514f595932b767299cd6dade0", "support" ], + "performance-timeline/resources/worker-with-performance-observer.js": [ + "6536127a1136f45cd59f62a9851fe61ceabe3d5b", + "support" + ], + "performance-timeline/worker-with-performance-observer-expected.txt": [ + "0956fee8c746137cf4a2bbf3d247ee424ba7c42e", + "support" + ], + "performance-timeline/worker-with-performance-observer.html": [ + "dc978fd8669d67118109fcab245010fdd7d799b0", + "testharness" + ], "pointerevents/OWNERS": [ "a4fed30c25d50d5ce774e4e5b431efa99f73ecf3", "support" @@ -257839,7 +258744,7 @@ "support" ], "resource-timing/idlharness.html": [ - "c2582fcd7d9cf40d10d86589c341789ba94a68bd", + "60e2a57792827713ffd1176a0793da97c1ccf599", "testharness" ], "resource-timing/iframe-setdomain.sub.html": [ @@ -262639,7 +263544,7 @@ "testharness" ], "url/urlsearchparams-delete.html": [ - "eaeaab453fb90ba939c4dca0db11a07d50acce26", + "b1fcda755e2a9e3308a222fe213abf0a255f0777", "testharness" ], "url/urlsearchparams-foreach-expected.txt": [ @@ -263374,9 +264279,9 @@ "b4dcc0ac05c2a14907d55058f7d51190842fe0d3", "manual" ], - "web-share/share-empty-manual.html": [ - "0a465dc66c930601d611ea3cfef0a271b6cc0b0a", - "manual" + "web-share/share-empty.https.html": [ + "aa25dc3fef3c62d9b128866a2c48df204bfaa548", + "testharness" ], "web-share/share-extra-argument-manual.html": [ "d0d2e67e49c16b874e5c5cbe4d1c6920b6b70a17", @@ -263439,7 +264344,7 @@ "manual" ], "web-share/share-without-user-gesture.https.html": [ - "aaa84c716125c6332b3a5c114a97d5986af38c37", + "d883b2469759722cf76c4624a1a81908c9aa5ae0", "testharness" ], "webaudio/.gitignore": [ @@ -264126,6 +265031,10 @@ "76e0c5f601c8ba4aefb06d1ebab8454c78fe07df", "testharness" ], + "webrtc/RTCConfiguration-bundlePolicy.html": [ + "260ead036b3f4facd720dafbcaaa11040c145228", + "testharness" + ], "webrtc/RTCConfiguration-iceCandidatePoolSize-expected.txt": [ "a3c6a87b158deb84be0f56e8467b1f9bf16aba71", "support" @@ -264207,7 +265116,7 @@ "support" ], "webrtc/RTCPeerConnection-constructor.html": [ - "60e9ec4bec3e3d3b785568be8cf089c959e71813", + "785610c964c8ed95a3b4f65c68a2612c2442145a", "testharness" ], "webrtc/RTCPeerConnection-createAnswer-expected.txt": [ @@ -264238,6 +265147,10 @@ "27fb46922255203da0fc26a63808aeb98a60b640", "testharness" ], + "webrtc/RTCPeerConnection-getDefaultIceServers.html": [ + "3b8f625e068cfd6ec3fe80bab276b2216fa8eda5", + "testharness" + ], "webrtc/RTCPeerConnection-getTransceivers-expected.txt": [ "c2256fadf711bf5daa8ee81af75c269e15e7c34d", "support" @@ -264267,7 +265180,7 @@ "testharness" ], "webrtc/RTCPeerConnection-idl-expected.txt": [ - "a8578ee98585cababd679ff4569850e81bf439ee", + "b0a742082027191a583c2982b3245cb18fa3aaad", "support" ], "webrtc/RTCPeerConnection-idl.html": [ @@ -264318,6 +265231,10 @@ "9e8eca4fa11cc72471bc48d98bec8e5936111334", "testharness" ], + "webrtc/RTCRtpTransceiver-setDirection.html": [ + "539eaba516eef7419c5e543d7218a41f850f5e7b", + "testharness" + ], "webrtc/RTCSctpTransport-constructor-expected.txt": [ "b3ab3dc6b944a3273263ffb739fbb0b7c37ce8d2", "support" @@ -264351,7 +265268,7 @@ "testharness" ], "webrtc/interfaces-expected.txt": [ - "9fb4c9aa96921b2099227fe2294c0c7799bb1ebb", + "24a06be7ff2b7bcbf6bd857dc91f39ec5869206d", "support" ], "webrtc/interfaces.html": [ @@ -265611,7 +266528,7 @@ "support" ], "webusb/resources/usb-helpers.js": [ - "41af64a414c353777e67eb9b57d08fd96a6fa88c", + "164413453b70ea42f885481cc3ed839a4314527e", "support" ], "webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ @@ -265667,7 +266584,7 @@ "testharness" ], "webusb/usbIsochronousInTransferResult.https.html": [ - "bf85d36769b9f52c0d8f69027875199669eb64e0", + "131e36c8782adf4c02198b1905d233159295d5aa", "testharness" ], "webusb/usbIsochronousOutTransferPacket.https.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js similarity index 66% rename from third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html rename to third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js index 450b4b3..bb846a4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js
@@ -1,12 +1,5 @@ -<!doctype html> -<meta charset=utf-8> -<title>DOMException constants</title> -<link rel=help href="https://heycam.github.io/webidl/#es-DOMException-constructor-object"> -<link rel=help href="https://heycam.github.io/webidl/#es-DOMException-prototype-object"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<div id="log"></div> -<script> +'use strict'; + test(function() { // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27732 var constants = [ @@ -47,13 +40,12 @@ assert_equals(object[name], i + 1, name) assert_own_property(object, name) var pd = Object.getOwnPropertyDescriptor(object, name) - assert_false("get" in pd, "property has getter") - assert_false("set" in pd, "property has setter") - assert_false(pd.writable, "not writable") + assert_false("get" in pd, "get") + assert_false("set" in pd, "set") + assert_false(pd.writable, "writable") assert_true(pd.enumerable, "enumerable") - assert_false(pd.configurable, "not configurable") + assert_false(pd.configurable, "configurable") }, "Constant " + name + " on " + description) }) }) }) -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js new file mode 100644 index 0000000..a015470 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js
@@ -0,0 +1,32 @@ +test(function() { + assert_own_property(self, "DOMException", "property of global"); + + var desc = Object.getOwnPropertyDescriptor(self, "DOMException"); + assert_false("get" in desc, "get"); + assert_false("set" in desc, "set"); + assert_true(desc.writable, "writable"); + assert_false(desc.enumerable, "enumerable"); + assert_true(desc.configurable, "configurable"); +}, "existence and property descriptor of DOMException"); + +test(function() { + assert_own_property(self.DOMException, "prototype", "prototype property"); + + var desc = Object.getOwnPropertyDescriptor(self.DOMException, "prototype"); + assert_false("get" in desc, "get"); + assert_false("set" in desc, "set"); + assert_false(desc.writable, "writable"); + assert_false(desc.enumerable, "enumerable"); + assert_false(desc.configurable, "configurable"); +}, "existence and property descriptor of DOMException.prototype"); + +test(function() { + assert_own_property(self.DOMException.prototype, "constructor", "property of prototype"); + var desc = Object.getOwnPropertyDescriptor(self.DOMException.prototype, "constructor"); + assert_false("get" in desc, "get"); + assert_false("set" in desc, "set"); + assert_true(desc.writable, "writable"); + assert_false(desc.enumerable, "enumerable"); + assert_true(desc.configurable, "configurable"); + assert_equals(self.DOMException.prototype.constructor, self.DOMException, "equality with actual constructor"); +}, "existence and property descriptor of DOMException.prototype.constructor");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js similarity index 75% rename from third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html rename to third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js index 0e5ffea7..d6e1cdd 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js
@@ -1,13 +1,5 @@ -<!doctype html> -<meta charset=utf-8> -<title>DOMException constructor</title> -<link rel=help href="https://heycam.github.io/webidl/#es-DOMException-constructor-object"> -<link rel=help href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-error.prototype.message"> -<link rel=help href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-error.prototype.name"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<div id="log"></div> -<script> +'use strict'; + test(function() { var ex = new DOMException(); assert_equals(ex.name, "Error", @@ -22,7 +14,7 @@ "The name property should be inherited"); assert_false(ex.hasOwnProperty("message"), "The message property should be inherited"); -}, 'new DOMException(): own-ness'); +}, 'new DOMException(): inherited-ness'); test(function() { var ex = new DOMException(null); @@ -46,7 +38,7 @@ "The name property should be inherited"); assert_false(ex.hasOwnProperty("message"), "The message property should be inherited"); -}, 'new DOMException(undefined): own-ness'); +}, 'new DOMException(undefined): inherited-ness'); test(function() { var ex = new DOMException("foo"); @@ -59,9 +51,9 @@ var ex = new DOMException("foo"); assert_false(ex.hasOwnProperty("name"), "The name property should be inherited"); - assert_true(ex.hasOwnProperty("message"), - "The message property should be own"); -}, 'new DOMException("foo"): own-ness'); + assert_false(ex.hasOwnProperty("message"), + "The message property should be inherited"); +}, 'new DOMException("foo"): inherited-ness'); test(function() { var ex = new DOMException("bar", undefined); @@ -80,11 +72,11 @@ test(function() { var ex = new DOMException("bar", "NotSupportedError"); - assert_true(ex.hasOwnProperty("name"), - "The name property should be own"); - assert_true(ex.hasOwnProperty("message"), - "The message property should be own"); -}, 'new DOMException("bar", "NotSupportedError"): own-ness'); + assert_false(ex.hasOwnProperty("name"), + "The name property should be inherited"); + assert_false(ex.hasOwnProperty("message"), + "The message property should be inherited"); +}, 'new DOMException("bar", "NotSupportedError"): inherited-ness'); test(function() { var ex = new DOMException("bar", "foo"); @@ -127,13 +119,3 @@ "Should have matching legacy code from error names table"); },'new DOMexception("msg", "' + test_case.name + '")'); }); - -test(function() { - var ex = new DOMException("bar", "UnknownError"); - assert_equals(ex.name, "UnknownError", "Should be using the passed-in name"); - assert_equals(ex.message, "bar", "Should still be using passed-in message"); - assert_equals(ex.code, 0, - "Should have 0 for code for a name in the exception names table with no legacy code"); -}, 'new DOMException("bar", "UnknownError")'); - -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-expected.txt deleted file mode 100644 index b38cc07..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor-expected.txt +++ /dev/null
@@ -1,36 +0,0 @@ -This is a testharness.js-based test. -PASS new DOMException() -PASS new DOMException(): own-ness -PASS new DOMException(null) -PASS new DOMException(undefined) -PASS new DOMException(undefined): own-ness -PASS new DOMException("foo") -FAIL new DOMException("foo"): own-ness assert_true: The message property should be own expected true got false -PASS new DOMException("bar", undefined) -PASS new DOMException("bar", "NotSupportedError") -FAIL new DOMException("bar", "NotSupportedError"): own-ness assert_true: The name property should be own expected true got false -PASS new DOMException("bar", "foo") -PASS new DOMexception("msg", "IndexSizeError") -PASS new DOMexception("msg", "HierarchyRequestError") -PASS new DOMexception("msg", "WrongDocumentError") -PASS new DOMexception("msg", "InvalidCharacterError") -PASS new DOMexception("msg", "NoModificationAllowedError") -PASS new DOMexception("msg", "NotFoundError") -PASS new DOMexception("msg", "NotSupportedError") -PASS new DOMexception("msg", "InUseAttributeError") -PASS new DOMexception("msg", "InvalidStateError") -PASS new DOMexception("msg", "SyntaxError") -PASS new DOMexception("msg", "InvalidModificationError") -PASS new DOMexception("msg", "NamespaceError") -PASS new DOMexception("msg", "InvalidAccessError") -PASS new DOMexception("msg", "SecurityError") -PASS new DOMexception("msg", "NetworkError") -PASS new DOMexception("msg", "AbortError") -PASS new DOMexception("msg", "URLMismatchError") -PASS new DOMexception("msg", "QuotaExceededError") -PASS new DOMexception("msg", "TimeoutError") -PASS new DOMexception("msg", "InvalidNodeTypeError") -PASS new DOMexception("msg", "DataCloneError") -PASS new DOMException("bar", "UnknownError") -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any-expected.txt new file mode 100644 index 0000000..2a61639 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +PASS Cannot construct without new +PASS inherits from Error: prototype-side +PASS does not inherit from Error: class-side +PASS message property descriptor +PASS message getter performs brand checks (i.e. is not [LenientThis] +PASS name property descriptor +PASS name getter performs brand checks (i.e. is not [LenientThis] +PASS code property descriptor +PASS code getter performs brand checks (i.e. is not [LenientThis] +PASS code property is not affected by shadowing the name property +PASS Object.prototype.toString behavior is like other interfaces +FAIL Inherits its toString() from Error.prototype assert_false: toString must not exist on DOMException.prototype expected false got true +FAIL toString() behavior from Error.prototype applies as expected assert_equals: The default Error.prototype.toString() behavior must work on shadowed names and messages expected "new name: new message" but got "name: message" +PASS DOMException.prototype.toString() applied to DOMException.prototype throws because of name/message brand checks +FAIL If the implementation has a stack property on normal errors, it also does on DOMExceptions assert_equals: The typeof values must match expected "string" but got "undefined" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js new file mode 100644 index 0000000..8d69c6e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js
@@ -0,0 +1,120 @@ +"use strict"; + +test(() => { + assert_throws(new TypeError(), () => DOMException()); +}, "Cannot construct without new"); + +test(() => { + assert_equals(Object.getPrototypeOf(DOMException.prototype), Error.prototype); +}, "inherits from Error: prototype-side"); + +test(() => { + assert_equals(Object.getPrototypeOf(DOMException), Function.prototype); +}, "does not inherit from Error: class-side"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("message"), "property is not own"); + + const propDesc = Object.getOwnPropertyDescriptor(DOMException.prototype, "message"); + assert_equals(typeof propDesc.get, "function", "property descriptor is a getter"); + assert_equals(propDesc.set, undefined, "property descriptor is not a setter"); + assert_true(propDesc.enumerable, "property descriptor enumerable"); + assert_true(propDesc.configurable, "property descriptor configurable"); +}, "message property descriptor"); + +test(() => { + const getter = Object.getOwnPropertyDescriptor(DOMException.prototype, "message").get; + + assert_throws(new TypeError(), () => getter.apply({})); +}, "message getter performs brand checks (i.e. is not [LenientThis]"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("name"), "property is not own"); + + const propDesc = Object.getOwnPropertyDescriptor(DOMException.prototype, "name"); + assert_equals(typeof propDesc.get, "function", "property descriptor is a getter"); + assert_equals(propDesc.set, undefined, "property descriptor is not a setter"); + assert_true(propDesc.enumerable, "property descriptor enumerable"); + assert_true(propDesc.configurable, "property descriptor configurable"); +}, "name property descriptor"); + +test(() => { + const getter = Object.getOwnPropertyDescriptor(DOMException.prototype, "name").get; + + assert_throws(new TypeError(), () => getter.apply({})); +}, "name getter performs brand checks (i.e. is not [LenientThis]"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("code"), "property is not own"); + + const propDesc = Object.getOwnPropertyDescriptor(DOMException.prototype, "code"); + assert_equals(typeof propDesc.get, "function", "property descriptor is a getter"); + assert_equals(propDesc.set, undefined, "property descriptor is not a setter"); + assert_true(propDesc.enumerable, "property descriptor enumerable"); + assert_true(propDesc.configurable, "property descriptor configurable"); +}, "code property descriptor"); + +test(() => { + const getter = Object.getOwnPropertyDescriptor(DOMException.prototype, "code").get; + + assert_throws(new TypeError(), () => getter.apply({})); +}, "code getter performs brand checks (i.e. is not [LenientThis]"); + +test(() => { + const e = new DOMException("message", "InvalidCharacterError"); + assert_equals(e.code, 5, "Initially the code is set to 5"); + + Object.defineProperty(e, "name", { + value: "WrongDocumentError" + }); + + assert_equals(e.code, 5, "The code is still set to 5"); +}, "code property is not affected by shadowing the name property"); + +test(() => { + const e = new DOMException("message", "name"); + assert_equals(Object.prototype.toString.call(e), "[object DOMException]"); +}, "Object.prototype.toString behavior is like other interfaces"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("toString"), "toString must not exist on the instance"); + assert_false(DOMException.prototype.hasOwnProperty("toString"), "toString must not exist on DOMException.prototype"); + assert_equals(typeof e.toString, "function", "toString must still exist (via Error.prototype)"); +}, "Inherits its toString() from Error.prototype"); + +test(() => { + const e = new DOMException("message", "name"); + assert_equals(e.toString(), "name: message", + "The default Error.prototype.toString() behavior must work on supplied name and message"); + + Object.defineProperty(e, "name", { value: "new name" }); + Object.defineProperty(e, "message", { value: "new message" }); + assert_equals(e.toString(), "new name: new message", + "The default Error.prototype.toString() behavior must work on shadowed names and messages"); +}, "toString() behavior from Error.prototype applies as expected"); + +test(() => { + assert_throws(new TypeError(), () => DOMException.prototype.toString()); +}, "DOMException.prototype.toString() applied to DOMException.prototype throws because of name/message brand checks"); + +test(() => { + let stackOnNormalErrors; + try { + throw new Error("normal error"); + } catch (e) { + stackOnNormalErrors = e.stack; + } + + let stackOnDOMException; + try { + throw new DOMException("message", "name"); + } catch (e) { + stackOnDOMException = e.stack; + } + + assert_equals(typeof stackOnDOMException, typeof stackOnNormalErrors, "The typeof values must match"); +}, "If the implementation has a stack property on normal errors, it also does on DOMExceptions");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.worker-expected.txt new file mode 100644 index 0000000..2a61639 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.worker-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +PASS Cannot construct without new +PASS inherits from Error: prototype-side +PASS does not inherit from Error: class-side +PASS message property descriptor +PASS message getter performs brand checks (i.e. is not [LenientThis] +PASS name property descriptor +PASS name getter performs brand checks (i.e. is not [LenientThis] +PASS code property descriptor +PASS code getter performs brand checks (i.e. is not [LenientThis] +PASS code property is not affected by shadowing the name property +PASS Object.prototype.toString behavior is like other interfaces +FAIL Inherits its toString() from Error.prototype assert_false: toString must not exist on DOMException.prototype expected false got true +FAIL toString() behavior from Error.prototype applies as expected assert_equals: The default Error.prototype.toString() behavior must work on shadowed names and messages expected "new name: new message" but got "name: message" +PASS DOMException.prototype.toString() applied to DOMException.prototype throws because of name/message brand checks +FAIL If the implementation has a stack property on normal errors, it also does on DOMExceptions assert_equals: The typeof values must match expected "string" but got "undefined" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object-expected.txt deleted file mode 100644 index 65f0523..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -FAIL existence and properties of DOMException assert_equals: prototype of self's property "DOMException" is not Error expected function "function Error() { [native code] }" but got function "function () { [native code] }" -FAIL existence and properties of DOMException.prototype assert_equals: class string of DOMException.prototype expected "[object DOMExceptionPrototype]" but got "[object DOMException]" -FAIL existence of name and code properties on DOMException.prototype assert_false: DOMException.prototype should not have an own "name" property. expected false got true -PASS existence and properties of exception interface prototype object's "constructor" property -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html deleted file mode 100644 index ddb40f4..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<title>DOMException constructor and prototype object</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src=constructor-object.js></script> -<div id="log"></div> -<script> -setup({ explicit_done: true }) -run_test() -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js deleted file mode 100644 index e539d85db..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js +++ /dev/null
@@ -1,111 +0,0 @@ -function run_test() { - test(function() { - // "There MUST exist a property on the ECMAScript global object whose - // name is “DOMException” and value is an object called the - // DOMException constructor object, which provides access to legacy - // DOMException code constants. The property has the attributes - // { [[Writable]]: true, [[Enumerable]]: false, - // [[Configurable]]: true }." - assert_own_property(self, "DOMException", - "self does not have own property \"DOMException\""); - var desc = Object.getOwnPropertyDescriptor(self, "DOMException"); - assert_false("get" in desc, "self's property \"DOMException\" has getter"); - assert_false("set" in desc, "self's property \"DOMException\" has setter"); - assert_true(desc.writable, "self's property \"DOMException\" is not writable"); - assert_false(desc.enumerable, "self's property \"DOMException\" is enumerable"); - assert_true(desc.configurable, "self's property \"DOMException\" is not configurable"); - - // "The DOMException constructor object MUST be a function object but - // with a [[Prototype]] value of %Error% ([ECMA-262], section 6.1.7.4)." - assert_equals(Object.getPrototypeOf(self.DOMException), Error, - "prototype of self's property \"DOMException\" is not Error"); - - // "Its [[Get]] internal property is set as described in ECMA-262 - // section 9.1.8." - // Not much to test for this. - // "Its [[Construct]] internal property is set as described in ECMA-262 - // section 19.2.2.3." - // "Its @@hasInstance property is set as described in ECMA-262 section - // 19.2.3.8, unless otherwise specified." - - // String() returns something implementation-dependent, because it - // calls Function#toString. - assert_class_string(self.DOMException, "Function", - "class string of DOMException"); - - // "For every legacy code listed in the error names table, there MUST - // be a property on the DOMException constructor object whose name and - // value are as indicated in the table. The property has attributes - // { [[Writable]]: false, [[Enumerable]]: true, - // [[Configurable]]: false }." - // See DOMException-constants.html. - }, "existence and properties of DOMException"); - - test(function() { - assert_own_property(self, "DOMException", - "self does not have own property \"DOMException\""); - - // "The DOMException constructor object MUST also have a property named - // “prototype” with attributes { [[Writable]]: false, - // [[Enumerable]]: false, [[Configurable]]: false } whose value is an - // object called the DOMException prototype object. This object also - // provides access to the legacy code values." - assert_own_property(self.DOMException, "prototype", - 'exception "DOMException" does not have own property "prototype"'); - var desc = Object.getOwnPropertyDescriptor(self.DOMException, "prototype"); - assert_false("get" in desc, "DOMException.prototype has getter"); - assert_false("set" in desc, "DOMException.prototype has setter"); - assert_false(desc.writable, "DOMException.prototype is writable"); - assert_false(desc.enumerable, "DOMException.prototype is enumerable"); - assert_false(desc.configurable, "DOMException.prototype is configurable"); - - // "The DOMException prototype object MUST have an internal - // [[Prototype]] property whose value is %ErrorPrototype% ([ECMA-262], - // section 6.1.7.4)." - assert_own_property(self, "Error", - 'should inherit from Error, but self has no such property'); - assert_own_property(self.Error, "prototype", - 'should inherit from Error, but that object has no "prototype" property'); - assert_equals(Object.getPrototypeOf(self.DOMException.prototype), - self.Error.prototype, - 'prototype of DOMException.prototype is not Error.prototype'); - - // "The class string of the DOMException prototype object is - // “DOMExceptionPrototype”." - assert_class_string(self.DOMException.prototype, "DOMExceptionPrototype", - "class string of DOMException.prototype"); - }, "existence and properties of DOMException.prototype"); - - test(function() { - assert_false(self.DOMException.prototype.hasOwnProperty("name"), - "DOMException.prototype should not have an own \"name\" " + - "property."); - assert_false(self.DOMException.prototype.hasOwnProperty("code"), - "DOMException.prototype should not have an own \"name\" " + - "property."); - }, "existence of name and code properties on DOMException.prototype"); - - test(function() { - assert_own_property(self, "DOMException", - "self does not have own property \"DOMException\""); - assert_own_property(self.DOMException, "prototype", - 'interface "DOMException" does not have own property "prototype"'); - - // "There MUST be a property named “constructor” on the DOMException - // prototype object with attributes { [[Writable]]: true, - // [[Enumerable]]: false, [[Configurable]]: true } and whose value is - // the DOMException constructor object." - assert_own_property(self.DOMException.prototype, "constructor", - "DOMException" + '.prototype does not have own property "constructor"'); - var desc = Object.getOwnPropertyDescriptor(self.DOMException.prototype, "constructor"); - assert_false("get" in desc, "DOMException.prototype.constructor has getter"); - assert_false("set" in desc, "DOMException.prototype.constructor has setter"); - assert_true(desc.writable, "DOMException.prototype.constructor is not writable"); - assert_false(desc.enumerable, "DOMException.prototype.constructor is enumerable"); - assert_true(desc.configurable, "DOMException.prototype.constructor in not configurable"); - assert_equals(self.DOMException.prototype.constructor, self.DOMException, - "DOMException.prototype.constructor is not the same object as DOMException"); - }, "existence and properties of exception interface prototype object's \"constructor\" property"); - - done(); -}
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js deleted file mode 100644 index 7514924..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js +++ /dev/null
@@ -1,3 +0,0 @@ -importScripts("/resources/testharness.js") -importScripts("constructor-object.js") -run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions-expected.txt deleted file mode 100644 index 97ca4bd6..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions-expected.txt +++ /dev/null
@@ -1,21 +0,0 @@ -This is a testharness.js-based test. -PASS Object.getPrototypeOf(exception) === DOMException.prototype -FAIL exception.hasOwnProperty("name") assert_true: expected true got false -PASS exception.name === "HierarchyRequestError" -FAIL Object.getOwnPropertyDescriptor(exception, "name") Cannot read property 'writable' of undefined -PASS Object.getOwnPropertyDescriptor(exception, "message") -FAIL typeof exception.message === "string" assert_equals: expected "" but got "Failed to execute 'appendChild' on 'Node': The new child element contains the parent." -PASS Object.prototype.toString.call(exception) === "[object DOMException]" -PASS exception.code === DOMException.HIERARCHY_REQUEST_ERR -FAIL Object.getOwnPropertyDescriptor(exception, "code") Cannot read property 'writable' of undefined -PASS In iframe: Object.getPrototypeOf(exception) === DOMException.prototype -FAIL In iframe: exception.hasOwnProperty("name") assert_true: expected true got false -PASS In iframe: exception.name === "HierarchyRequestError" -FAIL In iframe: Object.getOwnPropertyDescriptor(exception, "name") Cannot read property 'writable' of undefined -PASS In iframe: Object.getOwnPropertyDescriptor(exception, "message") -FAIL In iframe: typeof exception.message === "string" assert_equals: expected "" but got "Failed to execute 'appendChild' on 'Node': The new child element contains the parent." -PASS In iframe: Object.prototype.toString.call(exception) === "[object DOMException]" -PASS In iframe: exception.code === DOMException.HIERARCHY_REQUEST_ERR -FAIL In iframe: Object.getOwnPropertyDescriptor(exception, "code") Cannot read property 'writable' of undefined -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html index 06c196e..396d0a4c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html +++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html
@@ -20,90 +20,31 @@ setup({explicit_done: true}); function testException(exception, global, desc) { - // https://heycam.github.io/webidl/#es-exception-objects - // (as of 2015-01-03): "The value of the internal [[Prototype]] property of a - // DOMException object MUST be the DOMException prototype object from the - // global environment the exception object is associated with." test(function() { assert_equals(global.Object.getPrototypeOf(exception), global.DOMException.prototype); }, desc + "Object.getPrototypeOf(exception) === DOMException.prototype"); - // https://heycam.github.io/webidl/#es-creating-throwing-exceptions - // (as of 2015-01-03): "Call the [[DefineOwnProperty]] internal method of /O/ - // passing “name”, Property Descriptor { [[Value]]: /N/, [[Writable]]: true, - // [[Enumerable]]: true, [[Configurable]]: true }, and false as arguments." test(function() { - assert_true(exception.hasOwnProperty("name")); + assert_false(exception.hasOwnProperty("name")); }, desc + "exception.hasOwnProperty(\"name\")"); + test(function() { + assert_false(exception.hasOwnProperty("message")); + }, desc + "exception.hasOwnProperty(\"message\")"); test(function() { assert_equals(exception.name, "HierarchyRequestError"); }, desc + "exception.name === \"HierarchyRequestError\""); test(function() { - var desc = global.Object.getOwnPropertyDescriptor(exception, "name"); - assert_true(desc.writable, "must be writable"); - assert_true(desc.enumerable, "must be enumerable"); - assert_true(desc.configurable, "must be configurable"); - }, desc + "Object.getOwnPropertyDescriptor(exception, \"name\")"); - - - // https://heycam.github.io/webidl/#es-creating-throwing-exceptions - // (as of 2015-01-03): "If the optional user agent-defined message /M/ was - // specified, then this list has a single element whose value is the result - // of converting /M/ to a String value. Otherwise, the list is empty." - // - // https://heycam.github.io/webidl/#es-DOMException-constructor-object - // (as of 2015-01-03): "Call the [[DefineOwnProperty]] internal method of /O/ - // passing “message”, Property Descriptor { [[Value]]: /S/, - // [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }, and - // false as arguments." - test(function() { - if (exception.hasOwnProperty("message")) { - var desc = global.Object.getOwnPropertyDescriptor(exception, "message"); - assert_true(desc.writable, "must be writable"); - assert_false(desc.enumerable, "must not be enumerable"); - assert_true(desc.configurable, "must be configurable"); - } - }, desc + "Object.getOwnPropertyDescriptor(exception, \"message\")"); - - test(function() { - if (exception.hasOwnProperty("message")) { - // Can't test anything more specific, since it's implementation-defined :( - assert_equals(typeof exception.message, "string"); - } else { - // Error.prototype.message - assert_equals(exception.message, ""); - } - }, desc + "typeof exception.message === \"string\""); - - - // https://heycam.github.io/webidl/#es-exception-objects - // (as of 2015-01-03): "The class string of a DOMException object MUST be - // “DOMException”." - test(function() { - assert_equals(global.Object.prototype.toString.call(exception), - "[object DOMException]"); - }, desc + "Object.prototype.toString.call(exception) === \"[object DOMException]\""); - - - // https://heycam.github.io/webidl/#es-creating-throwing-exceptions - // (as of 2015-01-03): "Call the [[DefineOwnProperty]] internal method of /O/ - // passing “code”, Property Descriptor { [[Value]]: /code/, - // [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true }, and - // false as arguments." - test(function() { assert_equals(exception.code, global.DOMException.HIERARCHY_REQUEST_ERR); }, desc + "exception.code === DOMException.HIERARCHY_REQUEST_ERR"); test(function() { - var desc = global.Object.getOwnPropertyDescriptor(exception, "name"); - assert_true(desc.writable, "must be writable"); - assert_true(desc.enumerable, "must be enumerable"); - assert_true(desc.configurable, "must be configurable"); - }, desc + "Object.getOwnPropertyDescriptor(exception, \"code\")"); + assert_equals(global.Object.prototype.toString.call(exception), + "[object DOMException]"); + }, desc + "Object.prototype.toString.call(exception) === \"[object DOMException]\""); }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any-expected.txt new file mode 100644 index 0000000..a19cf28 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL A constructed EventTarget can be used as expected Illegal constructor +FAIL EventTarget can be subclassed Illegal constructor +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any.js b/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any.js new file mode 100644 index 0000000..b0e7614 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any.js
@@ -0,0 +1,62 @@ +"use strict"; + +test(() => { + const target = new EventTarget(); + const event = new Event("foo", { bubbles: true, cancelable: false }); + let callCount = 0; + + function listener(e) { + assert_equals(e, event); + ++callCount; + } + + target.addEventListener("foo", listener); + + target.dispatchEvent(event); + assert_equals(callCount, 1); + + target.dispatchEvent(event); + assert_equals(callCount, 2); + + target.removeEventListener("foo", listener); + target.dispatchEvent(event); + assert_equals(callCount, 2); +}, "A constructed EventTarget can be used as expected"); + +test(() => { + class NicerEventTarget extends EventTarget { + on(...args) { + this.addEventListener(...args); + } + + off(...args) { + this.removeEventListener(...args); + } + + dispatch(type, detail) { + this.dispatchEvent(new CustomEvent(type, { detail })); + } + } + + const target = new NicerEventTarget(); + const event = new Event("foo", { bubbles: true, cancelable: false }); + const detail = "some data"; + let callCount = 0; + + function listener(e) { + assert_equals(e.detail, detail); + ++callCount; + } + + target.on("foo", listener); + + target.dispatch("foo", detail); + assert_equals(callCount, 1); + + target.dispatch("foo", detail); + assert_equals(callCount, 2); + + target.off("foo", listener); + target.dispatch("foo", detail); + assert_equals(callCount, 2); +}, "EventTarget can be subclassed");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any.worker-expected.txt new file mode 100644 index 0000000..a19cf28 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/events/EventTarget-constructible.any.worker-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL A constructed EventTarget can be used as expected Illegal constructor +FAIL EventTarget can be subclassed Illegal constructor +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt new file mode 100644 index 0000000..a5f71f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt
@@ -0,0 +1,1622 @@ +This is a testharness.js-based test. +Found 1618 tests; 1610 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS Test driver +PASS Event interface: existence and properties of interface object +PASS Event interface object length +PASS Event interface object name +PASS Event interface: existence and properties of interface prototype object +PASS Event interface: existence and properties of interface prototype object's "constructor" property +PASS Event interface: attribute type +PASS Event interface: attribute target +PASS Event interface: attribute currentTarget +PASS Event interface: constant NONE on interface object +PASS Event interface: constant NONE on interface prototype object +PASS Event interface: constant CAPTURING_PHASE on interface object +PASS Event interface: constant CAPTURING_PHASE on interface prototype object +PASS Event interface: constant AT_TARGET on interface object +PASS Event interface: constant AT_TARGET on interface prototype object +PASS Event interface: constant BUBBLING_PHASE on interface object +PASS Event interface: constant BUBBLING_PHASE on interface prototype object +PASS Event interface: attribute eventPhase +PASS Event interface: operation stopPropagation() +PASS Event interface: operation stopImmediatePropagation() +PASS Event interface: attribute bubbles +PASS Event interface: attribute cancelable +PASS Event interface: operation preventDefault() +PASS Event interface: attribute defaultPrevented +PASS Event interface: attribute timeStamp +PASS Event interface: operation initEvent(DOMString,boolean,boolean) +PASS Event must be primary interface of document.createEvent("Event") +PASS Stringification of document.createEvent("Event") +PASS Event interface: document.createEvent("Event") must inherit property "type" with the proper type (0) +PASS Event interface: document.createEvent("Event") must inherit property "target" with the proper type (1) +PASS Event interface: document.createEvent("Event") must inherit property "currentTarget" with the proper type (2) +PASS Event interface: document.createEvent("Event") must inherit property "NONE" with the proper type (3) +PASS Event interface: document.createEvent("Event") must inherit property "CAPTURING_PHASE" with the proper type (4) +PASS Event interface: document.createEvent("Event") must inherit property "AT_TARGET" with the proper type (5) +PASS Event interface: document.createEvent("Event") must inherit property "BUBBLING_PHASE" with the proper type (6) +PASS Event interface: document.createEvent("Event") must inherit property "eventPhase" with the proper type (7) +PASS Event interface: document.createEvent("Event") must inherit property "stopPropagation" with the proper type (8) +PASS Event interface: document.createEvent("Event") must inherit property "stopImmediatePropagation" with the proper type (9) +PASS Event interface: document.createEvent("Event") must inherit property "bubbles" with the proper type (10) +PASS Event interface: document.createEvent("Event") must inherit property "cancelable" with the proper type (11) +PASS Event interface: document.createEvent("Event") must inherit property "preventDefault" with the proper type (12) +PASS Event interface: document.createEvent("Event") must inherit property "defaultPrevented" with the proper type (13) +PASS Event interface: document.createEvent("Event") must have own property "isTrusted" +PASS Event interface: document.createEvent("Event") must inherit property "timeStamp" with the proper type (15) +PASS Event interface: document.createEvent("Event") must inherit property "initEvent" with the proper type (16) +PASS Event interface: calling initEvent(DOMString,boolean,boolean) on document.createEvent("Event") with too few arguments must throw TypeError +PASS Event must be primary interface of new Event("foo") +PASS Stringification of new Event("foo") +PASS Event interface: new Event("foo") must inherit property "type" with the proper type (0) +PASS Event interface: new Event("foo") must inherit property "target" with the proper type (1) +PASS Event interface: new Event("foo") must inherit property "currentTarget" with the proper type (2) +PASS Event interface: new Event("foo") must inherit property "NONE" with the proper type (3) +PASS Event interface: new Event("foo") must inherit property "CAPTURING_PHASE" with the proper type (4) +PASS Event interface: new Event("foo") must inherit property "AT_TARGET" with the proper type (5) +PASS Event interface: new Event("foo") must inherit property "BUBBLING_PHASE" with the proper type (6) +PASS Event interface: new Event("foo") must inherit property "eventPhase" with the proper type (7) +PASS Event interface: new Event("foo") must inherit property "stopPropagation" with the proper type (8) +PASS Event interface: new Event("foo") must inherit property "stopImmediatePropagation" with the proper type (9) +PASS Event interface: new Event("foo") must inherit property "bubbles" with the proper type (10) +PASS Event interface: new Event("foo") must inherit property "cancelable" with the proper type (11) +PASS Event interface: new Event("foo") must inherit property "preventDefault" with the proper type (12) +PASS Event interface: new Event("foo") must inherit property "defaultPrevented" with the proper type (13) +PASS Event interface: new Event("foo") must have own property "isTrusted" +PASS Event interface: new Event("foo") must inherit property "timeStamp" with the proper type (15) +PASS Event interface: new Event("foo") must inherit property "initEvent" with the proper type (16) +PASS Event interface: calling initEvent(DOMString,boolean,boolean) on new Event("foo") with too few arguments must throw TypeError +PASS CustomEvent interface: existence and properties of interface object +PASS CustomEvent interface object length +PASS CustomEvent interface object name +PASS CustomEvent interface: existence and properties of interface prototype object +PASS CustomEvent interface: existence and properties of interface prototype object's "constructor" property +PASS CustomEvent interface: attribute detail +PASS CustomEvent interface: operation initCustomEvent(DOMString,boolean,boolean,any) +PASS CustomEvent must be primary interface of new CustomEvent("foo") +PASS Stringification of new CustomEvent("foo") +PASS CustomEvent interface: new CustomEvent("foo") must inherit property "detail" with the proper type (0) +PASS CustomEvent interface: new CustomEvent("foo") must inherit property "initCustomEvent" with the proper type (1) +PASS CustomEvent interface: calling initCustomEvent(DOMString,boolean,boolean,any) on new CustomEvent("foo") with too few arguments must throw TypeError +PASS Event interface: new CustomEvent("foo") must inherit property "type" with the proper type (0) +PASS Event interface: new CustomEvent("foo") must inherit property "target" with the proper type (1) +PASS Event interface: new CustomEvent("foo") must inherit property "currentTarget" with the proper type (2) +PASS Event interface: new CustomEvent("foo") must inherit property "NONE" with the proper type (3) +PASS Event interface: new CustomEvent("foo") must inherit property "CAPTURING_PHASE" with the proper type (4) +PASS Event interface: new CustomEvent("foo") must inherit property "AT_TARGET" with the proper type (5) +PASS Event interface: new CustomEvent("foo") must inherit property "BUBBLING_PHASE" with the proper type (6) +PASS Event interface: new CustomEvent("foo") must inherit property "eventPhase" with the proper type (7) +PASS Event interface: new CustomEvent("foo") must inherit property "stopPropagation" with the proper type (8) +PASS Event interface: new CustomEvent("foo") must inherit property "stopImmediatePropagation" with the proper type (9) +PASS Event interface: new CustomEvent("foo") must inherit property "bubbles" with the proper type (10) +PASS Event interface: new CustomEvent("foo") must inherit property "cancelable" with the proper type (11) +PASS Event interface: new CustomEvent("foo") must inherit property "preventDefault" with the proper type (12) +PASS Event interface: new CustomEvent("foo") must inherit property "defaultPrevented" with the proper type (13) +PASS Event interface: new CustomEvent("foo") must have own property "isTrusted" +PASS Event interface: new CustomEvent("foo") must inherit property "timeStamp" with the proper type (15) +PASS Event interface: new CustomEvent("foo") must inherit property "initEvent" with the proper type (16) +PASS Event interface: calling initEvent(DOMString,boolean,boolean) on new CustomEvent("foo") with too few arguments must throw TypeError +PASS EventTarget interface: existence and properties of interface object +PASS EventTarget interface object length +PASS EventTarget interface object name +PASS EventTarget interface: existence and properties of interface prototype object +PASS EventTarget interface: existence and properties of interface prototype object's "constructor" property +PASS EventTarget interface: operation addEventListener(DOMString,EventListener,[object Object],[object Object]) +PASS EventTarget interface: operation removeEventListener(DOMString,EventListener,[object Object],[object Object]) +PASS EventTarget interface: operation dispatchEvent(Event) +FAIL EventTarget must be primary interface of new EventTarget() assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL Stringification of new EventTarget() assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL EventTarget interface: new EventTarget() must inherit property "addEventListener" with the proper type (0) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL EventTarget interface: new EventTarget() must inherit property "removeEventListener" with the proper type (1) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL EventTarget interface: new EventTarget() must inherit property "dispatchEvent" with the proper type (2) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +FAIL EventTarget interface: calling dispatchEvent(Event) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Illegal constructor" +PASS EventListener interface: existence and properties of interface object +PASS EventListener interface: existence and properties of interface prototype object +PASS EventListener interface: existence and properties of interface prototype object's "constructor" property +PASS EventListener interface: operation handleEvent(Event) +PASS NodeList interface: existence and properties of interface object +PASS NodeList interface object length +PASS NodeList interface object name +PASS NodeList interface: existence and properties of interface prototype object +PASS NodeList interface: existence and properties of interface prototype object's "constructor" property +PASS NodeList interface: operation item(unsigned long) +PASS NodeList interface: attribute length +PASS NodeList must be primary interface of document.querySelectorAll("script") +PASS Stringification of document.querySelectorAll("script") +PASS NodeList interface: document.querySelectorAll("script") must inherit property "item" with the proper type (0) +PASS NodeList interface: calling item(unsigned long) on document.querySelectorAll("script") with too few arguments must throw TypeError +PASS NodeList interface: document.querySelectorAll("script") must inherit property "length" with the proper type (1) +PASS HTMLCollection interface: existence and properties of interface object +PASS HTMLCollection interface object length +PASS HTMLCollection interface object name +PASS HTMLCollection interface: existence and properties of interface prototype object +PASS HTMLCollection interface: existence and properties of interface prototype object's "constructor" property +PASS HTMLCollection interface: attribute length +PASS HTMLCollection interface: operation item(unsigned long) +PASS HTMLCollection interface: operation namedItem(DOMString) +PASS HTMLCollection must be primary interface of document.body.children +PASS Stringification of document.body.children +PASS HTMLCollection interface: document.body.children must inherit property "length" with the proper type (0) +PASS HTMLCollection interface: document.body.children must inherit property "item" with the proper type (1) +PASS HTMLCollection interface: calling item(unsigned long) on document.body.children with too few arguments must throw TypeError +PASS HTMLCollection interface: document.body.children must inherit property "namedItem" with the proper type (2) +PASS HTMLCollection interface: calling namedItem(DOMString) on document.body.children with too few arguments must throw TypeError +PASS MutationObserver interface: existence and properties of interface object +PASS MutationObserver interface object length +PASS MutationObserver interface object name +PASS MutationObserver interface: existence and properties of interface prototype object +PASS MutationObserver interface: existence and properties of interface prototype object's "constructor" property +PASS MutationObserver interface: operation observe(Node,MutationObserverInit) +PASS MutationObserver interface: operation disconnect() +PASS MutationObserver interface: operation takeRecords() +PASS MutationRecord interface: existence and properties of interface object +PASS MutationRecord interface object length +PASS MutationRecord interface object name +PASS MutationRecord interface: existence and properties of interface prototype object +PASS MutationRecord interface: existence and properties of interface prototype object's "constructor" property +PASS MutationRecord interface: attribute type +PASS MutationRecord interface: attribute target +PASS MutationRecord interface: attribute addedNodes +PASS MutationRecord interface: attribute removedNodes +PASS MutationRecord interface: attribute previousSibling +PASS MutationRecord interface: attribute nextSibling +PASS MutationRecord interface: attribute attributeName +PASS MutationRecord interface: attribute attributeNamespace +PASS MutationRecord interface: attribute oldValue +PASS Node interface: existence and properties of interface object +PASS Node interface object length +PASS Node interface object name +PASS Node interface: existence and properties of interface prototype object +PASS Node interface: existence and properties of interface prototype object's "constructor" property +PASS Node interface: constant ELEMENT_NODE on interface object +PASS Node interface: constant ELEMENT_NODE on interface prototype object +PASS Node interface: constant ATTRIBUTE_NODE on interface object +PASS Node interface: constant ATTRIBUTE_NODE on interface prototype object +PASS Node interface: constant TEXT_NODE on interface object +PASS Node interface: constant TEXT_NODE on interface prototype object +PASS Node interface: constant CDATA_SECTION_NODE on interface object +PASS Node interface: constant CDATA_SECTION_NODE on interface prototype object +PASS Node interface: constant ENTITY_REFERENCE_NODE on interface object +PASS Node interface: constant ENTITY_REFERENCE_NODE on interface prototype object +PASS Node interface: constant ENTITY_NODE on interface object +PASS Node interface: constant ENTITY_NODE on interface prototype object +PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface object +PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface prototype object +PASS Node interface: constant COMMENT_NODE on interface object +PASS Node interface: constant COMMENT_NODE on interface prototype object +PASS Node interface: constant DOCUMENT_NODE on interface object +PASS Node interface: constant DOCUMENT_NODE on interface prototype object +PASS Node interface: constant DOCUMENT_TYPE_NODE on interface object +PASS Node interface: constant DOCUMENT_TYPE_NODE on interface prototype object +PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface object +PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface prototype object +PASS Node interface: constant NOTATION_NODE on interface object +PASS Node interface: constant NOTATION_NODE on interface prototype object +PASS Node interface: attribute nodeType +PASS Node interface: attribute nodeName +PASS Node interface: attribute baseURI +PASS Node interface: attribute isConnected +PASS Node interface: attribute ownerDocument +PASS Node interface: operation getRootNode(GetRootNodeOptions) +PASS Node interface: attribute parentNode +PASS Node interface: attribute parentElement +PASS Node interface: operation hasChildNodes() +PASS Node interface: attribute childNodes +PASS Node interface: attribute firstChild +PASS Node interface: attribute lastChild +PASS Node interface: attribute previousSibling +PASS Node interface: attribute nextSibling +PASS Node interface: attribute nodeValue +PASS Node interface: attribute textContent +PASS Node interface: operation normalize() +PASS Node interface: operation cloneNode(boolean) +PASS Node interface: operation isEqualNode(Node) +PASS Node interface: operation isSameNode(Node) +PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface object +PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface prototype object +PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface object +PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface prototype object +PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface object +PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface prototype object +PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface object +PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface prototype object +PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface object +PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface prototype object +PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface object +PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface prototype object +PASS Node interface: operation compareDocumentPosition(Node) +PASS Node interface: operation contains(Node) +PASS Node interface: operation lookupPrefix(DOMString) +PASS Node interface: operation lookupNamespaceURI(DOMString) +PASS Node interface: operation isDefaultNamespace(DOMString) +PASS Node interface: operation insertBefore(Node,Node) +PASS Node interface: operation appendChild(Node) +PASS Node interface: operation replaceChild(Node,Node) +PASS Node interface: operation removeChild(Node) +PASS Document interface: existence and properties of interface object +PASS Document interface object length +PASS Document interface object name +PASS Document interface: existence and properties of interface prototype object +PASS Document interface: existence and properties of interface prototype object's "constructor" property +PASS Document interface: attribute implementation +PASS Document interface: attribute URL +PASS Document interface: attribute documentURI +PASS Document interface: attribute origin +PASS Document interface: attribute compatMode +PASS Document interface: attribute characterSet +PASS Document interface: attribute charset +PASS Document interface: attribute inputEncoding +PASS Document interface: attribute contentType +PASS Document interface: attribute doctype +PASS Document interface: attribute documentElement +PASS Document interface: operation getElementsByTagName(DOMString) +PASS Document interface: operation getElementsByTagNameNS(DOMString,DOMString) +PASS Document interface: operation getElementsByClassName(DOMString) +PASS Document interface: operation createElement(DOMString,ElementCreationOptions) +PASS Document interface: operation createElementNS(DOMString,DOMString,ElementCreationOptions) +PASS Document interface: operation createDocumentFragment() +PASS Document interface: operation createTextNode(DOMString) +PASS Document interface: operation createCDATASection(DOMString) +PASS Document interface: operation createComment(DOMString) +PASS Document interface: operation createProcessingInstruction(DOMString,DOMString) +PASS Document interface: operation importNode(Node,boolean) +PASS Document interface: operation adoptNode(Node) +PASS Document interface: operation createAttribute(DOMString) +PASS Document interface: operation createAttributeNS(DOMString,DOMString) +PASS Document interface: operation createEvent(DOMString) +PASS Document interface: operation createRange() +PASS Document interface: operation createNodeIterator(Node,unsigned long,NodeFilter) +PASS Document interface: operation createTreeWalker(Node,unsigned long,NodeFilter) +PASS Document interface: operation getElementById(DOMString) +PASS Document interface: attribute children +PASS Document interface: attribute firstElementChild +PASS Document interface: attribute lastElementChild +PASS Document interface: attribute childElementCount +PASS Document interface: operation prepend([object Object],[object Object]) +PASS Document interface: operation append([object Object],[object Object]) +PASS Document interface: operation querySelector(DOMString) +PASS Document interface: operation querySelectorAll(DOMString) +PASS Document must be primary interface of new Document() +PASS Stringification of new Document() +PASS Document interface: new Document() must inherit property "implementation" with the proper type (0) +PASS Document interface: new Document() must inherit property "URL" with the proper type (1) +PASS Document interface: new Document() must inherit property "documentURI" with the proper type (2) +PASS Document interface: new Document() must inherit property "origin" with the proper type (3) +PASS Document interface: new Document() must inherit property "compatMode" with the proper type (4) +PASS Document interface: new Document() must inherit property "characterSet" with the proper type (5) +PASS Document interface: new Document() must inherit property "charset" with the proper type (6) +PASS Document interface: new Document() must inherit property "inputEncoding" with the proper type (7) +PASS Document interface: new Document() must inherit property "contentType" with the proper type (8) +PASS Document interface: new Document() must inherit property "doctype" with the proper type (9) +PASS Document interface: new Document() must inherit property "documentElement" with the proper type (10) +PASS Document interface: new Document() must inherit property "getElementsByTagName" with the proper type (11) +PASS Document interface: calling getElementsByTagName(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "getElementsByTagNameNS" with the proper type (12) +PASS Document interface: calling getElementsByTagNameNS(DOMString,DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "getElementsByClassName" with the proper type (13) +PASS Document interface: calling getElementsByClassName(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createElement" with the proper type (14) +PASS Document interface: calling createElement(DOMString,ElementCreationOptions) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createElementNS" with the proper type (15) +PASS Document interface: calling createElementNS(DOMString,DOMString,ElementCreationOptions) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createDocumentFragment" with the proper type (16) +PASS Document interface: new Document() must inherit property "createTextNode" with the proper type (17) +PASS Document interface: calling createTextNode(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createCDATASection" with the proper type (18) +PASS Document interface: calling createCDATASection(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createComment" with the proper type (19) +PASS Document interface: calling createComment(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createProcessingInstruction" with the proper type (20) +PASS Document interface: calling createProcessingInstruction(DOMString,DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "importNode" with the proper type (21) +PASS Document interface: calling importNode(Node,boolean) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "adoptNode" with the proper type (22) +PASS Document interface: calling adoptNode(Node) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createAttribute" with the proper type (23) +PASS Document interface: calling createAttribute(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createAttributeNS" with the proper type (24) +PASS Document interface: calling createAttributeNS(DOMString,DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createEvent" with the proper type (25) +PASS Document interface: calling createEvent(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createRange" with the proper type (26) +PASS Document interface: new Document() must inherit property "createNodeIterator" with the proper type (27) +PASS Document interface: calling createNodeIterator(Node,unsigned long,NodeFilter) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "createTreeWalker" with the proper type (28) +PASS Document interface: calling createTreeWalker(Node,unsigned long,NodeFilter) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "getElementById" with the proper type (29) +PASS Document interface: calling getElementById(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "children" with the proper type (30) +PASS Document interface: new Document() must inherit property "firstElementChild" with the proper type (31) +PASS Document interface: new Document() must inherit property "lastElementChild" with the proper type (32) +PASS Document interface: new Document() must inherit property "childElementCount" with the proper type (33) +PASS Document interface: new Document() must inherit property "prepend" with the proper type (34) +PASS Document interface: calling prepend([object Object],[object Object]) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "append" with the proper type (35) +PASS Document interface: calling append([object Object],[object Object]) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "querySelector" with the proper type (36) +PASS Document interface: calling querySelector(DOMString) on new Document() with too few arguments must throw TypeError +PASS Document interface: new Document() must inherit property "querySelectorAll" with the proper type (37) +PASS Document interface: calling querySelectorAll(DOMString) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: new Document() must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: new Document() must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: new Document() must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: new Document() must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: new Document() must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: new Document() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: new Document() must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: new Document() must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: new Document() must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: new Document() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: new Document() must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: new Document() must inherit property "nodeType" with the proper type (12) +PASS Node interface: new Document() must inherit property "nodeName" with the proper type (13) +PASS Node interface: new Document() must inherit property "baseURI" with the proper type (14) +PASS Node interface: new Document() must inherit property "isConnected" with the proper type (15) +PASS Node interface: new Document() must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: new Document() must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "parentNode" with the proper type (18) +PASS Node interface: new Document() must inherit property "parentElement" with the proper type (19) +PASS Node interface: new Document() must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: new Document() must inherit property "childNodes" with the proper type (21) +PASS Node interface: new Document() must inherit property "firstChild" with the proper type (22) +PASS Node interface: new Document() must inherit property "lastChild" with the proper type (23) +PASS Node interface: new Document() must inherit property "previousSibling" with the proper type (24) +PASS Node interface: new Document() must inherit property "nextSibling" with the proper type (25) +PASS Node interface: new Document() must inherit property "nodeValue" with the proper type (26) +PASS Node interface: new Document() must inherit property "textContent" with the proper type (27) +PASS Node interface: new Document() must inherit property "normalize" with the proper type (28) +PASS Node interface: new Document() must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: new Document() must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on new Document() with too few arguments must throw TypeError +PASS Node interface: new Document() must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on new Document() with too few arguments must throw TypeError +PASS EventTarget interface: new Document() must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on new Document() with too few arguments must throw TypeError +PASS EventTarget interface: new Document() must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on new Document() with too few arguments must throw TypeError +PASS EventTarget interface: new Document() must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on new Document() with too few arguments must throw TypeError +PASS XMLDocument interface: existence and properties of interface object +PASS XMLDocument interface object length +PASS XMLDocument interface object name +PASS XMLDocument interface: existence and properties of interface prototype object +PASS XMLDocument interface: existence and properties of interface prototype object's "constructor" property +PASS XMLDocument must be primary interface of xmlDoc +PASS Stringification of xmlDoc +PASS Document interface: xmlDoc must inherit property "implementation" with the proper type (0) +PASS Document interface: xmlDoc must inherit property "URL" with the proper type (1) +PASS Document interface: xmlDoc must inherit property "documentURI" with the proper type (2) +PASS Document interface: xmlDoc must inherit property "origin" with the proper type (3) +PASS Document interface: xmlDoc must inherit property "compatMode" with the proper type (4) +PASS Document interface: xmlDoc must inherit property "characterSet" with the proper type (5) +PASS Document interface: xmlDoc must inherit property "charset" with the proper type (6) +PASS Document interface: xmlDoc must inherit property "inputEncoding" with the proper type (7) +PASS Document interface: xmlDoc must inherit property "contentType" with the proper type (8) +PASS Document interface: xmlDoc must inherit property "doctype" with the proper type (9) +PASS Document interface: xmlDoc must inherit property "documentElement" with the proper type (10) +PASS Document interface: xmlDoc must inherit property "getElementsByTagName" with the proper type (11) +PASS Document interface: calling getElementsByTagName(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "getElementsByTagNameNS" with the proper type (12) +PASS Document interface: calling getElementsByTagNameNS(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "getElementsByClassName" with the proper type (13) +PASS Document interface: calling getElementsByClassName(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createElement" with the proper type (14) +PASS Document interface: calling createElement(DOMString,ElementCreationOptions) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createElementNS" with the proper type (15) +PASS Document interface: calling createElementNS(DOMString,DOMString,ElementCreationOptions) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createDocumentFragment" with the proper type (16) +PASS Document interface: xmlDoc must inherit property "createTextNode" with the proper type (17) +PASS Document interface: calling createTextNode(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createCDATASection" with the proper type (18) +PASS Document interface: calling createCDATASection(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createComment" with the proper type (19) +PASS Document interface: calling createComment(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createProcessingInstruction" with the proper type (20) +PASS Document interface: calling createProcessingInstruction(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "importNode" with the proper type (21) +PASS Document interface: calling importNode(Node,boolean) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "adoptNode" with the proper type (22) +PASS Document interface: calling adoptNode(Node) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createAttribute" with the proper type (23) +PASS Document interface: calling createAttribute(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createAttributeNS" with the proper type (24) +PASS Document interface: calling createAttributeNS(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createEvent" with the proper type (25) +PASS Document interface: calling createEvent(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createRange" with the proper type (26) +PASS Document interface: xmlDoc must inherit property "createNodeIterator" with the proper type (27) +PASS Document interface: calling createNodeIterator(Node,unsigned long,NodeFilter) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "createTreeWalker" with the proper type (28) +PASS Document interface: calling createTreeWalker(Node,unsigned long,NodeFilter) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "getElementById" with the proper type (29) +PASS Document interface: calling getElementById(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "children" with the proper type (30) +PASS Document interface: xmlDoc must inherit property "firstElementChild" with the proper type (31) +PASS Document interface: xmlDoc must inherit property "lastElementChild" with the proper type (32) +PASS Document interface: xmlDoc must inherit property "childElementCount" with the proper type (33) +PASS Document interface: xmlDoc must inherit property "prepend" with the proper type (34) +PASS Document interface: calling prepend([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "append" with the proper type (35) +PASS Document interface: calling append([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "querySelector" with the proper type (36) +PASS Document interface: calling querySelector(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Document interface: xmlDoc must inherit property "querySelectorAll" with the proper type (37) +PASS Document interface: calling querySelectorAll(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: xmlDoc must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: xmlDoc must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: xmlDoc must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: xmlDoc must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: xmlDoc must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: xmlDoc must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: xmlDoc must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: xmlDoc must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: xmlDoc must inherit property "nodeType" with the proper type (12) +PASS Node interface: xmlDoc must inherit property "nodeName" with the proper type (13) +PASS Node interface: xmlDoc must inherit property "baseURI" with the proper type (14) +PASS Node interface: xmlDoc must inherit property "isConnected" with the proper type (15) +PASS Node interface: xmlDoc must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: xmlDoc must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "parentNode" with the proper type (18) +PASS Node interface: xmlDoc must inherit property "parentElement" with the proper type (19) +PASS Node interface: xmlDoc must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: xmlDoc must inherit property "childNodes" with the proper type (21) +PASS Node interface: xmlDoc must inherit property "firstChild" with the proper type (22) +PASS Node interface: xmlDoc must inherit property "lastChild" with the proper type (23) +PASS Node interface: xmlDoc must inherit property "previousSibling" with the proper type (24) +PASS Node interface: xmlDoc must inherit property "nextSibling" with the proper type (25) +PASS Node interface: xmlDoc must inherit property "nodeValue" with the proper type (26) +PASS Node interface: xmlDoc must inherit property "textContent" with the proper type (27) +PASS Node interface: xmlDoc must inherit property "normalize" with the proper type (28) +PASS Node interface: xmlDoc must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: xmlDoc must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on xmlDoc with too few arguments must throw TypeError +PASS Node interface: xmlDoc must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on xmlDoc with too few arguments must throw TypeError +PASS EventTarget interface: xmlDoc must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError +PASS EventTarget interface: xmlDoc must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError +PASS EventTarget interface: xmlDoc must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc with too few arguments must throw TypeError +PASS DOMImplementation interface: existence and properties of interface object +PASS DOMImplementation interface object length +PASS DOMImplementation interface object name +PASS DOMImplementation interface: existence and properties of interface prototype object +PASS DOMImplementation interface: existence and properties of interface prototype object's "constructor" property +PASS DOMImplementation interface: operation createDocumentType(DOMString,DOMString,DOMString) +PASS DOMImplementation interface: operation createDocument(DOMString,DOMString,DocumentType) +PASS DOMImplementation interface: operation createHTMLDocument(DOMString) +PASS DOMImplementation interface: operation hasFeature() +PASS DOMImplementation must be primary interface of document.implementation +PASS Stringification of document.implementation +PASS DOMImplementation interface: document.implementation must inherit property "createDocumentType" with the proper type (0) +PASS DOMImplementation interface: calling createDocumentType(DOMString,DOMString,DOMString) on document.implementation with too few arguments must throw TypeError +PASS DOMImplementation interface: document.implementation must inherit property "createDocument" with the proper type (1) +PASS DOMImplementation interface: calling createDocument(DOMString,DOMString,DocumentType) on document.implementation with too few arguments must throw TypeError +PASS DOMImplementation interface: document.implementation must inherit property "createHTMLDocument" with the proper type (2) +PASS DOMImplementation interface: calling createHTMLDocument(DOMString) on document.implementation with too few arguments must throw TypeError +PASS DOMImplementation interface: document.implementation must inherit property "hasFeature" with the proper type (3) +PASS DocumentType interface: existence and properties of interface object +PASS DocumentType interface object length +PASS DocumentType interface object name +PASS DocumentType interface: existence and properties of interface prototype object +PASS DocumentType interface: existence and properties of interface prototype object's "constructor" property +PASS DocumentType interface: attribute name +PASS DocumentType interface: attribute publicId +PASS DocumentType interface: attribute systemId +PASS DocumentType interface: operation before([object Object],[object Object]) +PASS DocumentType interface: operation after([object Object],[object Object]) +PASS DocumentType interface: operation replaceWith([object Object],[object Object]) +PASS DocumentType interface: operation remove() +PASS DocumentType must be primary interface of document.doctype +PASS Stringification of document.doctype +PASS DocumentType interface: document.doctype must inherit property "name" with the proper type (0) +PASS DocumentType interface: document.doctype must inherit property "publicId" with the proper type (1) +PASS DocumentType interface: document.doctype must inherit property "systemId" with the proper type (2) +PASS DocumentType interface: document.doctype must inherit property "before" with the proper type (3) +PASS DocumentType interface: calling before([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError +PASS DocumentType interface: document.doctype must inherit property "after" with the proper type (4) +PASS DocumentType interface: calling after([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError +PASS DocumentType interface: document.doctype must inherit property "replaceWith" with the proper type (5) +PASS DocumentType interface: calling replaceWith([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError +PASS DocumentType interface: document.doctype must inherit property "remove" with the proper type (6) +PASS Node interface: document.doctype must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: document.doctype must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: document.doctype must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: document.doctype must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: document.doctype must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: document.doctype must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: document.doctype must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: document.doctype must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: document.doctype must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: document.doctype must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: document.doctype must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: document.doctype must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: document.doctype must inherit property "nodeType" with the proper type (12) +PASS Node interface: document.doctype must inherit property "nodeName" with the proper type (13) +PASS Node interface: document.doctype must inherit property "baseURI" with the proper type (14) +PASS Node interface: document.doctype must inherit property "isConnected" with the proper type (15) +PASS Node interface: document.doctype must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: document.doctype must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "parentNode" with the proper type (18) +PASS Node interface: document.doctype must inherit property "parentElement" with the proper type (19) +PASS Node interface: document.doctype must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: document.doctype must inherit property "childNodes" with the proper type (21) +PASS Node interface: document.doctype must inherit property "firstChild" with the proper type (22) +PASS Node interface: document.doctype must inherit property "lastChild" with the proper type (23) +PASS Node interface: document.doctype must inherit property "previousSibling" with the proper type (24) +PASS Node interface: document.doctype must inherit property "nextSibling" with the proper type (25) +PASS Node interface: document.doctype must inherit property "nodeValue" with the proper type (26) +PASS Node interface: document.doctype must inherit property "textContent" with the proper type (27) +PASS Node interface: document.doctype must inherit property "normalize" with the proper type (28) +PASS Node interface: document.doctype must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: document.doctype must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on document.doctype with too few arguments must throw TypeError +PASS Node interface: document.doctype must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on document.doctype with too few arguments must throw TypeError +PASS EventTarget interface: document.doctype must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on document.doctype with too few arguments must throw TypeError +PASS EventTarget interface: document.doctype must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on document.doctype with too few arguments must throw TypeError +PASS EventTarget interface: document.doctype must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on document.doctype with too few arguments must throw TypeError +PASS DocumentFragment interface: existence and properties of interface object +PASS DocumentFragment interface object length +PASS DocumentFragment interface object name +PASS DocumentFragment interface: existence and properties of interface prototype object +PASS DocumentFragment interface: existence and properties of interface prototype object's "constructor" property +PASS DocumentFragment interface: operation getElementById(DOMString) +PASS DocumentFragment interface: attribute children +PASS DocumentFragment interface: attribute firstElementChild +PASS DocumentFragment interface: attribute lastElementChild +PASS DocumentFragment interface: attribute childElementCount +PASS DocumentFragment interface: operation prepend([object Object],[object Object]) +PASS DocumentFragment interface: operation append([object Object],[object Object]) +PASS DocumentFragment interface: operation querySelector(DOMString) +PASS DocumentFragment interface: operation querySelectorAll(DOMString) +PASS DocumentFragment must be primary interface of document.createDocumentFragment() +PASS Stringification of document.createDocumentFragment() +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "getElementById" with the proper type (0) +PASS DocumentFragment interface: calling getElementById(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "children" with the proper type (1) +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "firstElementChild" with the proper type (2) +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "lastElementChild" with the proper type (3) +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "childElementCount" with the proper type (4) +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "prepend" with the proper type (5) +PASS DocumentFragment interface: calling prepend([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "append" with the proper type (6) +PASS DocumentFragment interface: calling append([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelector" with the proper type (7) +PASS DocumentFragment interface: calling querySelector(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelectorAll" with the proper type (8) +PASS DocumentFragment interface: calling querySelectorAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: document.createDocumentFragment() must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: document.createDocumentFragment() must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: document.createDocumentFragment() must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: document.createDocumentFragment() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: document.createDocumentFragment() must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: document.createDocumentFragment() must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: document.createDocumentFragment() must inherit property "nodeType" with the proper type (12) +PASS Node interface: document.createDocumentFragment() must inherit property "nodeName" with the proper type (13) +PASS Node interface: document.createDocumentFragment() must inherit property "baseURI" with the proper type (14) +PASS Node interface: document.createDocumentFragment() must inherit property "isConnected" with the proper type (15) +PASS Node interface: document.createDocumentFragment() must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: document.createDocumentFragment() must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "parentNode" with the proper type (18) +PASS Node interface: document.createDocumentFragment() must inherit property "parentElement" with the proper type (19) +PASS Node interface: document.createDocumentFragment() must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: document.createDocumentFragment() must inherit property "childNodes" with the proper type (21) +PASS Node interface: document.createDocumentFragment() must inherit property "firstChild" with the proper type (22) +PASS Node interface: document.createDocumentFragment() must inherit property "lastChild" with the proper type (23) +PASS Node interface: document.createDocumentFragment() must inherit property "previousSibling" with the proper type (24) +PASS Node interface: document.createDocumentFragment() must inherit property "nextSibling" with the proper type (25) +PASS Node interface: document.createDocumentFragment() must inherit property "nodeValue" with the proper type (26) +PASS Node interface: document.createDocumentFragment() must inherit property "textContent" with the proper type (27) +PASS Node interface: document.createDocumentFragment() must inherit property "normalize" with the proper type (28) +PASS Node interface: document.createDocumentFragment() must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: document.createDocumentFragment() must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS Node interface: document.createDocumentFragment() must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS EventTarget interface: document.createDocumentFragment() must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS EventTarget interface: document.createDocumentFragment() must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS EventTarget interface: document.createDocumentFragment() must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on document.createDocumentFragment() with too few arguments must throw TypeError +PASS ShadowRoot interface: existence and properties of interface object +PASS ShadowRoot interface object length +PASS ShadowRoot interface object name +PASS ShadowRoot interface: existence and properties of interface prototype object +PASS ShadowRoot interface: existence and properties of interface prototype object's "constructor" property +PASS ShadowRoot interface: attribute mode +PASS ShadowRoot interface: attribute host +PASS Element interface: existence and properties of interface object +PASS Element interface object length +PASS Element interface object name +PASS Element interface: existence and properties of interface prototype object +PASS Element interface: existence and properties of interface prototype object's "constructor" property +PASS Element interface: attribute namespaceURI +PASS Element interface: attribute prefix +PASS Element interface: attribute localName +PASS Element interface: attribute tagName +PASS Element interface: attribute id +PASS Element interface: attribute className +PASS Element interface: attribute classList +PASS Element interface: attribute slot +PASS Element interface: operation hasAttributes() +PASS Element interface: attribute attributes +PASS Element interface: operation getAttributeNames() +PASS Element interface: operation getAttribute(DOMString) +PASS Element interface: operation getAttributeNS(DOMString,DOMString) +PASS Element interface: operation setAttribute(DOMString,DOMString) +PASS Element interface: operation setAttributeNS(DOMString,DOMString,DOMString) +PASS Element interface: operation removeAttribute(DOMString) +PASS Element interface: operation removeAttributeNS(DOMString,DOMString) +PASS Element interface: operation hasAttribute(DOMString) +PASS Element interface: operation hasAttributeNS(DOMString,DOMString) +PASS Element interface: operation getAttributeNode(DOMString) +PASS Element interface: operation getAttributeNodeNS(DOMString,DOMString) +PASS Element interface: operation setAttributeNode(Attr) +PASS Element interface: operation setAttributeNodeNS(Attr) +PASS Element interface: operation removeAttributeNode(Attr) +PASS Element interface: operation attachShadow(ShadowRootInit) +PASS Element interface: attribute shadowRoot +PASS Element interface: operation closest(DOMString) +PASS Element interface: operation matches(DOMString) +PASS Element interface: operation webkitMatchesSelector(DOMString) +PASS Element interface: operation getElementsByTagName(DOMString) +PASS Element interface: operation getElementsByTagNameNS(DOMString,DOMString) +PASS Element interface: operation getElementsByClassName(DOMString) +PASS Element interface: operation insertAdjacentElement(DOMString,Element) +PASS Element interface: operation insertAdjacentText(DOMString,DOMString) +PASS Element interface: attribute children +PASS Element interface: attribute firstElementChild +PASS Element interface: attribute lastElementChild +PASS Element interface: attribute childElementCount +PASS Element interface: operation prepend([object Object],[object Object]) +PASS Element interface: operation append([object Object],[object Object]) +PASS Element interface: operation querySelector(DOMString) +PASS Element interface: operation querySelectorAll(DOMString) +PASS Element interface: attribute previousElementSibling +PASS Element interface: attribute nextElementSibling +PASS Element interface: operation before([object Object],[object Object]) +PASS Element interface: operation after([object Object],[object Object]) +PASS Element interface: operation replaceWith([object Object],[object Object]) +PASS Element interface: operation remove() +PASS Element interface: attribute assignedSlot +PASS Element must be primary interface of element +PASS Stringification of element +PASS Element interface: element must inherit property "namespaceURI" with the proper type (0) +PASS Element interface: element must inherit property "prefix" with the proper type (1) +PASS Element interface: element must inherit property "localName" with the proper type (2) +PASS Element interface: element must inherit property "tagName" with the proper type (3) +PASS Element interface: element must inherit property "id" with the proper type (4) +PASS Element interface: element must inherit property "className" with the proper type (5) +PASS Element interface: element must inherit property "classList" with the proper type (6) +PASS Element interface: element must inherit property "slot" with the proper type (7) +PASS Element interface: element must inherit property "hasAttributes" with the proper type (8) +PASS Element interface: element must inherit property "attributes" with the proper type (9) +PASS Element interface: element must inherit property "getAttributeNames" with the proper type (10) +PASS Element interface: element must inherit property "getAttribute" with the proper type (11) +PASS Element interface: calling getAttribute(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "getAttributeNS" with the proper type (12) +PASS Element interface: calling getAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "setAttribute" with the proper type (13) +PASS Element interface: calling setAttribute(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "setAttributeNS" with the proper type (14) +PASS Element interface: calling setAttributeNS(DOMString,DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "removeAttribute" with the proper type (15) +PASS Element interface: calling removeAttribute(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "removeAttributeNS" with the proper type (16) +PASS Element interface: calling removeAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "hasAttribute" with the proper type (17) +PASS Element interface: calling hasAttribute(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "hasAttributeNS" with the proper type (18) +PASS Element interface: calling hasAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "getAttributeNode" with the proper type (19) +PASS Element interface: calling getAttributeNode(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "getAttributeNodeNS" with the proper type (20) +PASS Element interface: calling getAttributeNodeNS(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "setAttributeNode" with the proper type (21) +PASS Element interface: calling setAttributeNode(Attr) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "setAttributeNodeNS" with the proper type (22) +PASS Element interface: calling setAttributeNodeNS(Attr) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "removeAttributeNode" with the proper type (23) +PASS Element interface: calling removeAttributeNode(Attr) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "attachShadow" with the proper type (24) +PASS Element interface: calling attachShadow(ShadowRootInit) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "shadowRoot" with the proper type (25) +PASS Element interface: element must inherit property "closest" with the proper type (26) +PASS Element interface: calling closest(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "matches" with the proper type (27) +PASS Element interface: calling matches(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "webkitMatchesSelector" with the proper type (28) +PASS Element interface: calling webkitMatchesSelector(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "getElementsByTagName" with the proper type (29) +PASS Element interface: calling getElementsByTagName(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "getElementsByTagNameNS" with the proper type (30) +PASS Element interface: calling getElementsByTagNameNS(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "getElementsByClassName" with the proper type (31) +PASS Element interface: calling getElementsByClassName(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "insertAdjacentElement" with the proper type (32) +PASS Element interface: calling insertAdjacentElement(DOMString,Element) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "insertAdjacentText" with the proper type (33) +PASS Element interface: calling insertAdjacentText(DOMString,DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "children" with the proper type (34) +PASS Element interface: element must inherit property "firstElementChild" with the proper type (35) +PASS Element interface: element must inherit property "lastElementChild" with the proper type (36) +PASS Element interface: element must inherit property "childElementCount" with the proper type (37) +PASS Element interface: element must inherit property "prepend" with the proper type (38) +PASS Element interface: calling prepend([object Object],[object Object]) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "append" with the proper type (39) +PASS Element interface: calling append([object Object],[object Object]) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "querySelector" with the proper type (40) +PASS Element interface: calling querySelector(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "querySelectorAll" with the proper type (41) +PASS Element interface: calling querySelectorAll(DOMString) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "previousElementSibling" with the proper type (42) +PASS Element interface: element must inherit property "nextElementSibling" with the proper type (43) +PASS Element interface: element must inherit property "before" with the proper type (44) +PASS Element interface: calling before([object Object],[object Object]) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "after" with the proper type (45) +PASS Element interface: calling after([object Object],[object Object]) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "replaceWith" with the proper type (46) +PASS Element interface: calling replaceWith([object Object],[object Object]) on element with too few arguments must throw TypeError +PASS Element interface: element must inherit property "remove" with the proper type (47) +PASS Element interface: element must inherit property "assignedSlot" with the proper type (48) +PASS Node interface: element must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: element must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: element must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: element must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: element must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: element must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: element must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: element must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: element must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: element must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: element must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: element must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: element must inherit property "nodeType" with the proper type (12) +PASS Node interface: element must inherit property "nodeName" with the proper type (13) +PASS Node interface: element must inherit property "baseURI" with the proper type (14) +PASS Node interface: element must inherit property "isConnected" with the proper type (15) +PASS Node interface: element must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: element must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "parentNode" with the proper type (18) +PASS Node interface: element must inherit property "parentElement" with the proper type (19) +PASS Node interface: element must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: element must inherit property "childNodes" with the proper type (21) +PASS Node interface: element must inherit property "firstChild" with the proper type (22) +PASS Node interface: element must inherit property "lastChild" with the proper type (23) +PASS Node interface: element must inherit property "previousSibling" with the proper type (24) +PASS Node interface: element must inherit property "nextSibling" with the proper type (25) +PASS Node interface: element must inherit property "nodeValue" with the proper type (26) +PASS Node interface: element must inherit property "textContent" with the proper type (27) +PASS Node interface: element must inherit property "normalize" with the proper type (28) +PASS Node interface: element must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: element must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: element must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: element must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: element must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on element with too few arguments must throw TypeError +PASS Node interface: element must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on element with too few arguments must throw TypeError +PASS EventTarget interface: element must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on element with too few arguments must throw TypeError +PASS EventTarget interface: element must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on element with too few arguments must throw TypeError +PASS EventTarget interface: element must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on element with too few arguments must throw TypeError +PASS NamedNodeMap interface: existence and properties of interface object +PASS NamedNodeMap interface object length +PASS NamedNodeMap interface object name +PASS NamedNodeMap interface: existence and properties of interface prototype object +PASS NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property +PASS NamedNodeMap interface: attribute length +PASS NamedNodeMap interface: operation item(unsigned long) +PASS NamedNodeMap interface: operation getNamedItem(DOMString) +PASS NamedNodeMap interface: operation getNamedItemNS(DOMString,DOMString) +PASS NamedNodeMap interface: operation setNamedItem(Attr) +PASS NamedNodeMap interface: operation setNamedItemNS(Attr) +PASS NamedNodeMap interface: operation removeNamedItem(DOMString) +PASS NamedNodeMap interface: operation removeNamedItemNS(DOMString,DOMString) +PASS Attr interface: existence and properties of interface object +PASS Attr interface object length +PASS Attr interface object name +PASS Attr interface: existence and properties of interface prototype object +PASS Attr interface: existence and properties of interface prototype object's "constructor" property +PASS Attr interface: attribute namespaceURI +PASS Attr interface: attribute prefix +PASS Attr interface: attribute localName +PASS Attr interface: attribute name +PASS Attr interface: attribute value +PASS Attr interface: attribute ownerElement +PASS Attr interface: attribute specified +PASS Attr must be primary interface of document.querySelector("[id]").attributes[0] +PASS Stringification of document.querySelector("[id]").attributes[0] +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "namespaceURI" with the proper type (0) +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "prefix" with the proper type (1) +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "localName" with the proper type (2) +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "name" with the proper type (3) +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "value" with the proper type (4) +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "ownerElement" with the proper type (5) +PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "specified" with the proper type (6) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeType" with the proper type (12) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeName" with the proper type (13) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "baseURI" with the proper type (14) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isConnected" with the proper type (15) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "parentNode" with the proper type (18) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "parentElement" with the proper type (19) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "childNodes" with the proper type (21) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "firstChild" with the proper type (22) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lastChild" with the proper type (23) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "previousSibling" with the proper type (24) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nextSibling" with the proper type (25) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeValue" with the proper type (26) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "textContent" with the proper type (27) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "normalize" with the proper type (28) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError +PASS CharacterData interface: existence and properties of interface object +PASS CharacterData interface object length +PASS CharacterData interface object name +PASS CharacterData interface: existence and properties of interface prototype object +PASS CharacterData interface: existence and properties of interface prototype object's "constructor" property +PASS CharacterData interface: attribute data +PASS CharacterData interface: attribute length +PASS CharacterData interface: operation substringData(unsigned long,unsigned long) +PASS CharacterData interface: operation appendData(DOMString) +PASS CharacterData interface: operation insertData(unsigned long,DOMString) +PASS CharacterData interface: operation deleteData(unsigned long,unsigned long) +PASS CharacterData interface: operation replaceData(unsigned long,unsigned long,DOMString) +PASS CharacterData interface: attribute previousElementSibling +PASS CharacterData interface: attribute nextElementSibling +PASS CharacterData interface: operation before([object Object],[object Object]) +PASS CharacterData interface: operation after([object Object],[object Object]) +PASS CharacterData interface: operation replaceWith([object Object],[object Object]) +PASS CharacterData interface: operation remove() +PASS Text interface: existence and properties of interface object +PASS Text interface object length +PASS Text interface object name +PASS Text interface: existence and properties of interface prototype object +PASS Text interface: existence and properties of interface prototype object's "constructor" property +PASS Text interface: operation splitText(unsigned long) +PASS Text interface: attribute wholeText +PASS Text interface: attribute assignedSlot +PASS Text must be primary interface of document.createTextNode("abc") +PASS Stringification of document.createTextNode("abc") +PASS Text interface: document.createTextNode("abc") must inherit property "splitText" with the proper type (0) +PASS Text interface: calling splitText(unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Text interface: document.createTextNode("abc") must inherit property "wholeText" with the proper type (1) +PASS Text interface: document.createTextNode("abc") must inherit property "assignedSlot" with the proper type (2) +PASS CharacterData interface: document.createTextNode("abc") must inherit property "data" with the proper type (0) +PASS CharacterData interface: document.createTextNode("abc") must inherit property "length" with the proper type (1) +PASS CharacterData interface: document.createTextNode("abc") must inherit property "substringData" with the proper type (2) +PASS CharacterData interface: calling substringData(unsigned long,unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "appendData" with the proper type (3) +PASS CharacterData interface: calling appendData(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "insertData" with the proper type (4) +PASS CharacterData interface: calling insertData(unsigned long,DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "deleteData" with the proper type (5) +PASS CharacterData interface: calling deleteData(unsigned long,unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceData" with the proper type (6) +PASS CharacterData interface: calling replaceData(unsigned long,unsigned long,DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "previousElementSibling" with the proper type (7) +PASS CharacterData interface: document.createTextNode("abc") must inherit property "nextElementSibling" with the proper type (8) +PASS CharacterData interface: document.createTextNode("abc") must inherit property "before" with the proper type (9) +PASS CharacterData interface: calling before([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "after" with the proper type (10) +PASS CharacterData interface: calling after([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceWith" with the proper type (11) +PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createTextNode("abc") must inherit property "remove" with the proper type (12) +PASS Node interface: document.createTextNode("abc") must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: document.createTextNode("abc") must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: document.createTextNode("abc") must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: document.createTextNode("abc") must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: document.createTextNode("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: document.createTextNode("abc") must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: document.createTextNode("abc") must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: document.createTextNode("abc") must inherit property "nodeType" with the proper type (12) +PASS Node interface: document.createTextNode("abc") must inherit property "nodeName" with the proper type (13) +PASS Node interface: document.createTextNode("abc") must inherit property "baseURI" with the proper type (14) +PASS Node interface: document.createTextNode("abc") must inherit property "isConnected" with the proper type (15) +PASS Node interface: document.createTextNode("abc") must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: document.createTextNode("abc") must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "parentNode" with the proper type (18) +PASS Node interface: document.createTextNode("abc") must inherit property "parentElement" with the proper type (19) +PASS Node interface: document.createTextNode("abc") must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: document.createTextNode("abc") must inherit property "childNodes" with the proper type (21) +PASS Node interface: document.createTextNode("abc") must inherit property "firstChild" with the proper type (22) +PASS Node interface: document.createTextNode("abc") must inherit property "lastChild" with the proper type (23) +PASS Node interface: document.createTextNode("abc") must inherit property "previousSibling" with the proper type (24) +PASS Node interface: document.createTextNode("abc") must inherit property "nextSibling" with the proper type (25) +PASS Node interface: document.createTextNode("abc") must inherit property "nodeValue" with the proper type (26) +PASS Node interface: document.createTextNode("abc") must inherit property "textContent" with the proper type (27) +PASS Node interface: document.createTextNode("abc") must inherit property "normalize" with the proper type (28) +PASS Node interface: document.createTextNode("abc") must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: document.createTextNode("abc") must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS Node interface: document.createTextNode("abc") must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS EventTarget interface: document.createTextNode("abc") must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS EventTarget interface: document.createTextNode("abc") must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS EventTarget interface: document.createTextNode("abc") must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on document.createTextNode("abc") with too few arguments must throw TypeError +PASS CDATASection interface: existence and properties of interface object +PASS CDATASection interface object length +PASS CDATASection interface object name +PASS CDATASection interface: existence and properties of interface prototype object +PASS CDATASection interface: existence and properties of interface prototype object's "constructor" property +PASS ProcessingInstruction interface: existence and properties of interface object +PASS ProcessingInstruction interface object length +PASS ProcessingInstruction interface object name +PASS ProcessingInstruction interface: existence and properties of interface prototype object +PASS ProcessingInstruction interface: existence and properties of interface prototype object's "constructor" property +PASS ProcessingInstruction interface: attribute target +PASS ProcessingInstruction must be primary interface of xmlDoc.createProcessingInstruction("abc", "def") +PASS Stringification of xmlDoc.createProcessingInstruction("abc", "def") +PASS ProcessingInstruction interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "target" with the proper type (0) +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "data" with the proper type (0) +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "length" with the proper type (1) +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "substringData" with the proper type (2) +PASS CharacterData interface: calling substringData(unsigned long,unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendData" with the proper type (3) +PASS CharacterData interface: calling appendData(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertData" with the proper type (4) +PASS CharacterData interface: calling insertData(unsigned long,DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "deleteData" with the proper type (5) +PASS CharacterData interface: calling deleteData(unsigned long,unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceData" with the proper type (6) +PASS CharacterData interface: calling replaceData(unsigned long,unsigned long,DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousElementSibling" with the proper type (7) +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextElementSibling" with the proper type (8) +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "before" with the proper type (9) +PASS CharacterData interface: calling before([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "after" with the proper type (10) +PASS CharacterData interface: calling after([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceWith" with the proper type (11) +PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "remove" with the proper type (12) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeType" with the proper type (12) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeName" with the proper type (13) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "baseURI" with the proper type (14) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isConnected" with the proper type (15) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentNode" with the proper type (18) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentElement" with the proper type (19) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "childNodes" with the proper type (21) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "firstChild" with the proper type (22) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lastChild" with the proper type (23) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousSibling" with the proper type (24) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextSibling" with the proper type (25) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeValue" with the proper type (26) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "textContent" with the proper type (27) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "normalize" with the proper type (28) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError +PASS Comment interface: existence and properties of interface object +PASS Comment interface object length +PASS Comment interface object name +PASS Comment interface: existence and properties of interface prototype object +PASS Comment interface: existence and properties of interface prototype object's "constructor" property +PASS Comment must be primary interface of document.createComment("abc") +PASS Stringification of document.createComment("abc") +PASS CharacterData interface: document.createComment("abc") must inherit property "data" with the proper type (0) +PASS CharacterData interface: document.createComment("abc") must inherit property "length" with the proper type (1) +PASS CharacterData interface: document.createComment("abc") must inherit property "substringData" with the proper type (2) +PASS CharacterData interface: calling substringData(unsigned long,unsigned long) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "appendData" with the proper type (3) +PASS CharacterData interface: calling appendData(DOMString) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "insertData" with the proper type (4) +PASS CharacterData interface: calling insertData(unsigned long,DOMString) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "deleteData" with the proper type (5) +PASS CharacterData interface: calling deleteData(unsigned long,unsigned long) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "replaceData" with the proper type (6) +PASS CharacterData interface: calling replaceData(unsigned long,unsigned long,DOMString) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "previousElementSibling" with the proper type (7) +PASS CharacterData interface: document.createComment("abc") must inherit property "nextElementSibling" with the proper type (8) +PASS CharacterData interface: document.createComment("abc") must inherit property "before" with the proper type (9) +PASS CharacterData interface: calling before([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "after" with the proper type (10) +PASS CharacterData interface: calling after([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "replaceWith" with the proper type (11) +PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError +PASS CharacterData interface: document.createComment("abc") must inherit property "remove" with the proper type (12) +PASS Node interface: document.createComment("abc") must inherit property "ELEMENT_NODE" with the proper type (0) +PASS Node interface: document.createComment("abc") must inherit property "ATTRIBUTE_NODE" with the proper type (1) +PASS Node interface: document.createComment("abc") must inherit property "TEXT_NODE" with the proper type (2) +PASS Node interface: document.createComment("abc") must inherit property "CDATA_SECTION_NODE" with the proper type (3) +PASS Node interface: document.createComment("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4) +PASS Node interface: document.createComment("abc") must inherit property "ENTITY_NODE" with the proper type (5) +PASS Node interface: document.createComment("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6) +PASS Node interface: document.createComment("abc") must inherit property "COMMENT_NODE" with the proper type (7) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_NODE" with the proper type (8) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10) +PASS Node interface: document.createComment("abc") must inherit property "NOTATION_NODE" with the proper type (11) +PASS Node interface: document.createComment("abc") must inherit property "nodeType" with the proper type (12) +PASS Node interface: document.createComment("abc") must inherit property "nodeName" with the proper type (13) +PASS Node interface: document.createComment("abc") must inherit property "baseURI" with the proper type (14) +PASS Node interface: document.createComment("abc") must inherit property "isConnected" with the proper type (15) +PASS Node interface: document.createComment("abc") must inherit property "ownerDocument" with the proper type (16) +PASS Node interface: document.createComment("abc") must inherit property "getRootNode" with the proper type (17) +PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "parentNode" with the proper type (18) +PASS Node interface: document.createComment("abc") must inherit property "parentElement" with the proper type (19) +PASS Node interface: document.createComment("abc") must inherit property "hasChildNodes" with the proper type (20) +PASS Node interface: document.createComment("abc") must inherit property "childNodes" with the proper type (21) +PASS Node interface: document.createComment("abc") must inherit property "firstChild" with the proper type (22) +PASS Node interface: document.createComment("abc") must inherit property "lastChild" with the proper type (23) +PASS Node interface: document.createComment("abc") must inherit property "previousSibling" with the proper type (24) +PASS Node interface: document.createComment("abc") must inherit property "nextSibling" with the proper type (25) +PASS Node interface: document.createComment("abc") must inherit property "nodeValue" with the proper type (26) +PASS Node interface: document.createComment("abc") must inherit property "textContent" with the proper type (27) +PASS Node interface: document.createComment("abc") must inherit property "normalize" with the proper type (28) +PASS Node interface: document.createComment("abc") must inherit property "cloneNode" with the proper type (29) +PASS Node interface: calling cloneNode(boolean) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "isEqualNode" with the proper type (30) +PASS Node interface: calling isEqualNode(Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "isSameNode" with the proper type (31) +PASS Node interface: calling isSameNode(Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36) +PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37) +PASS Node interface: document.createComment("abc") must inherit property "compareDocumentPosition" with the proper type (38) +PASS Node interface: calling compareDocumentPosition(Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "contains" with the proper type (39) +PASS Node interface: calling contains(Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "lookupPrefix" with the proper type (40) +PASS Node interface: calling lookupPrefix(DOMString) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "lookupNamespaceURI" with the proper type (41) +PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "isDefaultNamespace" with the proper type (42) +PASS Node interface: calling isDefaultNamespace(DOMString) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "insertBefore" with the proper type (43) +PASS Node interface: calling insertBefore(Node,Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "appendChild" with the proper type (44) +PASS Node interface: calling appendChild(Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "replaceChild" with the proper type (45) +PASS Node interface: calling replaceChild(Node,Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS Node interface: document.createComment("abc") must inherit property "removeChild" with the proper type (46) +PASS Node interface: calling removeChild(Node) on document.createComment("abc") with too few arguments must throw TypeError +PASS EventTarget interface: document.createComment("abc") must inherit property "addEventListener" with the proper type (0) +PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError +PASS EventTarget interface: document.createComment("abc") must inherit property "removeEventListener" with the proper type (1) +PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError +PASS EventTarget interface: document.createComment("abc") must inherit property "dispatchEvent" with the proper type (2) +PASS EventTarget interface: calling dispatchEvent(Event) on document.createComment("abc") with too few arguments must throw TypeError +PASS Range interface: existence and properties of interface object +PASS Range interface object length +PASS Range interface object name +PASS Range interface: existence and properties of interface prototype object +PASS Range interface: existence and properties of interface prototype object's "constructor" property +PASS Range interface: attribute startContainer +PASS Range interface: attribute startOffset +PASS Range interface: attribute endContainer +PASS Range interface: attribute endOffset +PASS Range interface: attribute collapsed +PASS Range interface: attribute commonAncestorContainer +PASS Range interface: operation setStart(Node,unsigned long) +PASS Range interface: operation setEnd(Node,unsigned long) +PASS Range interface: operation setStartBefore(Node) +PASS Range interface: operation setStartAfter(Node) +PASS Range interface: operation setEndBefore(Node) +PASS Range interface: operation setEndAfter(Node) +PASS Range interface: operation collapse(boolean) +PASS Range interface: operation selectNode(Node) +PASS Range interface: operation selectNodeContents(Node) +PASS Range interface: constant START_TO_START on interface object +PASS Range interface: constant START_TO_START on interface prototype object +PASS Range interface: constant START_TO_END on interface object +PASS Range interface: constant START_TO_END on interface prototype object +PASS Range interface: constant END_TO_END on interface object +PASS Range interface: constant END_TO_END on interface prototype object +PASS Range interface: constant END_TO_START on interface object +PASS Range interface: constant END_TO_START on interface prototype object +PASS Range interface: operation compareBoundaryPoints(unsigned short,Range) +PASS Range interface: operation deleteContents() +PASS Range interface: operation extractContents() +PASS Range interface: operation cloneContents() +PASS Range interface: operation insertNode(Node) +PASS Range interface: operation surroundContents(Node) +PASS Range interface: operation cloneRange() +PASS Range interface: operation detach() +PASS Range interface: operation isPointInRange(Node,unsigned long) +PASS Range interface: operation comparePoint(Node,unsigned long) +PASS Range interface: operation intersectsNode(Node) +PASS Range interface: stringifier +PASS Range must be primary interface of document.createRange() +PASS Stringification of document.createRange() +PASS Range interface: document.createRange() must inherit property "startContainer" with the proper type (0) +PASS Range interface: document.createRange() must inherit property "startOffset" with the proper type (1) +PASS Range interface: document.createRange() must inherit property "endContainer" with the proper type (2) +PASS Range interface: document.createRange() must inherit property "endOffset" with the proper type (3) +PASS Range interface: document.createRange() must inherit property "collapsed" with the proper type (4) +PASS Range interface: document.createRange() must inherit property "commonAncestorContainer" with the proper type (5) +PASS Range interface: document.createRange() must inherit property "setStart" with the proper type (6) +PASS Range interface: calling setStart(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "setEnd" with the proper type (7) +PASS Range interface: calling setEnd(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "setStartBefore" with the proper type (8) +PASS Range interface: calling setStartBefore(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "setStartAfter" with the proper type (9) +PASS Range interface: calling setStartAfter(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "setEndBefore" with the proper type (10) +PASS Range interface: calling setEndBefore(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "setEndAfter" with the proper type (11) +PASS Range interface: calling setEndAfter(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "collapse" with the proper type (12) +PASS Range interface: calling collapse(boolean) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "selectNode" with the proper type (13) +PASS Range interface: calling selectNode(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "selectNodeContents" with the proper type (14) +PASS Range interface: calling selectNodeContents(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "START_TO_START" with the proper type (15) +PASS Range interface: document.createRange() must inherit property "START_TO_END" with the proper type (16) +PASS Range interface: document.createRange() must inherit property "END_TO_END" with the proper type (17) +PASS Range interface: document.createRange() must inherit property "END_TO_START" with the proper type (18) +PASS Range interface: document.createRange() must inherit property "compareBoundaryPoints" with the proper type (19) +PASS Range interface: calling compareBoundaryPoints(unsigned short,Range) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "deleteContents" with the proper type (20) +PASS Range interface: document.createRange() must inherit property "extractContents" with the proper type (21) +PASS Range interface: document.createRange() must inherit property "cloneContents" with the proper type (22) +PASS Range interface: document.createRange() must inherit property "insertNode" with the proper type (23) +PASS Range interface: calling insertNode(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "surroundContents" with the proper type (24) +PASS Range interface: calling surroundContents(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "cloneRange" with the proper type (25) +PASS Range interface: document.createRange() must inherit property "detach" with the proper type (26) +PASS Range interface: document.createRange() must inherit property "isPointInRange" with the proper type (27) +PASS Range interface: calling isPointInRange(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "comparePoint" with the proper type (28) +PASS Range interface: calling comparePoint(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError +PASS Range interface: document.createRange() must inherit property "intersectsNode" with the proper type (29) +PASS Range interface: calling intersectsNode(Node) on document.createRange() with too few arguments must throw TypeError +PASS Range must be primary interface of detachedRange +PASS Stringification of detachedRange +PASS Range interface: detachedRange must inherit property "startContainer" with the proper type (0) +PASS Range interface: detachedRange must inherit property "startOffset" with the proper type (1) +PASS Range interface: detachedRange must inherit property "endContainer" with the proper type (2) +PASS Range interface: detachedRange must inherit property "endOffset" with the proper type (3) +PASS Range interface: detachedRange must inherit property "collapsed" with the proper type (4) +PASS Range interface: detachedRange must inherit property "commonAncestorContainer" with the proper type (5) +PASS Range interface: detachedRange must inherit property "setStart" with the proper type (6) +PASS Range interface: calling setStart(Node,unsigned long) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "setEnd" with the proper type (7) +PASS Range interface: calling setEnd(Node,unsigned long) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "setStartBefore" with the proper type (8) +PASS Range interface: calling setStartBefore(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "setStartAfter" with the proper type (9) +PASS Range interface: calling setStartAfter(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "setEndBefore" with the proper type (10) +PASS Range interface: calling setEndBefore(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "setEndAfter" with the proper type (11) +PASS Range interface: calling setEndAfter(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "collapse" with the proper type (12) +PASS Range interface: calling collapse(boolean) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "selectNode" with the proper type (13) +PASS Range interface: calling selectNode(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "selectNodeContents" with the proper type (14) +PASS Range interface: calling selectNodeContents(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "START_TO_START" with the proper type (15) +PASS Range interface: detachedRange must inherit property "START_TO_END" with the proper type (16) +PASS Range interface: detachedRange must inherit property "END_TO_END" with the proper type (17) +PASS Range interface: detachedRange must inherit property "END_TO_START" with the proper type (18) +PASS Range interface: detachedRange must inherit property "compareBoundaryPoints" with the proper type (19) +PASS Range interface: calling compareBoundaryPoints(unsigned short,Range) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "deleteContents" with the proper type (20) +PASS Range interface: detachedRange must inherit property "extractContents" with the proper type (21) +PASS Range interface: detachedRange must inherit property "cloneContents" with the proper type (22) +PASS Range interface: detachedRange must inherit property "insertNode" with the proper type (23) +PASS Range interface: calling insertNode(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "surroundContents" with the proper type (24) +PASS Range interface: calling surroundContents(Node) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "cloneRange" with the proper type (25) +PASS Range interface: detachedRange must inherit property "detach" with the proper type (26) +PASS Range interface: detachedRange must inherit property "isPointInRange" with the proper type (27) +PASS Range interface: calling isPointInRange(Node,unsigned long) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "comparePoint" with the proper type (28) +PASS Range interface: calling comparePoint(Node,unsigned long) on detachedRange with too few arguments must throw TypeError +PASS Range interface: detachedRange must inherit property "intersectsNode" with the proper type (29) +PASS Range interface: calling intersectsNode(Node) on detachedRange with too few arguments must throw TypeError +PASS NodeIterator interface: existence and properties of interface object +PASS NodeIterator interface object length +PASS NodeIterator interface object name +PASS NodeIterator interface: existence and properties of interface prototype object +PASS NodeIterator interface: existence and properties of interface prototype object's "constructor" property +PASS NodeIterator interface: attribute root +PASS NodeIterator interface: attribute referenceNode +PASS NodeIterator interface: attribute pointerBeforeReferenceNode +PASS NodeIterator interface: attribute whatToShow +PASS NodeIterator interface: attribute filter +PASS NodeIterator interface: operation nextNode() +PASS NodeIterator interface: operation previousNode() +PASS NodeIterator interface: operation detach() +PASS NodeIterator must be primary interface of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) +PASS Stringification of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type (0) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "referenceNode" with the proper type (1) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "pointerBeforeReferenceNode" with the proper type (2) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type (3) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type (4) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode" with the proper type (5) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode" with the proper type (6) +PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "detach" with the proper type (7) +PASS TreeWalker interface: existence and properties of interface object +PASS TreeWalker interface object length +PASS TreeWalker interface object name +PASS TreeWalker interface: existence and properties of interface prototype object +PASS TreeWalker interface: existence and properties of interface prototype object's "constructor" property +PASS TreeWalker interface: attribute root +PASS TreeWalker interface: attribute whatToShow +PASS TreeWalker interface: attribute filter +PASS TreeWalker interface: attribute currentNode +PASS TreeWalker interface: operation parentNode() +PASS TreeWalker interface: operation firstChild() +PASS TreeWalker interface: operation lastChild() +PASS TreeWalker interface: operation previousSibling() +PASS TreeWalker interface: operation nextSibling() +PASS TreeWalker interface: operation previousNode() +PASS TreeWalker interface: operation nextNode() +PASS TreeWalker must be primary interface of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) +PASS Stringification of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type (0) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type (1) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type (2) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "currentNode" with the proper type (3) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "parentNode" with the proper type (4) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "firstChild" with the proper type (5) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "lastChild" with the proper type (6) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousSibling" with the proper type (7) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextSibling" with the proper type (8) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode" with the proper type (9) +PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode" with the proper type (10) +PASS NodeFilter interface: existence and properties of interface object +PASS NodeFilter interface object name +PASS NodeFilter interface: existence and properties of interface prototype object +PASS NodeFilter interface: existence and properties of interface prototype object's "constructor" property +PASS NodeFilter interface: constant FILTER_ACCEPT on interface object +PASS NodeFilter interface: constant FILTER_ACCEPT on interface prototype object +PASS NodeFilter interface: constant FILTER_REJECT on interface object +PASS NodeFilter interface: constant FILTER_REJECT on interface prototype object +PASS NodeFilter interface: constant FILTER_SKIP on interface object +PASS NodeFilter interface: constant FILTER_SKIP on interface prototype object +PASS NodeFilter interface: constant SHOW_ALL on interface object +PASS NodeFilter interface: constant SHOW_ALL on interface prototype object +PASS NodeFilter interface: constant SHOW_ELEMENT on interface object +PASS NodeFilter interface: constant SHOW_ELEMENT on interface prototype object +PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface object +PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface prototype object +PASS NodeFilter interface: constant SHOW_TEXT on interface object +PASS NodeFilter interface: constant SHOW_TEXT on interface prototype object +PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface object +PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface prototype object +PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface object +PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface prototype object +PASS NodeFilter interface: constant SHOW_ENTITY on interface object +PASS NodeFilter interface: constant SHOW_ENTITY on interface prototype object +PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface object +PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface prototype object +PASS NodeFilter interface: constant SHOW_COMMENT on interface object +PASS NodeFilter interface: constant SHOW_COMMENT on interface prototype object +PASS NodeFilter interface: constant SHOW_DOCUMENT on interface object +PASS NodeFilter interface: constant SHOW_DOCUMENT on interface prototype object +PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface object +PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface prototype object +PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface object +PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface prototype object +PASS NodeFilter interface: constant SHOW_NOTATION on interface object +PASS NodeFilter interface: constant SHOW_NOTATION on interface prototype object +PASS NodeFilter interface: operation acceptNode(Node) +PASS DOMTokenList interface: existence and properties of interface object +PASS DOMTokenList interface object length +PASS DOMTokenList interface object name +PASS DOMTokenList interface: existence and properties of interface prototype object +PASS DOMTokenList interface: existence and properties of interface prototype object's "constructor" property +PASS DOMTokenList interface: attribute length +PASS DOMTokenList interface: operation item(unsigned long) +PASS DOMTokenList interface: operation contains(DOMString) +PASS DOMTokenList interface: operation add(DOMString) +PASS DOMTokenList interface: operation remove(DOMString) +PASS DOMTokenList interface: operation toggle(DOMString,boolean) +PASS DOMTokenList interface: operation replace(DOMString,DOMString) +PASS DOMTokenList interface: operation supports(DOMString) +PASS DOMTokenList interface: attribute value +PASS DOMTokenList interface: stringifier +PASS DOMTokenList must be primary interface of document.body.classList +PASS Stringification of document.body.classList +PASS DOMTokenList interface: document.body.classList must inherit property "length" with the proper type (0) +PASS DOMTokenList interface: document.body.classList must inherit property "item" with the proper type (1) +PASS DOMTokenList interface: calling item(unsigned long) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "contains" with the proper type (2) +PASS DOMTokenList interface: calling contains(DOMString) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "add" with the proper type (3) +PASS DOMTokenList interface: calling add(DOMString) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "remove" with the proper type (4) +PASS DOMTokenList interface: calling remove(DOMString) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "toggle" with the proper type (5) +PASS DOMTokenList interface: calling toggle(DOMString,boolean) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "replace" with the proper type (6) +PASS DOMTokenList interface: calling replace(DOMString,DOMString) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "supports" with the proper type (7) +PASS DOMTokenList interface: calling supports(DOMString) on document.body.classList with too few arguments must throw TypeError +PASS DOMTokenList interface: document.body.classList must inherit property "value" with the proper type (8) +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces.html index e6b12e3c..8b4140d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces.html +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces.html
@@ -21,6 +21,7 @@ function doTest(idl) { idlArray.add_idls(idl); idlArray.add_objects({ + EventTarget: ['new EventTarget()'], Event: ['document.createEvent("Event")', 'new Event("foo")'], CustomEvent: ['new CustomEvent("foo")'], Document: ['new Document()'],
diff --git a/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness-expected.txt new file mode 100644 index 0000000..cbdd61f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness-expected.txt
@@ -0,0 +1,17 @@ +This is a testharness.js-based test. +PASS Window interface: attribute performance +PASS WorkerGlobalScope interface: existence and properties of interface object +PASS Performance interface: existence and properties of interface object +PASS Performance interface object length +PASS Performance interface object name +PASS Performance interface: existence and properties of interface prototype object +PASS Performance interface: existence and properties of interface prototype object's "constructor" property +PASS Performance interface: operation now() +PASS Performance interface: operation toJSON() +FAIL Test default toJSON operation of Performance Illegal invocation +PASS Performance must be primary interface of window.performance +PASS Stringification of window.performance +PASS Performance interface: window.performance must inherit property "now" with the proper type (0) +PASS Performance interface: window.performance must inherit property "toJSON" with the proper type (1) +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness.html index 9dfea66..30b6c268 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness.html +++ b/third_party/WebKit/LayoutTests/external/wpt/hr-time/idlharness.html
@@ -34,7 +34,7 @@ [Exposed=(Window,Worker)] interface Performance : EventTarget { DOMHighResTimeStamp now(); - serializer = {attribute}; + [Default] object toJSON(); }; [NoInterfaceObject,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/hr-time/timing-attack.html b/third_party/WebKit/LayoutTests/external/wpt/hr-time/timing-attack.html new file mode 100644 index 0000000..71ade4a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/hr-time/timing-attack.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<title>window.performance.now should not enable timing attacks</title> +<link rel="author" title="W3C" href="http://www.w3.org/" /> +<link rel="help" href="http://w3c.github.io/hr-time/#privacy-security"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + function check_resolutions(times, length) { + var end = length - 2; + + // we compare each value with the following ones + for (var i = 0; i < end; i++) { + var h1 = times[i]; + for (var j = i+1; j < end; j++) { + var h2 = times[j]; + var diff = h2 - h1; + assert_true((diff === 0) || ((diff * 1000) >= 5), + "Differences smaller than 5 microseconds: " + diff); + } + } + return true; + } + + var times = new Array(10); + var index = 0; + var hrt1, hrt2, hrt; + + // rapid firing of performance.now + hrt1 = performance.now(); + hrt2 = performance.now(); + times[index++] = hrt1; + times[index++] = hrt2; + + // ensure that we get performance.now() to return a different value + do { + hrt = performance.now(); + times[index++] = hrt; + } while ((hrt - hrt1) === 0); + + assert_true(check_resolutions(times, index), 'Difference should be at least 5 microseconds.'); +}, 'The recommended minimum resolution of the Performance interface has been set to 5 microseconds'); +</script> +</head> +<body> +<h1>Description</h1> +<p>The recommended minimum resolution of the Performance interface should be set to 5 microseconds.</p> + +<div id="log"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/dom.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/dom.idl index 7e2667ff..9ca270ea 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/dom.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/dom.idl
@@ -44,7 +44,7 @@ }; -//[Exposed=(Window,Worker)] +[Constructor/*, Exposed=(Window,Worker)*/] interface EventTarget { void addEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options); void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl index df0bd88..cf19b7e9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl
@@ -2,7 +2,7 @@ partial interface Navigator { [SecureContext] - Promise<void> share(ShareData data); + Promise<void> share(optional ShareData data); }; dictionary ShareData {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness-expected.txt index 3388f2c..31d3c5e4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness-expected.txt
@@ -14,5 +14,6 @@ PASS PerformanceNavigationTiming interface: attribute loadEventEnd PASS PerformanceNavigationTiming interface: attribute type PASS PerformanceNavigationTiming interface: attribute redirectCount +FAIL PerformanceNavigationTiming interface: operation toJSON() undefined PerformanceEntry not found (inherited by PerformanceResourceTiming) Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness.html index 7bdd5d50..eb7d94b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness.html +++ b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_idlharness.html
@@ -53,6 +53,7 @@ readonly attribute DOMHighResTimeStamp loadEventEnd; readonly attribute NavigationType type; readonly attribute unsigned short redirectCount; + [Default] object toJSON(); }; </pre>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/resources/webperftestharness.js b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/resources/webperftestharness.js index f9b56d9..afdfa2a7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/resources/webperftestharness.js +++ b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/resources/webperftestharness.js
@@ -72,6 +72,11 @@ // ensure it's in the right order msg = "window.performance.timing." + attribute_name + " >= window.performance.timing." + greater_than_attribute; wp_test(function() { assert_true(performanceNamespace.timing[attribute_name] >= performanceNamespace.timing[greater_than_attribute], msg); }, msg, properties); + + // ensure we have at least 5 microseconds difference or it's 0 + msg = "window.performance.timing." + attribute_name + " difference with window.performance.timing." + greater_than_attribute + " is 0 or at least 5 microseconds"; + var diff = performanceNamespace.timing[attribute_name] - performanceNamespace.timing[greater_than_attribute]; + wp_test(function() { assert_true((diff === 0) || ((diff * 1000) >= 5), msg); }, msg, properties); } function test_timing_greater_than(attribute_name, greater_than, properties)
diff --git a/third_party/WebKit/LayoutTests/external/wpt/page-visibility/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/idlharness.html index f5999eaa7eb..a4356ce 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/page-visibility/idlharness.html +++ b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/idlharness.html
@@ -4,7 +4,7 @@ <meta charset="utf-8"> <title>Page Visibility IDL tests</title> <link rel="author" title="W3C" href="http://www.w3.org/" /> -<link rel="help" href="http://www.w3.org/TR/page-visibility/#sec-document-interface"/> +<link rel="help" href="https://w3c.github.io/page-visibility/"/> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/WebIDLParser.js"></script> @@ -16,6 +16,10 @@ <pre id='untested_idl' style='display:none'> interface Document { }; + +[TreatNonObjectAsNull] +callback EventHandlerNonNull = any (Event event); +typedef EventHandlerNonNull? EventHandler; </pre> <pre id='idl'>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/page-visibility/iframe-unload.html b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/iframe-unload.html new file mode 100644 index 0000000..6d049a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/iframe-unload.html
@@ -0,0 +1,49 @@ +<html> +<title>visibilitychange fires on unload with iframes</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + +var frameDocs = []; +var docsLoaded = 0; +var numFrames = 3; + +var ast = new async_test("visibilitychange fires on unload with iframes"); + +function startTest() { + if (++docsLoaded < numFrames) + return; + + ast.step(function () { + frameDocs.push(window[0].document); + frameDocs.push(window[0][0].document); + frameDocs.push(window[0][1].document); + + for (var i = 0; i < frameDocs.length; ++i) { + frameDocs[i].addEventListener( + "visibilitychange", + onVisibilityChange.bind(null, i), false); + } + + document.body.removeChild(document.getElementById("frame1")); + }); +} + +var checkedFrames = 0; + +function onVisibilityChange(i) { + ast.step(function () { + assert_equals(frameDocs[i].visibilityState, "hidden"); + }); + if (++checkedFrames >= numFrames) { + ast.done(); + } +} + + + +</script> +<iframe id="frame1" src="resources/iframe-with-subframes.html"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/iframe-with-subframes.html b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/iframe-with-subframes.html new file mode 100644 index 0000000..febb954 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/iframe-with-subframes.html
@@ -0,0 +1,6 @@ +<html> +<body onload="parent.startTest()"> +<iframe id="subIframe1" onload="parent.parent.startTest()"></iframe> +<iframe id="subIframe2" onload="parent.parent.startTest()"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/pagevistestharness.js b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/pagevistestharness.js index d53d73b..bfc4deb 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/pagevistestharness.js +++ b/third_party/WebKit/LayoutTests/external/wpt/page-visibility/resources/pagevistestharness.js
@@ -117,5 +117,5 @@ { //var open_link = window.open("http://www.bing.com"); open_link = window.open('', '_blank'); - setTimeout(function() { open_link.close(); }, 2000); + step_timeout(function() { open_link.close(); }, 2000); }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub-expected.txt new file mode 100644 index 0000000..533d6d6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL PaymentRequest removing allowpaymentrequest after load and then navigating assert_equals: after navigation expected "Exception" but got "Success" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html index 048b93a..fcd7f1d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html
@@ -13,7 +13,7 @@ const path = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); iframe.src = "https://{{domains[www1]}}:{{ports[https][0]}}" + path + "echo-PaymentRequest.html"; iframe.onload = t.step_func(() => { - if (i === 0) { + if (i === 1) { iframe.allowPaymentRequest = false; } iframe.contentWindow.postMessage('What is the result of new PaymentRequest(...)?', '*');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub-expected.txt deleted file mode 100644 index 2103791b..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL PaymentRequest setting allowpaymentrequest after document creation, before response assert_equals: expected "Exception" but got "Success" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html index c7ed3ae..6a12214 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html
@@ -18,8 +18,7 @@ }); window.onmessage = t.step_func_done((e) => { - assert_equals(e.data.message, 'Exception'); - assert_array_equals(e.data.details, [true /* ex instanceof DOMException*/, 18 /* ex.code */, 'SecurityError' /* ex.name */]); + assert_equals(e.data.message, 'Success'); }); document.body.appendChild(iframe);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub-expected.txt new file mode 100644 index 0000000..b1372064 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL PaymentRequest setting allowpaymentrequest after load and then navigating assert_equals: after navigation expected "Success" but got "Exception" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html index 4564d264..bf6fe14 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html
@@ -13,7 +13,7 @@ const path = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); iframe.src = "https://{{domains[www1]}}:{{ports[https][0]}}" + path + "echo-PaymentRequest.html"; iframe.onload = t.step_func(() => { - if (i === 0) { + if (i === 1) { iframe.allowPaymentRequest = true; } iframe.contentWindow.postMessage('What is the result of new PaymentRequest(...)?', '*');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https-expected.txt new file mode 100644 index 0000000..26436ee --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https-expected.txt
@@ -0,0 +1,10 @@ +This is a testharness.js-based test. +Harness Error. harness_status.status = 1 , harness_status.message = Request failed +FAIL If request.[[state]] is "created", then return a promise that resolves to true for known method. promise_test: Unhandled rejection with value: object "ReferenceError: assert_equal is not defined" +FAIL If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException. promise_test: Unhandled rejection with value: object "InvalidStateError: Never called show(), so nothing to abort" +FAIL If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException. promise_test: Unhandled rejection with value: object "UnknownError: Request failed" +FAIL If payment method identifier and serialized parts are supported, resolve promise with true. promise_test: Unhandled rejection with value: object "UnknownError: Request failed" +FAIL If payment method identifier is unknown, resolve promise with false. assert_true: Unexpected exception testing method this-is-not-supported, expected false. See error console. expected true got false +FAIL Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: assert_equal is not defined" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https.http b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https.html similarity index 100% rename from third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https.http rename to third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method.https.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness-expected.txt new file mode 100644 index 0000000..61a1522 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness-expected.txt
@@ -0,0 +1,37 @@ +This is a testharness.js-based test. +PASS Performance interface: operation getEntries(PerformanceEntryFilterOptions) +PASS Performance interface: operation getEntriesByType(DOMString) +PASS Performance interface: operation getEntriesByName(DOMString,DOMString) +PASS Performance interface: window.performance must inherit property "getEntries" with the proper type (0) +PASS Performance interface: calling getEntries(PerformanceEntryFilterOptions) on window.performance with too few arguments must throw TypeError +PASS Performance interface: window.performance must inherit property "getEntriesByType" with the proper type (1) +PASS Performance interface: calling getEntriesByType(DOMString) on window.performance with too few arguments must throw TypeError +PASS Performance interface: window.performance must inherit property "getEntriesByName" with the proper type (2) +PASS Performance interface: calling getEntriesByName(DOMString,DOMString) on window.performance with too few arguments must throw TypeError +PASS PerformanceEntry interface: existence and properties of interface object +PASS PerformanceEntry interface object length +PASS PerformanceEntry interface object name +PASS PerformanceEntry interface: existence and properties of interface prototype object +PASS PerformanceEntry interface: existence and properties of interface prototype object's "constructor" property +PASS PerformanceEntry interface: attribute name +PASS PerformanceEntry interface: attribute entryType +PASS PerformanceEntry interface: attribute startTime +PASS PerformanceEntry interface: attribute duration +FAIL PerformanceEntry interface: operation toJSON() Type DOMHighResTimeStamp not found +PASS PerformanceObserverEntryList interface: existence and properties of interface object +PASS PerformanceObserverEntryList interface object length +PASS PerformanceObserverEntryList interface object name +PASS PerformanceObserverEntryList interface: existence and properties of interface prototype object +PASS PerformanceObserverEntryList interface: existence and properties of interface prototype object's "constructor" property +PASS PerformanceObserverEntryList interface: operation getEntries(PerformanceEntryFilterOptions) +PASS PerformanceObserverEntryList interface: operation getEntriesByType(DOMString) +PASS PerformanceObserverEntryList interface: operation getEntriesByName(DOMString,DOMString) +PASS PerformanceObserver interface: existence and properties of interface object +PASS PerformanceObserver interface object length +PASS PerformanceObserver interface object name +PASS PerformanceObserver interface: existence and properties of interface prototype object +PASS PerformanceObserver interface: existence and properties of interface prototype object's "constructor" property +PASS PerformanceObserver interface: operation observe(PerformanceObserverInit) +PASS PerformanceObserver interface: operation disconnect() +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness.html index 0500b3e..7d6741d2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness.html +++ b/third_party/WebKit/LayoutTests/external/wpt/performance-timeline/idlharness.html
@@ -28,7 +28,7 @@ readonly attribute DOMString entryType; readonly attribute DOMHighResTimeStamp startTime; readonly attribute DOMHighResTimeStamp duration; - serializer = {attribute}; + [Default] object toJSON(); }; dictionary PerformanceEntryFilterOptions {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness-expected.txt new file mode 100644 index 0000000..451d5a9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness-expected.txt
@@ -0,0 +1,28 @@ +This is a testharness.js-based test. +PASS Performance interface: operation clearResourceTimings() +PASS Performance interface: operation setResourceTimingBufferSize(unsigned long) +PASS Performance interface: attribute onresourcetimingbufferfull +PASS Performance interface: window.performance must inherit property "clearResourceTimings" with the proper type (3) +PASS Performance interface: window.performance must inherit property "setResourceTimingBufferSize" with the proper type (4) +PASS Performance interface: calling setResourceTimingBufferSize(unsigned long) on window.performance with too few arguments must throw TypeError +PASS Performance interface: window.performance must inherit property "onresourcetimingbufferfull" with the proper type (5) +PASS PerformanceResourceTiming interface: existence and properties of interface object +PASS PerformanceResourceTiming interface object length +PASS PerformanceResourceTiming interface object name +PASS PerformanceResourceTiming interface: existence and properties of interface prototype object +PASS PerformanceResourceTiming interface: existence and properties of interface prototype object's "constructor" property +PASS PerformanceResourceTiming interface: attribute initiatorType +PASS PerformanceResourceTiming interface: attribute redirectStart +PASS PerformanceResourceTiming interface: attribute redirectEnd +PASS PerformanceResourceTiming interface: attribute fetchStart +PASS PerformanceResourceTiming interface: attribute domainLookupStart +PASS PerformanceResourceTiming interface: attribute domainLookupEnd +PASS PerformanceResourceTiming interface: attribute connectStart +PASS PerformanceResourceTiming interface: attribute connectEnd +PASS PerformanceResourceTiming interface: attribute secureConnectionStart +PASS PerformanceResourceTiming interface: attribute requestStart +PASS PerformanceResourceTiming interface: attribute responseStart +PASS PerformanceResourceTiming interface: attribute responseEnd +FAIL PerformanceResourceTiming interface: operation toJSON() assert_own_property: interface prototype object missing non-static operation expected property "toJSON" missing +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness.html index 15afd094..8daf946 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness.html +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/idlharness.html
@@ -54,7 +54,7 @@ readonly attribute DOMHighResTimeStamp requestStart; readonly attribute DOMHighResTimeStamp responseStart; readonly attribute DOMHighResTimeStamp responseEnd; - serializer = {inherit, attribute}; + [Default] object toJSON(); }; partial interface Performance { void clearResourceTimings();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete-expected.txt new file mode 100644 index 0000000..f3a9421 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +PASS Delete basics +PASS Deleting appended multiple +FAIL Deleting all params keeps ? in URL assert_equals: url.href has ? expected "http://example.com/?" but got "http://example.com/" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete.html b/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete.html index fca64621..afc9c60 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete.html +++ b/third_party/WebKit/LayoutTests/external/wpt/url/urlsearchparams-delete.html
@@ -36,6 +36,14 @@ params.delete('first'); assert_false(params.has('first'), 'Search params object has no "first" name'); }, 'Deleting appended multiple'); + +test(function() { + var url = new URL('http://example.com/?param1¶m2'); + url.searchParams.delete('param1'); + url.searchParams.delete('param2'); + assert_equals(url.href, 'http://example.com/?', 'url.href has ?'); + assert_equals(url.search, '', 'url.search does not have ?'); +}, 'Deleting all params keeps ? in URL'); </script> </head> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-share/idlharness.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/web-share/idlharness.https-expected.txt new file mode 100644 index 0000000..95f8804d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/web-share/idlharness.https-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +PASS Test driver +FAIL Navigator interface: operation share(ShareData) assert_equals: property has wrong .length expected 0 but got 1 +PASS Navigator interface: navigator must inherit property "share" with the proper type (0) +PASS Navigator interface: calling share(ShareData) on navigator with too few arguments must throw TypeError +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty-manual.html b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty-manual.html deleted file mode 100644 index 63b2d4d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty-manual.html +++ /dev/null
@@ -1,18 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>WebShare Test: Share with empty ShareData</title> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="resources/manual-helper.js"></script> - </head> - <body> - <script> - setup({explicit_timeout: true}); - - setupManualShareTest({title: '', text: '', url: ''}); - callWhenButtonClicked(() => navigator.share({})); - </script> - </body> -</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty.https-expected.txt new file mode 100644 index 0000000..cad8a4d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty.https-expected.txt
@@ -0,0 +1,8 @@ +This is a testharness.js-based test. +PASS share with no arguments (same as empty dictionary) +FAIL share with an empty dictionary assert_throws: function "function () { throw e }" threw object "SecurityError: Must be handling a user gesture to perform a share request." ("SecurityError") expected object "TypeError" ("TypeError") +FAIL share with a undefined argument (same as empty dictionary) assert_throws: function "function () { throw e }" threw object "SecurityError: Must be handling a user gesture to perform a share request." ("SecurityError") expected object "TypeError" ("TypeError") +FAIL share with a null argument (same as empty dictionary) assert_throws: function "function () { throw e }" threw object "SecurityError: Must be handling a user gesture to perform a share request." ("SecurityError") expected object "TypeError" ("TypeError") +FAIL share with a dictionary containing only surplus fields assert_throws: function "function () { throw e }" threw object "SecurityError: Must be handling a user gesture to perform a share request." ("SecurityError") expected object "TypeError" ("TypeError") +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty.https.html new file mode 100644 index 0000000..ee10518 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-empty.https.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>WebShare Test: Share no known fields</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/manual-helper.js"></script> + </head> + <body> + <script> + promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.share()); + }, 'share with no arguments (same as empty dictionary)'); + + promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.share({})); + }, 'share with an empty dictionary'); + + promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.share(undefined)); + }, 'share with a undefined argument (same as empty dictionary)'); + + promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.share(null)); + }, 'share with a null argument (same as empty dictionary)'); + + promise_test(t => { + return promise_rejects(t, + new TypeError(), navigator.share({unused: 'unexpected field'})); + }, 'share with a dictionary containing only surplus fields'); + </script> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https-expected.txt new file mode 100644 index 0000000..c230bd5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL share without a user gesture assert_throws: function "function () { throw e }" threw object "SecurityError: Must be handling a user gesture to perform a share request." that is not a DOMException NotAllowedError: property "code" is equal to 18, expected 0 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https.html index fc87a4af..cf933b8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-share/share-without-user-gesture.https.html
@@ -10,7 +10,7 @@ <script> promise_test(t => { return promise_rejects( - t, 'SecurityError', + t, 'NotAllowedError', navigator.share({title: 'the title', text: 'the message', url: 'data:the url'})); }, 'share without a user gesture');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCConfiguration-bundlePolicy-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCConfiguration-bundlePolicy-expected.txt new file mode 100644 index 0000000..c031d6e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCConfiguration-bundlePolicy-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +FAIL Default bundlePolicy should be balanced pc.getConfiguration is not a function +FAIL new RTCPeerConnection({ bundlePolicy: undefined }) should have bundlePolicy balanced pc.getConfiguration is not a function +FAIL new RTCPeerConnection({ bundlePolicy: 'balanced' }) should succeed pc.getConfiguration is not a function +FAIL new RTCPeerConnection({ bundlePolicy: 'max-compat' }) should succeed pc.getConfiguration is not a function +FAIL new RTCPeerConnection({ bundlePolicy: 'max-bundle' }) should succeed pc.getConfiguration is not a function +PASS setConfiguration({}) with initial default bundlePolicy balanced should succeed +PASS setConfiguration({}) with initial bundlePolicy balanced should succeed +PASS setConfiguration({ bundlePolicy: balanced }) with initial default bundlePolicy balanced should succeed +PASS setConfiguration({ bundlePolicy: 'balanced' }) with initial bundlePolicy balanced should succeed +PASS setConfiguration({ bundlePolicy: 'max-compat' }) with initial bundlePolicy max-compat should succeed +PASS setConfiguration({ bundlePolicy: 'max-bundle' }) with initial bundlePolicy max-bundle should succeed +PASS new RTCPeerConnection({ bundlePolicy: null }) should throw TypeError +PASS new RTCPeerConnection({ bundlePolicy: 'invalid' }) should throw TypeError +FAIL setConfiguration({ bundlePolicy: 'max-compat' }) with initial bundlePolicy max-bundle should throw InvalidModificationError assert_own_property: expected property "setConfiguration" missing +FAIL setConfiguration({}) with initial bundlePolicy max-bundle should throw InvalidModificationError assert_own_property: expected property "setConfiguration" missing +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCConfiguration-bundlePolicy.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCConfiguration-bundlePolicy.html new file mode 100644 index 0000000..e609ce4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCConfiguration-bundlePolicy.html
@@ -0,0 +1,128 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCConfiguration bundlePolicy</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + 'use strict'; + + // Test is based on the following editor draft: + // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + + /* + 4.3.2. Interface Definition + [Constructor(optional RTCConfiguration configuration)] + interface RTCPeerConnection : EventTarget { + ... + RTCConfiguration getConfiguration(); + void setConfiguration(RTCConfiguration configuration); + }; + + 4.2.1. RTCConfiguration Dictionary + dictionary RTCConfiguration { + RTCBundlePolicy bundlePolicy = "balanced"; + ... + }; + + 4.2.6. RTCBundlePolicy Enum + enum RTCBundlePolicy { + "balanced", + "max-compat", + "max-bundle" + }; + */ + + test(() => { + const pc = new RTCPeerConnection(); + assert_equals(pc.getConfiguration().bundlePolicy, 'balanced'); + }, 'Default bundlePolicy should be balanced'); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: undefined }); + assert_equals(pc.getConfiguration().bundlePolicy, 'balanced'); + }, `new RTCPeerConnection({ bundlePolicy: undefined }) should have bundlePolicy balanced`); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'balanced' }); + assert_equals(pc.getConfiguration().bundlePolicy, 'balanced'); + }, `new RTCPeerConnection({ bundlePolicy: 'balanced' }) should succeed`); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'max-compat' }); + assert_equals(pc.getConfiguration().bundlePolicy, 'max-compat'); + }, `new RTCPeerConnection({ bundlePolicy: 'max-compat' }) should succeed`); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'max-bundle' }); + assert_equals(pc.getConfiguration().bundlePolicy, 'max-bundle'); + }, `new RTCPeerConnection({ bundlePolicy: 'max-bundle' }) should succeed`); + + test(() => { + const pc = new RTCPeerConnection(); + pc.setConfiguration({}); + }, 'setConfiguration({}) with initial default bundlePolicy balanced should succeed'); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'balanced' }); + pc.setConfiguration({}); + }, 'setConfiguration({}) with initial bundlePolicy balanced should succeed'); + + test(() => { + const pc = new RTCPeerConnection(); + pc.setConfiguration({ bundlePolicy: 'balanced' }); + }, 'setConfiguration({ bundlePolicy: balanced }) with initial default bundlePolicy balanced should succeed'); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'balanced' }); + pc.setConfiguration({ bundlePolicy: 'balanced' }); + }, `setConfiguration({ bundlePolicy: 'balanced' }) with initial bundlePolicy balanced should succeed`); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'max-compat' }); + pc.setConfiguration({ bundlePolicy: 'max-compat' }); + }, `setConfiguration({ bundlePolicy: 'max-compat' }) with initial bundlePolicy max-compat should succeed`); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'max-bundle' }); + pc.setConfiguration({ bundlePolicy: 'max-bundle' }); + }, `setConfiguration({ bundlePolicy: 'max-bundle' }) with initial bundlePolicy max-bundle should succeed`); + + test(() => { + assert_throws(new TypeError(), () => + new RTCPeerConnection({ bundlePolicy: null })); + }, `new RTCPeerConnection({ bundlePolicy: null }) should throw TypeError`); + + test(() => { + assert_throws(new TypeError(), () => + new RTCPeerConnection({ bundlePolicy: 'invalid' })); + }, `new RTCPeerConnection({ bundlePolicy: 'invalid' }) should throw TypeError`); + + /* + 4.3.2. Interface Definition + To set a configuration + 5. If configuration.bundlePolicy is set and its value differs from the + connection's bundle policy, throw an InvalidModificationError. + */ + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'max-bundle' }); + assert_own_property(pc, 'setConfiguration'); + + assert_throws('InvalidModificationError', () => + pc.setConfiguration({ bundlePolicy: 'max-compat' })); + }, `setConfiguration({ bundlePolicy: 'max-compat' }) with initial bundlePolicy max-bundle should throw InvalidModificationError`); + + test(() => { + const pc = new RTCPeerConnection({ bundlePolicy: 'max-bundle' }); + assert_own_property(pc, 'setConfiguration'); + + // the default value for bundlePolicy is balanced + assert_throws('InvalidModificationError', () => + pc.setConfiguration({})); + }, `setConfiguration({}) with initial bundlePolicy max-bundle should throw InvalidModificationError`); + + /* + Coverage Report + Tested 2 + Total 2 + */ +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor-expected.txt index e5236ea..2621126a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 71 tests; 60 PASS, 11 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 65 tests; 54 PASS, 11 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS RTCPeerConnection.length PASS new RTCPeerConnection() PASS new RTCPeerConnection(null) @@ -46,12 +46,6 @@ PASS new RTCPeerConnection({ iceTransportPolicy: "none" }) FAIL new RTCPeerConnection({ iceTransports: "invalid" }) Failed to construct 'RTCPeerConnection': The provided value 'invalid' is not a valid enum value of type RTCIceTransportPolicy. FAIL new RTCPeerConnection({ iceTransports: "none" }) Failed to construct 'RTCPeerConnection': The provided value 'none' is not a valid enum value of type RTCIceTransportPolicy. -PASS new RTCPeerConnection({ bundlePolicy: null }) -PASS new RTCPeerConnection({ bundlePolicy: undefined }) -PASS new RTCPeerConnection({ bundlePolicy: "balanced" }) -PASS new RTCPeerConnection({ bundlePolicy: "max-compat" }) -PASS new RTCPeerConnection({ bundlePolicy: "max-bundle" }) -PASS new RTCPeerConnection({ bundlePolicy: "invalid" }) PASS new RTCPeerConnection({ rtcpMuxPolicy: null }) PASS new RTCPeerConnection({ rtcpMuxPolicy: undefined }) PASS new RTCPeerConnection({ rtcpMuxPolicy: "negotiate" })
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor.html index 97cc200b..d14afaf 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor.html +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-constructor.html
@@ -70,14 +70,6 @@ '{ iceTransports: "invalid" }': false, '{ iceTransports: "none" }': false, - // bundlePolicy - '{ bundlePolicy: null }': new TypeError, - '{ bundlePolicy: undefined }': false, - '{ bundlePolicy: "balanced" }': false, - '{ bundlePolicy: "max-compat" }': false, - '{ bundlePolicy: "max-bundle" }': false, - '{ bundlePolicy: "invalid" }': new TypeError, - // rtcpMuxPolicy '{ rtcpMuxPolicy: null }': new TypeError, '{ rtcpMuxPolicy: undefined }': false,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers-expected.txt new file mode 100644 index 0000000..559d50c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL RTCPeerConnection.getDefaultIceServers() should return array of RTCIceServer assert_own_property: expected property "getDefaultIceServers" missing +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers.html new file mode 100644 index 0000000..8d06f08 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers.html
@@ -0,0 +1,99 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection.getDefaultIceServers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + 'use strict'; + + // Test is based on the following editor draft: + // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + + /* + [Constructor(optional RTCConfiguration configuration)] + interface RTCPeerConnection : EventTarget { + static sequence<RTCIceServer> getDefaultIceServers(); + ... + }; + + dictionary RTCIceServer { + required (DOMString or sequence<DOMString>) urls; + DOMString username; + (DOMString or RTCOAuthCredential) credential; + RTCIceCredentialType credentialType = "password"; + }; + + dictionary RTCOAuthCredential { + required DOMString macKey; + required DOMString accessToken; + }; + + enum RTCIceCredentialType { + "password", + "oauth" + }; + */ + + test(() => { + assert_own_property(RTCPeerConnection, 'getDefaultIceServers'); + const iceServers = RTCPeerConnection.getDefaultIceServers(); + + assert_true(Array.isArray(iceServers), + 'Expect iceServers to be an array'); + + // dictionary IDL cannot be tested automatically using idlharness + for(const server of iceServers) { + const { urls, username, credential, credentialType } = server; + + if(Array.isArray(urls)) { + for(const url of urls) { + assert_equals(typeof url, 'string', + 'Expect elements in urls array to be string'); + } + } else { + assert_equals(typeof urls, 'string', + 'Expect urls to be either string or array'); + } + + if(username !== undefined) { + assert_equals(typeof username, 'string', + 'Expect username to be either undefined or string'); + } + + assert_true(credentialType === 'password' || credentialType === 'oauth', + 'Expect credentialType to be either password or oauth') + + if(credential) { + if(typeof(credential) === 'object') { + const { macKey, accessToken } = credential; + assert_equals(typeof macKey, 'string', + 'Expect macKey to be string'); + + assert_equals(typeof accessToken, 'string', + 'Expect accessToken to be string'); + + } else { + assert_equals(typeof credential, 'string', + 'Expect credential to be either undefined, string, or RTCOauthCredential dictionary'); + } + } + } + + // Expect default ice servers to be accepted as valid configuration + const pc = new RTCPeerConnection({ iceServers }); + + // Only make sure there are same number of ice servers configured + // and not do any deep equality checking + assert_equals(pc.getConfiguration().iceServers.length, iceServers.length); + + }, 'RTCPeerConnection.getDefaultIceServers() should return array of RTCIceServer'); + + /* + Coverage Report + Since there is no steps involved and we are only checking basic call, + This is counted as 1 trivial test coverage. + + Tested 1 + Total 1 + */ +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection-expected.txt new file mode 100644 index 0000000..f871d9e1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL setDirection should change transceiver.direction pc.addTransceiver is not a function +FAIL setDirection with same direction should have no effect pc.addTransceiver is not a function +FAIL setDirection should change transceiver.direction independent of transceiver.currentDirection pc.addTransceiver is not a function +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection.html new file mode 100644 index 0000000..00cddce --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection.html
@@ -0,0 +1,94 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCRtpTransceiver.prototype.setDirection</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> + 'use strict'; + + // Test is based on the following editor draft: + // https://rawgit.com/w3c/webrtc-pc/cc8d80f455b86c8041d63bceb8b457f45c72aa89/webrtc.html + + // The following helper functions are called from RTCPeerConnection-helper.js: + // generateAnswer + + /* + 5.4. RTCRtpTransceiver Interface + interface RTCRtpTransceiver { + readonly attribute RTCRtpTransceiverDirection direction; + readonly attribute RTCRtpTransceiverDirection? currentDirection; + void setDirection(RTCRtpTransceiverDirection direction); + ... + }; + */ + + /* + 5.4. setDirection + 4. Set transceiver's [[Direction]] slot to newDirection. + */ + test(t => { + const pc = new RTCPeerConnection(); + const transceiver = pc.addTransceiver('audio'); + assert_equals(transceiver.direction, 'sendrecv'); + assert_equals(transceiver.currentDirection, null); + + transceiver.setDirection('recvonly'); + assert_equals(transceiver.direction, 'recvonly'); + assert_equals(transceiver.currentDirection, null, + 'Expect transceiver.currentDirection to not change'); + + }, 'setDirection should change transceiver.direction'); + + /* + 5.4. setDirection + 3. If newDirection is equal to transceiver's [[Direction]] slot, abort + these steps. + */ + test(t => { + const pc = new RTCPeerConnection(); + const transceiver = pc.addTransceiver('audio', { direction: 'sendonly' }); + assert_equals(transceiver.direction, 'sendonly'); + transceiver.setDirection('sendonly'); + assert_equals(transceiver.direction, 'sendonly'); + + }, 'setDirection with same direction should have no effect'); + + promise_test(t => { + const pc = new RTCPeerConnection(); + const transceiver = pc.addTransceiver('audio', { direction: 'recvonly' }); + assert_equals(transceiver.direction, 'recvonly'); + assert_equals(transceiver.currentDirection, null); + + return pc.createOffer() + .then(offer => + pc.setLocalDescription(offer) + .then(() => generateAnswer(offer))) + .then(answer => pc.setRemoteDescription(answer)) + .then(() => { + assert_equals(transceiver.currentDirection, 'recvonly'); + transceiver.setDirection('sendrecv'); + assert_equals(transceiver.direction, 'sendrecv'); + assert_equals(transceiver.currentDirection, 'recvonly'); + }); + }, 'setDirection should change transceiver.direction independent of transceiver.currentDirection'); + + /* + TODO + Calls to setDirection() do not take effect immediately. Instead, future calls + to createOffer and createAnswer mark the corresponding media description as + sendrecv, sendonly, recvonly or inactive as defined in [JSEP] (section 5.2.2. + and section 5.3.2.). + + Tested in RTCPeerConnection-onnegotiationneeded.html + 5.4. setDirection + 6. Update the negotiation-needed flag for connection. + + Coverage Report + Tested 6 + Not Tested 1 + Untestable 0 + Total 7 + */ + +</script>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-expected.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-expected.html deleted file mode 100644 index 690f062..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-expected.html +++ /dev/null
@@ -1,29 +0,0 @@ -<html> -<head> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#far { - position: absolute; - left: 0px; - top: 0px; - width: 200px; - height: 200px; - background-color: green; -} -</style> - -</head> -<body> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-layered-expected.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-layered-expected.html deleted file mode 100644 index 690f062..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-layered-expected.html +++ /dev/null
@@ -1,29 +0,0 @@ -<html> -<head> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#far { - position: absolute; - left: 0px; - top: 0px; - width: 200px; - height: 200px; - background-color: green; -} -</style> - -</head> -<body> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-layered.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-layered.html deleted file mode 100644 index c2f6913..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far-layered.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#near { - position: absolute; - left: 200px; - top: 200px; - width: 100px; - height: 100px; - background-color: red; -} - -#far { - position: absolute; - left: 200px; - top: 9000px; - width: 100px; - height: 100px; - background-color: green; - transform: translateZ(0px); /* force separate layer */ -} -</style> - -<script> -function test() -{ - InspectorTest.evaluateInPage("testRunner.dumpAsTextWithPixelResults();", () => { - InspectorTest.EmulationAgent.invoke_forceViewport({x: 200, y: 9000, scale: 2.0}).then(overrideActive); - }); - - function overrideActive(msg) - { - // Complete the test without closing the inspector, so that the override stays active for the picture. - InspectorTest.flushResults(); - InspectorTest.evaluateInPage("testRunner.notifyDone();"); - } -} -</script> - -</head> -<body onload="runTest()"> -<p> -Tests that a forced viewport repositions and scales an element on a separate layer that lies outside the normal painting area. -</p> -<div id="near"></div> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far.html deleted file mode 100644 index 0dd1717..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-far.html +++ /dev/null
@@ -1,60 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#near { - position: absolute; - left: 200px; - top: 200px; - width: 100px; - height: 100px; - background-color: red; -} - -#far { - position: absolute; - left: 200px; - top: 9000px; - width: 100px; - height: 100px; - background-color: green; -} -</style> - -<script> -function test() -{ - InspectorTest.evaluateInPage("testRunner.dumpAsTextWithPixelResults();", () => { - InspectorTest.EmulationAgent.invoke_forceViewport({x: 200, y: 9000, scale: 2.0}).then(overrideActive); - }); - - function overrideActive(msg) - { - // Complete the test without closing the inspector, so that the override stays active for the picture. - InspectorTest.flushResults(); - InspectorTest.evaluateInPage("testRunner.notifyDone();"); - } -} -</script> - -</head> -<body onload="runTest()"> -<p> -Tests that a forced viewport repositions and scales an element that lies outside the normal painting area. -</p> -<div id="near"></div> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-near-expected.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-near-expected.html deleted file mode 100644 index 6aa501f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-near-expected.html +++ /dev/null
@@ -1,29 +0,0 @@ -<html> -<head> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#near { - position: absolute; - left: 0px; - top: 0px; - width: 200px; - height: 200px; - background-color: red; -} -</style> - -</head> -<body> -<div id="near"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-near.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-near.html deleted file mode 100644 index 811b629c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-near.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#near { - position: absolute; - left: 200px; - top: 200px; - width: 100px; - height: 100px; - background-color: red; -} - -#far { - position: absolute; - left: 200px; - top: 9000px; - width: 100px; - height: 100px; - background-color: green; -} -</style> - -<script> -function test() -{ - InspectorTest.evaluateInPage("testRunner.dumpAsTextWithPixelResults();", () => { - InspectorTest.EmulationAgent.invoke_forceViewport({x: 100, y: 100, scale: 1.0}).then(firstOverrideActive); - }); - - function firstOverrideActive() - { - InspectorTest.EmulationAgent.invoke_forceViewport({x: 200, y: 200, scale: 2.0}).then(secondOverrideActive); - } - - function secondOverrideActive() - { - // Complete the test without closing the inspector, so that the override stays active for the picture. - InspectorTest.flushResults(); - InspectorTest.evaluateInPage("testRunner.notifyDone();"); - } -} -</script> - -</head> -<body onload="runTest()"> -<p> -Tests that a forced viewport repositions and scales an element that lies inside the normal painting area. Also verifies that applying a subsequent forced viewport updates an prior one. -</p> -<div id="near"></div> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-reset-expected.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-reset-expected.html deleted file mode 100644 index 7752e92b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-reset-expected.html +++ /dev/null
@@ -1,42 +0,0 @@ -<html> -<head> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#near { - position: absolute; - left: 200px; - top: 200px; - width: 100px; - height: 100px; - background-color: red; -} - -#far { - position: absolute; - left: 200px; - top: 9000px; - width: 100px; - height: 100px; - background-color: green; -} -</style> - -</head> -<body> -<p> -Tests that resetting an earlier forced viewport restores the viewport back to original area. -</p> -<div id="near"></div> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-reset.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-reset.html deleted file mode 100644 index 83bdf04..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-reset.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#near { - position: absolute; - left: 200px; - top: 200px; - width: 100px; - height: 100px; - background-color: red; -} - -#far { - position: absolute; - left: 200px; - top: 9000px; - width: 100px; - height: 100px; - background-color: green; -} -</style> - -<script> -function test() -{ - InspectorTest.evaluateInPage("testRunner.dumpAsTextWithPixelResults();", () => { - InspectorTest.EmulationAgent.invoke_forceViewport({x: 200, y: 9000, scale: 2.0}).then(overrideActive); - }); - - function overrideActive() - { - InspectorTest.EmulationAgent.invoke_resetViewport({}).then(overrideCleared); - } - - function overrideCleared() - { - // Complete the test without closing the inspector, so that the override stays active for the picture. - InspectorTest.flushResults(); - InspectorTest.evaluateInPage("testRunner.notifyDone();"); - } -} -</script> - -</head> -<body onload="runTest()"> -<p> -Tests that resetting an earlier forced viewport restores the viewport back to original area. -</p> -<div id="near"></div> -<div id="far"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-unobserved-expected.txt b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-unobserved-expected.txt deleted file mode 100644 index 9a34f69..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-unobserved-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -Tests that a forced viewport does not change metrics that are observable by the page. - -innerWidth = 800 -innerHeight = 600 -scrollLeft = 0 -scrollTop = 0 -
diff --git a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-unobserved.html b/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-unobserved.html deleted file mode 100644 index d012680..0000000 --- a/third_party/WebKit/LayoutTests/inspector/device-mode/forced-viewport-unobserved.html +++ /dev/null
@@ -1,63 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> - -<style> -html { - overflow: hidden; -} - -body { - margin: 0; - min-height: 1000px; - overflow: hidden; -} - -#long { - height: 2000px; - width: 100px; - background-color: green; -} -</style> - -<script> -function dump() -{ - return { - w: window.innerWidth, - h: window.innerHeight, - l: document.documentElement.scrollLeft, - t: document.documentElement.scrollTop - }; -} - -function test() -{ - InspectorTest.EmulationAgent.invoke_forceViewport({x: 200, y: 200, scale: 2.0 }).then(overrideActive); - - function overrideActive() - { - InspectorTest.RuntimeAgent.invoke_evaluate({expression: 'dump()', returnByValue: true}).then(gotResult); - } - - function gotResult(result) - { - var values = result.result.value; - InspectorTest.addResult("innerWidth = " + values.w); - InspectorTest.addResult("innerHeight = " + values.h); - InspectorTest.addResult("scrollLeft = " + values.l); - InspectorTest.addResult("scrollTop = " + values.t); - InspectorTest.completeTest(); - } -} -</script> - -</head> -<body onload="runTest()"> -<p> -Tests that a forced viewport does not change metrics that are observable by the page. -</p> -<div id="long"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-02-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-02-t.svg index ce7bdc9..3c8f3a53 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-02-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-02-t.svg
@@ -90,4 +90,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-03-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-03-t.svg index 51c8e899..27cdf90 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-03-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-03-t.svg
@@ -85,4 +85,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.10 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-04-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-04-t.svg index ac3cdee..cee696b 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-04-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-04-t.svg
@@ -50,4 +50,8 @@ </g> <text id="revision" x="5" y="57" font-size="6" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="78" height="58" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-05-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-05-t.svg index 5cb72ad..e1a2c3c6b 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-05-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-05-t.svg
@@ -52,4 +52,8 @@ </g> <text id="revision" x="5" y="57" font-size="6" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="78" height="58" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-06-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-06-t.svg index 1cb3f5b..d17c878 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-06-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-06-t.svg
@@ -51,4 +51,8 @@ </g> <text id="revision" x="5" y="57" font-size="6" stroke="none" fill="black">$Revision: 1.9 $</text> <rect id="test-frame" x="1" y="1" width="78" height="58" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-07-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-07-t.svg index 44867325..92409b6 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-07-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-07-t.svg
@@ -53,4 +53,8 @@ </g> <text id="revision" x="5" y="57" font-size="6" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="78" height="58" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-08-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-08-t.svg index 588d5c6..6e2c45c 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-08-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-08-t.svg
@@ -68,4 +68,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-09-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-09-t.svg index 16401ca..3162bcf9 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-09-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-09-t.svg
@@ -87,4 +87,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-10-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-10-t.svg index 7c3473ea..ae29af8 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-10-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-10-t.svg
@@ -84,4 +84,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-11-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-11-t.svg index 783ac15..5b1c63e7 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-11-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-11-t.svg
@@ -83,4 +83,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.9 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-12-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-12-t.svg index 7f8b3c56..613e85bb 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-12-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-12-t.svg
@@ -83,4 +83,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-13-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-13-t.svg index 8f0aff07f..98d6ab1 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-13-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-13-t.svg
@@ -91,4 +91,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-14-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-14-t.svg index 6809fd47..782ca91 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-14-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-14-t.svg
@@ -72,5 +72,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-15-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-15-t.svg index c075c15..1f57eaa 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-15-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-15-t.svg
@@ -73,5 +73,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.5 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-16-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-16-t.svg index c5d8d15..f00afe0 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-16-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-16-t.svg
@@ -73,5 +73,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.1 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-17-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-17-t.svg index b1d378f7..d84c63b5 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-17-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-17-t.svg
@@ -73,5 +73,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-18-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-18-t.svg index af4c139..f63d5ce 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-18-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-18-t.svg
@@ -72,5 +72,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.1 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-19-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-19-t.svg index f01c31e..2d8fa90 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-19-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-19-t.svg
@@ -73,5 +73,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-20-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-20-t.svg index 3aa6b057..431f4527 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-20-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-20-t.svg
@@ -72,4 +72,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-21-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-21-t.svg index 05b36deb..e2baa0b 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-21-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-21-t.svg
@@ -84,4 +84,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-22-b.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-22-b.svg index c2fc11d..cba1ecb 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-22-b.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-22-b.svg
@@ -76,5 +76,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-23-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-23-t.svg index fbfa958..03eef70a 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-23-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-23-t.svg
@@ -83,5 +83,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t.svg index 2d2f041..3415fdc 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t.svg
@@ -102,4 +102,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-25-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-25-t.svg index f515038f..1d400ad2 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-25-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-25-t.svg
@@ -56,4 +56,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-26-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-26-t.svg index 02f0116..53a1d7a9 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-26-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-26-t.svg
@@ -56,4 +56,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-27-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-27-t.svg index d6e36db5..3e0ef48 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-27-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-27-t.svg
@@ -73,5 +73,9 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-28-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-28-t.svg index c99306e..16ad4b6 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-28-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-28-t.svg
@@ -50,4 +50,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-29-b.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-29-b.svg index 10f46659..d171d1c 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-29-b.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-29-b.svg
@@ -95,4 +95,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.5 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-30-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-30-t.svg index 191a42b..40e3942b 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-30-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-30-t.svg
@@ -131,4 +131,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-31-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-31-t.svg index 42306e3d..142fafc 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-31-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-31-t.svg
@@ -94,4 +94,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-32-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-32-t.svg index 3b6be56..ae199495 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-32-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-32-t.svg
@@ -134,4 +134,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.16 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-33-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-33-t.svg index 491f623..6c8babb86 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-33-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-33-t.svg
@@ -110,4 +110,8 @@ <text x="5" y="265" font-size="18">Number indicates the circle's passing time in seconds.</text> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-34-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-34-t.svg index 4aef8951..b0551ddf 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-34-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-34-t.svg
@@ -78,4 +78,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-36-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-36-t.svg index 9f06e85..2a88f14 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-36-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-36-t.svg
@@ -118,4 +118,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-37-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-37-t.svg index 2c774b47..d0a9775 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-37-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-37-t.svg
@@ -75,4 +75,8 @@ <text y="60" text-anchor="middle"><polygon></text> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-39-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-39-t.svg index 48e7384..7825a5d 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-39-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-39-t.svg
@@ -120,4 +120,8 @@ </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-40-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-40-t.svg index e9be779..ee39a99 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-40-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-40-t.svg
@@ -198,4 +198,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-41-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-41-t.svg index 50cc3bf..d02f14b8 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-41-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-41-t.svg
@@ -403,4 +403,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.9 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-44-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-44-t.svg index 7090a96f..eaf740a 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-44-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-44-t.svg
@@ -52,4 +52,8 @@ <text x="5" y="275" font-size="18">Filled circle should follow morphing digit discretely.</text> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-46-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-46-t.svg index 4f90f63..35246d1 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-46-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-46-t.svg
@@ -218,4 +218,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-52-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-52-t.svg index 1a5e7ec..4153b98 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-52-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-52-t.svg
@@ -76,4 +76,8 @@ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.8 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-60-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-60-t.svg index 3a0ad69..f3abd75 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-60-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-60-t.svg
@@ -432,4 +432,8 @@ </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-61-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-61-t.svg index 3c203c5..3beb5a96 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-61-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-61-t.svg
@@ -312,4 +312,8 @@ </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-62-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-62-t.svg index 3e33ed6..b41a998 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-62-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-62-t.svg
@@ -438,4 +438,8 @@ </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-63-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-63-t.svg index 956d962..b5d6ec1 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-63-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-63-t.svg
@@ -320,4 +320,8 @@ </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-64-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-64-t.svg index 1b16073..31271bf 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-64-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-64-t.svg
@@ -102,4 +102,8 @@ </g> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-65-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-65-t.svg index b4579a1..2e6def4 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-65-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-65-t.svg
@@ -183,4 +183,8 @@ </g> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-66-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-66-t.svg index 049781e..8270d882 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-66-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-66-t.svg
@@ -185,4 +185,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-67-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-67-t.svg index d834ee8..ea013a1 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-67-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-67-t.svg
@@ -147,4 +147,8 @@ </g> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-68-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-68-t.svg index dd83fdc..5f1c312 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-68-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-68-t.svg
@@ -112,4 +112,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-69-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-69-t.svg index ab50778b3..55b87c99 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-69-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-69-t.svg
@@ -129,4 +129,8 @@ </g> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-70-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-70-t.svg index b1c2204..10198df 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-70-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-70-t.svg
@@ -123,4 +123,8 @@ </g> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-77-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-77-t.svg index 930e54e..b26417a 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-77-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-77-t.svg
@@ -292,4 +292,8 @@ </g> </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-78-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-78-t.svg index 96dc8b1f..c1b4ecca 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-78-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-78-t.svg
@@ -501,4 +501,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-80-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-80-t.svg index 4201236..cf6c974 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-80-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-80-t.svg
@@ -251,4 +251,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-81-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-81-t.svg index 4decb7b..7adda2b1 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-81-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-81-t.svg
@@ -135,4 +135,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-82-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-82-t.svg index a81ef55..fea4d78 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-82-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-82-t.svg
@@ -284,4 +284,8 @@ </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-83-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-83-t.svg index 6503558..5cd3c193 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-83-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-83-t.svg
@@ -191,4 +191,8 @@ </g> </g> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-84-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-84-t.svg index 1749453..ab740ac 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-84-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-84-t.svg
@@ -62,4 +62,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.4 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-85-t.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-85-t.svg index 122c9f3..3fa506d 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-85-t.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/animate-elem-85-t.svg
@@ -66,4 +66,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.2 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/filters-light-04-f.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/filters-light-04-f.svg index bd3ee58b..b1f176f 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/filters-light-04-f.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/filters-light-04-f.svg
@@ -133,4 +133,8 @@ <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240" text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text> </g>--> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/pservers-grad-19-b.svg b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/pservers-grad-19-b.svg index 12d62929..90110ece 100644 --- a/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/pservers-grad-19-b.svg +++ b/third_party/WebKit/LayoutTests/svg/W3C-SVG-1.1/pservers-grad-19-b.svg
@@ -78,4 +78,8 @@ </g> <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.6 $</text> <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/> + <script> + // Pause the animation at t=0. + document.documentElement.pauseAnimations(); + </script> </svg>
diff --git a/third_party/WebKit/Source/core/animation/PropertyHandleTest.cpp b/third_party/WebKit/Source/core/animation/PropertyHandleTest.cpp index 89c30f3..8dfae04 100644 --- a/third_party/WebKit/Source/core/animation/PropertyHandleTest.cpp +++ b/third_party/WebKit/Source/core/animation/PropertyHandleTest.cpp
@@ -10,7 +10,8 @@ namespace blink { -using namespace SVGNames; +using SVGNames::amplitudeAttr; +using SVGNames::exponentAttr; class PropertyHandleTest : public ::testing::Test {};
diff --git a/third_party/WebKit/Source/core/frame/DocumentLoadingRenderingTest.cpp b/third_party/WebKit/Source/core/frame/DocumentLoadingRenderingTest.cpp index 1224bd4..f3885c0 100644 --- a/third_party/WebKit/Source/core/frame/DocumentLoadingRenderingTest.cpp +++ b/third_party/WebKit/Source/core/frame/DocumentLoadingRenderingTest.cpp
@@ -16,8 +16,6 @@ namespace blink { -using namespace HTMLNames; - class DocumentLoadingRenderingTest : public SimTest {}; TEST_F(DocumentLoadingRenderingTest, @@ -218,7 +216,7 @@ // Replace the stylesheet by changing href. auto* element = GetDocument().getElementById("link"); EXPECT_NE(nullptr, element); - element->setAttribute(hrefAttr, "second.css"); + element->setAttribute(HTMLNames::hrefAttr, "second.css"); EXPECT_FALSE(Compositor().NeedsBeginFrame()); second_css_resource.Complete("body { color: red; }");
diff --git a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp index 4b4ab41..ceb1319 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp
@@ -28,10 +28,6 @@ static const char kScriptExecutionDisabled[] = "scriptExecutionDisabled"; static const char kTouchEventEmulationEnabled[] = "touchEventEmulationEnabled"; static const char kEmulatedMedia[] = "emulatedMedia"; -static const char kForcedViewportEnabled[] = "forcedViewportEnabled"; -static const char kForcedViewportX[] = "forcedViewportX"; -static const char kForcedViewportY[] = "forcedViewportY"; -static const char kForcedViewportScale[] = "forcedViewportScale"; static const char kDefaultBackgroundColorOverrideRGBA[] = "defaultBackgroundColorOverrideRGBA"; } @@ -63,14 +59,6 @@ String emulated_media; state_->getString(EmulationAgentState::kEmulatedMedia, &emulated_media); setEmulatedMedia(emulated_media); - if (state_->booleanProperty(EmulationAgentState::kForcedViewportEnabled, - false)) { - forceViewport( - - state_->doubleProperty(EmulationAgentState::kForcedViewportX, 0), - state_->doubleProperty(EmulationAgentState::kForcedViewportY, 0), - state_->doubleProperty(EmulationAgentState::kForcedViewportScale, 1)); - } auto rgba_value = state_->get(EmulationAgentState::kDefaultBackgroundColorOverrideRGBA); if (rgba_value) { @@ -88,36 +76,10 @@ setTouchEmulationEnabled(false, Maybe<String>()); setEmulatedMedia(String()); setCPUThrottlingRate(1); - resetViewport(); setDefaultBackgroundColorOverride(Maybe<protocol::DOM::RGBA>()); return Response::OK(); } -Response InspectorEmulationAgent::forceViewport(double x, - double y, - double scale) { - if (x < 0 || y < 0) - return Response::Error("Coordinates must be non-negative"); - - if (scale <= 0) - return Response::Error("Scale must be positive"); - - state_->setBoolean(EmulationAgentState::kForcedViewportEnabled, true); - state_->setDouble(EmulationAgentState::kForcedViewportX, x); - state_->setDouble(EmulationAgentState::kForcedViewportY, y); - state_->setDouble(EmulationAgentState::kForcedViewportScale, scale); - - GetWebViewBase()->GetDevToolsEmulator()->ForceViewport(WebFloatPoint(x, y), - scale); - return Response::OK(); -} - -Response InspectorEmulationAgent::resetViewport() { - state_->setBoolean(EmulationAgentState::kForcedViewportEnabled, false); - GetWebViewBase()->GetDevToolsEmulator()->ResetViewport(); - return Response::OK(); -} - Response InspectorEmulationAgent::resetPageScaleFactor() { GetWebViewBase()->ResetScaleStateImmediately(); return Response::OK();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h index c9a7282..4d61d3aa 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h
@@ -37,8 +37,6 @@ ~InspectorEmulationAgent() override; // protocol::Dispatcher::EmulationCommandHandler implementation. - protocol::Response forceViewport(double x, double y, double scale) override; - protocol::Response resetViewport() override; protocol::Response resetPageScaleFactor() override; protocol::Response setPageScaleFactor(double) override; protocol::Response setScriptExecutionDisabled(bool value) override;
diff --git a/third_party/WebKit/Source/core/inspector/browser_protocol.json b/third_party/WebKit/Source/core/inspector/browser_protocol.json index 139d0a0..b122a515 100644 --- a/third_party/WebKit/Source/core/inspector/browser_protocol.json +++ b/third_party/WebKit/Source/core/inspector/browser_protocol.json
@@ -386,7 +386,7 @@ { "name": "height", "type": "integer", "description": "Overriding height value in pixels (minimum 0, maximum 10000000). 0 disables the override." }, { "name": "deviceScaleFactor", "type": "number", "description": "Overriding device scale factor value. 0 disables the override." }, { "name": "mobile", "type": "boolean", "description": "Whether to emulate mobile device. This includes viewport meta tag, overlay scrollbars, text autosizing and more." }, - { "name": "fitWindow", "type": "boolean", "description": "Whether a view that exceeds the available browser window area should be scaled down to fit." }, + { "name": "fitWindow", "type": "boolean", "optional": true, "description": "Whether a view that exceeds the available browser window area should be scaled down to fit." }, { "name": "scale", "type": "number", "optional": true, "description": "Scale to apply to resulting view image. Ignored in |fitWindow| mode." }, { "name": "offsetX", "type": "number", "optional": true, "description": "X offset to shift resulting view image by. Ignored in |fitWindow| mode." }, { "name": "offsetY", "type": "number", "optional": true, "description": "Y offset to shift resulting view image by. Ignored in |fitWindow| mode." }, @@ -900,7 +900,7 @@ { "name": "height", "type": "integer", "description": "Overriding height value in pixels (minimum 0, maximum 10000000). 0 disables the override." }, { "name": "deviceScaleFactor", "type": "number", "description": "Overriding device scale factor value. 0 disables the override." }, { "name": "mobile", "type": "boolean", "description": "Whether to emulate mobile device. This includes viewport meta tag, overlay scrollbars, text autosizing and more." }, - { "name": "fitWindow", "type": "boolean", "description": "Whether a view that exceeds the available browser window area should be scaled down to fit." }, + { "name": "fitWindow", "type": "boolean", "optional": true, "description": "Whether a view that exceeds the available browser window area should be scaled down to fit." }, { "name": "scale", "type": "number", "optional": true, "experimental": true, "description": "Scale to apply to resulting view image. Ignored in |fitWindow| mode." }, { "name": "offsetX", "type": "number", "optional": true, "deprecated": true, "experimental": true, "description": "Not used." }, { "name": "offsetY", "type": "number", "optional": true, "deprecated": true, "experimental": true, "description": "Not used." }, @@ -916,21 +916,6 @@ "description": "Clears the overriden device metrics." }, { - "name": "forceViewport", - "description": "Overrides the visible area of the page. The change is hidden from the page, i.e. the observable scroll position and page scale does not change. In effect, the command moves the specified area of the page into the top-left corner of the frame.", - "experimental": true, - "parameters": [ - { "name": "x", "type": "number", "description": "X coordinate of top-left corner of the area (CSS pixels)." }, - { "name": "y", "type": "number", "description": "Y coordinate of top-left corner of the area (CSS pixels)." }, - { "name": "scale", "type": "number", "description": "Scale to apply to the area (relative to a page scale of 1.0)." } - ] - }, - { - "name": "resetViewport", - "description": "Resets the visible area of the page to the original viewport, undoing any effects of the <code>forceViewport</code> command.", - "experimental": true - }, - { "name": "resetPageScaleFactor", "experimental": true, "description": "Requests that page scale factor is reset to initial values." @@ -945,8 +930,9 @@ }, { "name": "setVisibleSize", - "description": "Resizes the frame/viewport of the page. Note that this does not affect the frame's container (e.g. browser window). Can be used to produce screenshots of the specified size. Not supported on Android.", + "description": "Deprecated, does nothing. Please use setDeviceMetricsOverride instead.", "experimental": true, + "deprecated": true, "parameters": [ { "name": "width", "type": "integer", "description": "Frame width (DIP)." }, { "name": "height", "type": "integer", "description": "Frame height (DIP)." }
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc index d0c256ef..c21c315 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -106,6 +106,33 @@ after_style); } +// Returns true if this item is "empty", i.e. if the node contains only empty +// items it will produce a single zero block-size line box. +static bool IsItemEmpty(NGInlineItem::NGInlineItemType type, + const ComputedStyle* style) { + if (type == NGInlineItem::kAtomicInline || type == NGInlineItem::kControl || + type == NGInlineItem::kText) + return false; + + if (type == NGInlineItem::kOpenTag) { + DCHECK(style); + + if (!style->MarginStart().IsZero() || style->BorderStart().NonZero() || + !style->PaddingStart().IsZero()) + return false; + } + + if (type == NGInlineItem::kCloseTag) { + DCHECK(style); + + if (!style->MarginEnd().IsZero() || style->BorderEnd().NonZero() || + !style->PaddingEnd().IsZero()) + return false; + } + + return true; +} + static void AppendItem(Vector<NGInlineItem>* items, NGInlineItem::NGInlineItemType type, unsigned start, @@ -203,6 +230,8 @@ if (text_.length() > start_offset) { AppendItem(items_, NGInlineItem::kText, start_offset, text_.length(), style, layout_object); + + is_empty_inline_ &= IsItemEmpty(NGInlineItem::kText, style); } } @@ -229,6 +258,8 @@ mapping_builder_.AppendIdentityMapping(end - start); AppendItem(items_, NGInlineItem::kText, start_offset, text_.length(), style, layout_object); + + is_empty_inline_ &= IsItemEmpty(NGInlineItem::kText, style); start = end; } @@ -281,6 +312,8 @@ mapping_builder_.AppendIdentityMapping(1); unsigned end_offset = text_.length(); AppendItem(items_, type, end_offset - 1, end_offset, style, layout_object); + + is_empty_inline_ &= IsItemEmpty(type, style); last_collapsible_space_ = CollapsibleSpace::kNone; } @@ -292,6 +325,8 @@ mapping_builder_.AppendIdentityMapping(1); unsigned end_offset = text_.length(); AppendItem(items_, type, end_offset - 1, end_offset, nullptr, nullptr); + + is_empty_inline_ &= IsItemEmpty(type, nullptr); } template <typename OffsetMappingBuilder> @@ -301,6 +336,8 @@ LayoutObject* layout_object) { unsigned end_offset = text_.length(); AppendItem(items_, type, end_offset, end_offset, style, layout_object); + + is_empty_inline_ &= IsItemEmpty(type, style); } // Removes the collapsible newline at the end of |text_| if exists and the
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h index 6215798..35c58b4 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h
@@ -51,6 +51,10 @@ // Returns whether the items contain any Bidi controls. bool HasBidiControls() const { return has_bidi_controls_; } + // Returns if the inline node has no content. For example: + // <span></span> or <span><float></float></span>. + bool IsEmptyInline() const { return is_empty_inline_; } + // Append a string. // When appending, spaces are collapsed according to CSS Text, The white space // processing rules @@ -110,6 +114,7 @@ CollapsibleSpace last_collapsible_space_ = CollapsibleSpace::kSpace; bool is_svgtext_ = false; bool has_bidi_controls_ = false; + bool is_empty_inline_ = true; void AppendWithWhiteSpaceCollapsing(const String&, unsigned start,
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc index c1792201..039538b 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -412,6 +412,17 @@ // border and padding of the container block. content_size_ = LayoutUnit(); + // Check if we can resolve the BFC offset. + if (!Node().IsEmptyInline()) { + DCHECK(!container_builder_.BfcOffset()); + LayoutUnit bfc_block_offset = constraint_space_->BfcOffset().block_offset + + constraint_space_->MarginStrut().Sum(); + MaybeUpdateFragmentBfcOffset(*constraint_space_, bfc_block_offset, + &container_builder_); + PositionPendingFloats(bfc_block_offset, &container_builder_, + constraint_space_); + } + NGLineBreaker line_breaker(Node(), constraint_space_, &container_builder_, BreakToken()); NGLineInfo line_info;
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc index 596b4ee..aec4c53 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
@@ -284,6 +284,7 @@ MutableData().is_bidi_enabled_ = !Data().text_content_.IsEmpty() && !(Data().text_content_.Is8Bit() && !builder.HasBidiControls()); + MutableData().is_empty_inline_ = builder.IsEmptyInline(); } void NGInlineNode::SegmentText() { @@ -374,6 +375,7 @@ NGFragmentBuilder container_builder( NGPhysicalFragment::NGFragmentType::kFragmentBox, node); + container_builder.SetBfcOffset(NGLogicalOffset{LayoutUnit(), LayoutUnit()}); NGLineBreaker line_breaker(node, space.Get(), &container_builder); NGLineInfo line_info;
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h index e67356c3..11a28ba 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h
@@ -67,6 +67,8 @@ bool IsBidiEnabled() const { return Data().is_bidi_enabled_; } TextDirection BaseDirection() const { return Data().BaseDirection(); } + bool IsEmptyInline() const { return Data().is_empty_inline_; } + void AssertOffset(unsigned index, unsigned offset) const; void AssertEndOffset(unsigned index, unsigned offset) const; void CheckConsistency() const;
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_data.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_data.h index 0f91e423..f346a361 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_data.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_data.h
@@ -37,6 +37,11 @@ unsigned is_bidi_enabled_ : 1; unsigned base_direction_ : 1; // TextDirection + + // We use this flag to determine if the inline node is empty, and will + // produce a single zero block-size line box. If the node has text, atomic + // inlines, open/close tags with margins/border/padding this will be false. + unsigned is_empty_inline_ : 1; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc index f2543da..f5eadaa 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc
@@ -220,9 +220,8 @@ const NGInlineItem& item, NGInlineItemResult* item_result) { DCHECK_EQ(item.Type(), NGInlineItem::kText); + should_create_line_box_ = true; - if (!should_create_line_box_) - SetShouldCreateLineBox(); LayoutUnit available_width = AvailableWidth(); // If the start offset is at the item boundary, try to add the entire item. @@ -330,9 +329,7 @@ const NGInlineItem& item, NGInlineItemResult* item_result) { DCHECK_EQ(item.Length(), 1u); - - if (!should_create_line_box_) - SetShouldCreateLineBox(); + should_create_line_box_ = true; UChar character = node_.Text()[item.StartOffset()]; if (character == kNewlineCharacter) { @@ -354,9 +351,7 @@ const NGInlineItem& item, NGInlineItemResult* item_result) { DCHECK_EQ(item.Type(), NGInlineItem::kAtomicInline); - - if (!should_create_line_box_) - SetShouldCreateLineBox(); + should_create_line_box_ = true; NGBlockNode node = NGBlockNode(ToLayoutBox(item.GetLayoutObject())); const ComputedStyle& style = node.Style(); @@ -483,8 +478,7 @@ // Force to create a box, because such inline boxes affect line heights. item_result->needs_box_when_empty = item_result->inline_size || item_result->margins.inline_start; - if (item_result->needs_box_when_empty && !should_create_line_box_) - SetShouldCreateLineBox(); + should_create_line_box_ |= item_result->needs_box_when_empty; } } SetCurrentStyle(style); @@ -508,8 +502,7 @@ item_result->needs_box_when_empty = item_result->inline_size || item_result->margins.inline_end; - if (item_result->needs_box_when_empty && !should_create_line_box_) - SetShouldCreateLineBox(); + should_create_line_box_ |= item_result->needs_box_when_empty; } DCHECK(item.GetLayoutObject() && item.GetLayoutObject()->Parent()); SetCurrentStyle(item.GetLayoutObject()->Parent()->StyleRef()); @@ -600,28 +593,6 @@ line_info->SetIsLastLine(false); } -void NGLineBreaker::SetShouldCreateLineBox() { - DCHECK(!should_create_line_box_); - should_create_line_box_ = true; - - // We resolve the BFC-offset of the container if this line has a line box. - // A line box prevents collapsing margins between boxes before and after, - // but not all lines create line boxes. - // - // If this line just has a float we place it in the unpositioned float list - // which will be positioned later. - if (!container_builder_->BfcOffset()) { - LayoutUnit container_bfc_block_offset = - constraint_space_->BfcOffset().block_offset + - constraint_space_->MarginStrut().Sum(); - MaybeUpdateFragmentBfcOffset(*constraint_space_, container_bfc_block_offset, - container_builder_); - PositionPendingFloats(container_bfc_block_offset, container_builder_, - constraint_space_); - UpdateAvailableWidth(); - } -} - void NGLineBreaker::SetCurrentStyle(const ComputedStyle& style) { auto_wrap_ = style.AutoWrap();
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h index 774c961..6d8c2256 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h
@@ -82,8 +82,6 @@ void HandleOverflow(NGLineInfo*); void Rewind(NGLineInfo*, unsigned new_end); - void SetShouldCreateLineBox(); - void SetCurrentStyle(const ComputedStyle&); bool IsFirstBreakOpportunity(unsigned, const NGInlineItemResults&) const;
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker_test.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker_test.cc index 02cd2fb..f9c37cb 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker_test.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker_test.cc
@@ -38,6 +38,7 @@ NGFragmentBuilder container_builder( NGPhysicalFragment::NGFragmentType::kFragmentBox, node); + container_builder.SetBfcOffset(NGLogicalOffset{LayoutUnit(), LayoutUnit()}); NGLineBreaker line_breaker(node, space.Get(), &container_builder); Vector<NGInlineItemResults> lines;
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp index 0776e3b..06bcc30 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp +++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -60,7 +60,7 @@ namespace blink { -using Checkpoint = ::testing::StrictMock<testing::MockFunction<void(int)>>; +using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; class StubLocalFrameClientWithParent final : public EmptyLocalFrameClient { public: @@ -229,7 +229,7 @@ KURL url; KURL main_resource_url; - Persistent<testing::NiceMock<MockLocalFrameClient>> client; + Persistent<::testing::NiceMock<MockLocalFrameClient>> client; }; class FrameFetchContextModifyRequestTest : public FrameFetchContextTest { @@ -1015,7 +1015,7 @@ Checkpoint checkpoint; EXPECT_CALL(checkpoint, Call(1)); - EXPECT_CALL(*client, UserAgent()).WillOnce(testing::Return(String("hi"))); + EXPECT_CALL(*client, UserAgent()).WillOnce(::testing::Return(String("hi"))); EXPECT_CALL(checkpoint, Call(2)); checkpoint.Call(1); @@ -1295,7 +1295,7 @@ ClientLoFiInterventionHeader) { // Verify header not added if Lo-Fi not active. EXPECT_CALL(*client, IsClientLoFiActiveForFrame()) - .WillRepeatedly(testing::Return(false)); + .WillRepeatedly(::testing::Return(false)); ResourceRequest resource_request("http://www.example.com/style.css"); fetch_context->AddAdditionalRequestHeaders(resource_request, kFetchMainResource); @@ -1303,7 +1303,7 @@ // Verify header is added if Lo-Fi is active. EXPECT_CALL(*client, IsClientLoFiActiveForFrame()) - .WillRepeatedly(testing::Return(true)); + .WillRepeatedly(::testing::Return(true)); fetch_context->AddAdditionalRequestHeaders(resource_request, kFetchSubresource); EXPECT_EQ(
diff --git a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainterTest.cpp b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainterTest.cpp index 68362a9..e2e80647 100644 --- a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainterTest.cpp +++ b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainterTest.cpp
@@ -80,7 +80,7 @@ const static int kPixelDelta = 4; -#define EXPECT_RECT_EQ(expected, actual) \ +#define EXPECT_RECT_APPROX_EQ(expected, actual) \ do { \ const FloatRect& actual_rect = actual; \ EXPECT_TRUE( \ @@ -109,16 +109,16 @@ const DrawingDisplayItem* drawing_display_item = GetDrawingForSVGTextById("target"); AssertTextDrawingEquals(drawing_display_item, "x"); - EXPECT_RECT_EQ(IntRect(50, 3, 15, 33), - drawing_display_item->GetPaintRecordBounds()); + EXPECT_RECT_APPROX_EQ(IntRect(50, 3, 15, 33), + drawing_display_item->GetPaintRecordBounds()); SelectAllText(); GetDocument().View()->UpdateAllLifecyclePhases(); drawing_display_item = GetDrawingForSVGTextById("target"); AssertTextDrawingEquals(drawing_display_item, "x"); - EXPECT_RECT_EQ(IntRect(50, 3, 15, 33), - drawing_display_item->GetPaintRecordBounds()); + EXPECT_RECT_APPROX_EQ(IntRect(50, 3, 15, 33), + drawing_display_item->GetPaintRecordBounds()); } TEST_F(SVGInlineTextBoxPainterTest, TextCullRect_WritingModeTopToBottom) { @@ -131,8 +131,8 @@ const DrawingDisplayItem* drawing_display_item = GetDrawingForSVGTextById("target"); AssertTextDrawingEquals(drawing_display_item, "x"); - EXPECT_RECT_EQ(IntRect(33, 30, 34, 15), - drawing_display_item->GetPaintRecordBounds()); + EXPECT_RECT_APPROX_EQ(IntRect(33, 30, 34, 15), + drawing_display_item->GetPaintRecordBounds()); SelectAllText(); GetDocument().View()->UpdateAllLifecyclePhases(); @@ -142,8 +142,8 @@ // enclosingIntRect() in SVGInlineTextBox::localSelectionRect(). drawing_display_item = GetDrawingForSVGTextById("target"); AssertTextDrawingEquals(drawing_display_item, "x"); - EXPECT_RECT_EQ(IntRect(33, 30, 34, 16), - drawing_display_item->GetPaintRecordBounds()); + EXPECT_RECT_APPROX_EQ(IntRect(33, 30, 34, 16), + drawing_display_item->GetPaintRecordBounds()); } TEST_F(SVGInlineTextBoxPainterTest, TextCullRect_TextShadow) { @@ -157,8 +157,8 @@ const DrawingDisplayItem* drawing_display_item = GetDrawingForSVGTextById("target"); AssertTextDrawingEquals(drawing_display_item, "x"); - EXPECT_RECT_EQ(IntRect(50, 3, 220, 238), - drawing_display_item->GetPaintRecordBounds()); + EXPECT_RECT_APPROX_EQ(IntRect(50, 3, 220, 238), + drawing_display_item->GetPaintRecordBounds()); } } // namespace
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js index f00e8ad8..b7ab980 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js
@@ -619,7 +619,6 @@ height: pageHeight, deviceScaleFactor: deviceScaleFactor, mobile: mobile, - fitWindow: false, scale: scale, screenWidth: screenSize.width, screenHeight: screenSize.height, @@ -653,30 +652,41 @@ if (overlayModel) overlayModel.setShowViewportSizeOnResize(false); - var pageSize = fullSize ? new UI.Size(metrics.contentWidth, metrics.contentHeight) : this._emulatedPageSize; - var promises = []; - promises.push(this._emulationModel.setVisibleSize(Math.floor(pageSize.width), Math.floor(pageSize.height))); + // Emulate full size device if necessary. + var deviceMetrics; if (fullSize) { - promises.push(this._emulationModel.forceViewport({x: 0, y: 0, scale: 1})); - } else { - promises.push(this._emulationModel.forceViewport( - {x: Math.floor(metrics.viewportX), y: Math.floor(metrics.viewportY), scale: metrics.viewportScale})); + var pageSize = fullSize ? new UI.Size(metrics.contentWidth, metrics.contentHeight) : this._emulatedPageSize; + deviceMetrics = { + width: Math.floor(pageSize.width), + height: Math.floor(pageSize.height), + deviceScaleFactor: this._device ? this._device.deviceScaleFactor : window.devicePixelRatio, + mobile: this._isMobile(), + }; + + if (this._device) { + var screenOrientation = this._mode.orientation === Emulation.EmulatedDevice.Horizontal ? + Protocol.Emulation.ScreenOrientationType.LandscapePrimary : + Protocol.Emulation.ScreenOrientationType.PortraitPrimary; + var screenOrientationAngle = + screenOrientation === Protocol.Emulation.ScreenOrientationType.LandscapePrimary ? 90 : 0; + deviceMetrics.screenOrientation = {type: screenOrientation, angle: screenOrientationAngle}; + } + await this._emulationModel.resetPageScaleFactor(); + await this._emulationModel.emulateDevice(deviceMetrics); } - promises.push(this._emulationModel.emulateDevice({ - width: 0, - height: 0, - deviceScaleFactor: this._appliedDeviceScaleFactor, - mobile: this._isMobile(), - fitWindow: false, - scale: 1, - })); - await Promise.all(promises); var screenshot = await screenCaptureModel.captureScreenshot('png', 100); - this._emulationModel.setVisibleSize( - Math.floor(this._emulatedPageSize.width * this._scale), - Math.floor(this._emulatedPageSize.height * this._scale)); - this._emulationModel.forceViewport(null); + if (fullSize) { + if (this._device) { + var orientation = this._device.orientationByName(this._mode.orientation); + deviceMetrics.width = orientation.width; + deviceMetrics.height = orientation.height; + } else { + deviceMetrics.width = 0; + deviceMetrics.height = 0; + } + await this._emulationModel.emulateDevice(deviceMetrics); + } this._calculateAndEmulate(false); return screenshot; }
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js index c9e54be..88a780c0 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
@@ -385,7 +385,7 @@ var pageImage = new Image(); pageImage.src = 'data:image/png;base64,' + screenshot; pageImage.onload = async () => { - var scale = window.devicePixelRatio / UI.zoomManager.zoomFactor() / this._model.scale(); + var scale = pageImage.naturalWidth / this._model.screenRect().width; var outlineRect = this._model.outlineRect().scale(scale); var screenRect = this._model.screenRect().scale(scale); var visiblePageRect = this._model.visiblePageRect().scale(scale);
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/EmulationModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/EmulationModel.js index 4bd1c4eb..825541d 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/EmulationModel.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/EmulationModel.js
@@ -59,26 +59,6 @@ } /** - * @param {number} width - * @param {number} height - * @return {!Promise} - */ - setVisibleSize(width, height) { - return this._emulationAgent.setVisibleSize(width, height); - } - - /** - * @param {{x: number, y: number, scale: number}|null} viewport - * @return {!Promise} - */ - forceViewport(viewport) { - if (viewport) - return this._emulationAgent.forceViewport(viewport.x, viewport.y, viewport.scale); - else - return this._emulationAgent.resetViewport(); - } - - /** * @return {?SDK.OverlayModel} */ overlayModel() {
diff --git a/third_party/WebKit/Source/platform/blob/BlobData.cpp b/third_party/WebKit/Source/platform/blob/BlobData.cpp index 422c3a8..1684392 100644 --- a/third_party/WebKit/Source/platform/blob/BlobData.cpp +++ b/third_party/WebKit/Source/platform/blob/BlobData.cpp
@@ -43,6 +43,7 @@ #include "platform/wtf/Vector.h" #include "platform/wtf/text/CString.h" #include "platform/wtf/text/TextEncoding.h" +#include "public/platform/FilePathConversion.h" #include "public/platform/InterfaceProvider.h" #include "public/platform/Platform.h" @@ -351,7 +352,7 @@ } case BlobDataItem::kFile: elements.push_back(DataElement::NewFile(DataElementFile::New( - item.path.IsNull() ? "" : item.path, item.offset, item.length, + WebStringToFilePath(item.path), item.offset, item.length, WTF::Time::FromDoubleT(item.expected_modification_time)))); break; case BlobDataItem::kFileSystemURL:
diff --git a/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp b/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp index 74e6df3..b0bdd75 100644 --- a/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp +++ b/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp
@@ -13,6 +13,7 @@ #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" #include "platform/testing/TestingPlatformSupport.h" #include "platform/wtf/PtrUtil.h" +#include "public/platform/FilePathConversion.h" #include "public/platform/InterfaceProvider.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -167,8 +168,8 @@ uint64_t offset, uint64_t length, WTF::Time time) { - return ExpectedElement{ - DataElement::NewFile(DataElementFile::New(path, offset, length, time))}; + return ExpectedElement{DataElement::NewFile( + DataElementFile::New(WebStringToFilePath(path), offset, length, time))}; } static ExpectedElement FileFilesystem(const KURL& url,
diff --git a/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni b/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni index 761932e..093434f5 100644 --- a/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni +++ b/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni
@@ -3,6 +3,7 @@ # found in the LICENSE file. typemaps = [ + "//mojo/common/file_path.typemap", "//third_party/WebKit/Source/platform/mojo/File.typemap", "//third_party/WebKit/Source/platform/mojo/Geometry.typemap", "//third_party/WebKit/Source/platform/mojo/KURL.typemap",
diff --git a/third_party/WebKit/public/web/WebDeviceEmulationParams.h b/third_party/WebKit/public/web/WebDeviceEmulationParams.h index fea75ee..411b139 100644 --- a/third_party/WebKit/public/web/WebDeviceEmulationParams.h +++ b/third_party/WebKit/public/web/WebDeviceEmulationParams.h
@@ -15,24 +15,25 @@ // All sizes are measured in device independent pixels. struct WebDeviceEmulationParams { - // For mobile, |screenSize| and |viewPosition| are used. - // For desktop, screen size and view position are preserved. + // For mobile, |screen_size| and |view_position| are used. + // For desktop, |screen_size| and |view_position| are preserved. enum ScreenPosition { kDesktop, kMobile, kScreenPositionLast = kMobile }; ScreenPosition screen_position; - // Emulated screen size. Used with |screenPosition == Mobile|. + // Emulated screen size. Typically full / physical size of the device screen + // in DIP. Used with |screen_position == Mobile|. WebSize screen_size; - // Position of view on the screen. Used with |screenPosition == Mobile|. + // Position of view on the screen. Used with |screen_position == Mobile|. WebPoint view_position; - // If zero, the original device scale factor is preserved. - float device_scale_factor; - // Emulated view size. Empty size means no override. WebSize view_size; + // If zero, the original device scale factor is preserved. + float device_scale_factor; + // Whether emulated view should be scaled down if necessary to fit into // available space. bool fit_to_view;
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv index 81b19a1..767f75a0 100644 --- a/tools/perf/benchmark.csv +++ b/tools/perf/benchmark.csv
@@ -127,8 +127,6 @@ v8.browsing_desktop,ulan@chromium.org, v8.browsing_mobile,ulan@chromium.org, v8.detached_context_age_in_gc,ulan@chromium.org, -v8.infinite_scroll_tbmv2,ulan@chromium.org, -v8.mobile_infinite_scroll_tbmv2,ulan@chromium.org, v8.runtime_stats.top_25,cbruni@chromium.org, v8.runtimestats.browsing_desktop,mythria@chromium.org, v8.runtimestats.browsing_mobile,mythria@chromium.org,
diff --git a/tools/perf/benchmarks/system_health_smoke_test.py b/tools/perf/benchmarks/system_health_smoke_test.py index fb8dead..4e80dd2 100644 --- a/tools/perf/benchmarks/system_health_smoke_test.py +++ b/tools/perf/benchmarks/system_health_smoke_test.py
@@ -65,14 +65,6 @@ # crbug.com/699966 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.multitab:misc:typical24', # pylint: disable=line-too-long - # crbug.com/725923 - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.load:social:facebook', # pylint: disable=line-too-long - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.load:media:flickr', # pylint: disable=line-too-long - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.load:social:tumblr', # pylint: disable=line-too-long - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.load:social:twitter', # pylint: disable=line-too-long - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_mobile.load:social:facebook', # pylint: disable=line-too-long - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_mobile.load:social:tumblr', # pylint: disable=line-too-long - 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_mobile.load:social:pinterest', # pylint: disable=line-too-long # crbug.com/725386 'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.browse:social:twitter', # pylint: disable=line-too-long })
diff --git a/tools/perf/benchmarks/v8.py b/tools/perf/benchmarks/v8.py index f285662..f5d8241 100644 --- a/tools/perf/benchmarks/v8.py +++ b/tools/perf/benchmarks/v8.py
@@ -3,7 +3,6 @@ # found in the LICENSE file. from core import perf_benchmark -from benchmarks import v8_helper from measurements import v8_detached_context_age_in_gc import page_sets @@ -11,7 +10,6 @@ from telemetry import benchmark from telemetry import story from telemetry.timeline import chrome_trace_category_filter -from telemetry.timeline import chrome_trace_config from telemetry.web_perf import timeline_based_measurement @@ -40,95 +38,6 @@ pass # Nothing not disabled. return StoryExpectations() -class _InfiniteScrollBenchmark(perf_benchmark.PerfBenchmark): - """ Base class for infinite scroll benchmarks. - """ - - def SetExtraBrowserOptions(self, options): - options.AppendExtraBrowserArgs([ - # Disable push notifications for Facebook. - '--disable-notifications', - ]) - v8_helper.AppendJSFlags(options, '--heap-growing-percent=10') - - def CreateTimelineBasedMeasurementOptions(self): - categories = [ - # Disable all categories by default. - '-*', - # Memory categories. - 'disabled-by-default-memory-infra', - # EQT categories. - 'blink.user_timing', - 'loading', - 'navigation', - 'toplevel', - # V8 categories. - 'blink.console', - 'disabled-by-default-v8.compile', - 'disabled-by-default-v8.gc', - 'renderer.scheduler', - 'v8', - 'webkit.console' - ] - category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter( - ','.join(categories)) - options = timeline_based_measurement.Options(category_filter) - # TODO(ulan): Add frame time discrepancy once it is ported to TBMv2, - # see crbug.com/606841. - options.SetTimelineBasedMetrics([ - 'expectedQueueingTimeMetric', 'v8AndMemoryMetrics']) - # Setting an empty memory dump config disables periodic dumps. - options.config.chrome_trace_config.SetMemoryDumpConfig( - chrome_trace_config.MemoryDumpConfig()) - return options - - @classmethod - def ValueCanBeAddedPredicate(cls, value, _): - return ('v8' in value.name) or ('eqt' in value.name) - - @classmethod - def ShouldTearDownStateAfterEachStoryRun(cls): - return True - - -@benchmark.Disabled('android') # Android runs V8MobileInfiniteScroll. -@benchmark.Owner(emails=['ulan@chromium.org']) -class V8InfiniteScroll(_InfiniteScrollBenchmark): - """Measures V8 GC metrics and memory usage while scrolling the top web pages. - http://www.chromium.org/developers/design-documents/rendering-benchmarks""" - - page_set = page_sets.InfiniteScrollStorySet - - @classmethod - def Name(cls): - return 'v8.infinite_scroll_tbmv2' - - def GetExpectations(self): - class StoryExpectations(story.expectations.StoryExpectations): - def SetExpectations(self): - pass # blank_page.html not disabled. - return StoryExpectations() - - -@benchmark.Enabled('android') -@benchmark.Owner(emails=['ulan@chromium.org']) -class V8MobileInfiniteScroll(_InfiniteScrollBenchmark): - """Measures V8 GC metrics and memory usage while scrolling the top mobile - web pages. - http://www.chromium.org/developers/design-documents/rendering-benchmarks""" - - page_set = page_sets.MobileInfiniteScrollStorySet - - @classmethod - def Name(cls): - return 'v8.mobile_infinite_scroll_tbmv2' - - def GetExpectations(self): - class StoryExpectations(story.expectations.StoryExpectations): - def SetExpectations(self): - pass # blank_page.html not disabled. - return StoryExpectations() - class _Top25RuntimeStats(perf_benchmark.PerfBenchmark): options = {'pageset_repeat': 3}
diff --git a/tools/perf/page_sets/data/infinite_scroll.json b/tools/perf/page_sets/data/infinite_scroll.json deleted file mode 100644 index 53f53c3..0000000 --- a/tools/perf/page_sets/data/infinite_scroll.json +++ /dev/null
@@ -1,27 +0,0 @@ -{ - "archives": { - "discourse": { - "DEFAULT": "infinite_scroll_004.wpr" - }, - "espn": { - "DEFAULT": "infinite_scroll_000.wpr" - }, - "facebook": { - "DEFAULT": "infinite_scroll_001.wpr" - }, - "flickr": { - "DEFAULT": "infinite_scroll_003.wpr" - }, - "tumblr": { - "DEFAULT": "infinite_scroll_002.wpr" - }, - "twitter": { - "DEFAULT": "infinite_scroll_000.wpr" - }, - "yahoo": { - "DEFAULT": "infinite_scroll_000.wpr" - } - }, - "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", - "platform_specific": true -} \ No newline at end of file
diff --git a/tools/perf/page_sets/data/infinite_scroll_000.wpr.sha1 b/tools/perf/page_sets/data/infinite_scroll_000.wpr.sha1 deleted file mode 100644 index 94829170..0000000 --- a/tools/perf/page_sets/data/infinite_scroll_000.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1c02c0cf53e6e39316e75dbb26e78585f21695ea \ No newline at end of file
diff --git a/tools/perf/page_sets/data/infinite_scroll_001.wpr.sha1 b/tools/perf/page_sets/data/infinite_scroll_001.wpr.sha1 deleted file mode 100644 index 20348f8e..0000000 --- a/tools/perf/page_sets/data/infinite_scroll_001.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8837d917d8d14b17442ec7bf1fe18cb7cbfaac0a \ No newline at end of file
diff --git a/tools/perf/page_sets/data/infinite_scroll_002.wpr.sha1 b/tools/perf/page_sets/data/infinite_scroll_002.wpr.sha1 deleted file mode 100644 index 10295d73..0000000 --- a/tools/perf/page_sets/data/infinite_scroll_002.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -16b472c2033ce5682584f7182f1962e49792a943 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/infinite_scroll_003.wpr.sha1 b/tools/perf/page_sets/data/infinite_scroll_003.wpr.sha1 deleted file mode 100644 index ee6af776..0000000 --- a/tools/perf/page_sets/data/infinite_scroll_003.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ddb456bd12709473e0aee8821d5d7af1b18e9b1a \ No newline at end of file
diff --git a/tools/perf/page_sets/data/infinite_scroll_004.wpr.sha1 b/tools/perf/page_sets/data/infinite_scroll_004.wpr.sha1 deleted file mode 100644 index 62b9e54..0000000 --- a/tools/perf/page_sets/data/infinite_scroll_004.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -404375ec3af6383b273e6745b0f885e99cbcf9bc \ No newline at end of file
diff --git a/tools/perf/page_sets/data/mobile_infinite_scroll.json b/tools/perf/page_sets/data/mobile_infinite_scroll.json deleted file mode 100644 index a8bd5f7..0000000 --- a/tools/perf/page_sets/data/mobile_infinite_scroll.json +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "archives": { - "discourse": { - "DEFAULT": "mobile_infinite_scroll_000.wpr" - }, - "facebook": { - "DEFAULT": "mobile_infinite_scroll_000.wpr" - }, - "flickr": { - "DEFAULT": "mobile_infinite_scroll_000.wpr" - }, - "pinterest": { - "DEFAULT": "mobile_infinite_scroll_001.wpr" - }, - "tumblr": { - "DEFAULT": "mobile_infinite_scroll_000.wpr" - }, - "twitter": { - "DEFAULT": "mobile_infinite_scroll_000.wpr" - } - }, - "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", - "platform_specific": true -}
diff --git a/tools/perf/page_sets/data/mobile_infinite_scroll_000.wpr.sha1 b/tools/perf/page_sets/data/mobile_infinite_scroll_000.wpr.sha1 deleted file mode 100644 index 55d18b8b..0000000 --- a/tools/perf/page_sets/data/mobile_infinite_scroll_000.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -36df7ee7e6088363f3743ad28b467cba4c54b328 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/mobile_infinite_scroll_001.wpr.sha1 b/tools/perf/page_sets/data/mobile_infinite_scroll_001.wpr.sha1 deleted file mode 100644 index 16f9bab..0000000 --- a/tools/perf/page_sets/data/mobile_infinite_scroll_001.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -29b293f9d8bbe10577858fd9104c0811028d66be \ No newline at end of file
diff --git a/tools/perf/page_sets/infinite_scroll_cases.py b/tools/perf/page_sets/infinite_scroll_cases.py deleted file mode 100644 index ebde46a..0000000 --- a/tools/perf/page_sets/infinite_scroll_cases.py +++ /dev/null
@@ -1,158 +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. - -import sys - -from page_sets.login_helpers import facebook_login -from page_sets.system_health import platforms -from telemetry.page import page -from telemetry.page import shared_page_state -from telemetry import story - -from py_utils import discover - -class _InfiniteScrollStory(page.Page): - """ Base class for infinite scroll stories.""" - - NAME = NotImplemented - URL = NotImplemented - SUPPORTED_PLATFORMS = platforms.ALL_PLATFORMS - - SCROLL_DISTANCE = 25000 - SCROLL_STEP = 1000 - MAX_SCROLL_RETRIES = 5 - TIME_BEFORE_SCROLL_RETRY_IN_SECONDS = 2 - TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS = 5 - - def __init__(self, story_set): - super(_InfiniteScrollStory, self).__init__( - page_set=story_set, url=self.URL, name=self.NAME, - shared_page_state_class=shared_page_state.SharedPageState, - credentials_path='data/credentials.json') - # TODO(ulan): Remove this once crbug.com/541508 is fixed. - self.script_to_evaluate_on_commit = ''' - window.WebSocket = undefined; - window.Worker = undefined; - window.performance = undefined;''' - - def RunPageInteractions(self, action_runner): - with action_runner.CreateInteraction('Load'): - action_runner.WaitForJavaScriptCondition( - 'document.body != null && ' - 'document.body.scrollHeight > window.innerHeight && ' - '!document.body.addEventListener("touchstart", function() {})') - with action_runner.CreateInteraction('Wait'): - action_runner.Wait(self.TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS) - with action_runner.CreateInteraction('GC'): - action_runner.ForceGarbageCollection() - with action_runner.CreateInteraction('Begin'): - action_runner.tab.browser.DumpMemory() - with action_runner.CreateInteraction('Scrolling'): - self._Scroll(action_runner, self.SCROLL_DISTANCE, self.SCROLL_STEP) - with action_runner.CreateInteraction('End'): - action_runner.tab.browser.DumpMemory() - - def _Scroll(self, action_runner, distance, step_size): - """ This function scrolls the webpage by the given scroll distance in - multiple steps, where each step (except the last one) has the given size. - - If scrolling gets stuck, the functions retries scrolling MAX_SCROLL_RETRIES - times waiting TIME_BEFORE_SCROLL_RETRY_IN_SECONDS seconds between retries. - """ - remaining = distance - action_runner.EvaluateJavaScript('window.scrollY') - retry_count = 0 - # Scroll until the window.scrollY is within 1 pixel of the target distance. - while remaining > 1: - action_runner.ScrollPage(distance=min(remaining, step_size) + 1) - new_remaining = (distance - - action_runner.EvaluateJavaScript('window.scrollY')) - if remaining == new_remaining: - # Scrolling is stuck. This can happen if the page is loading - # resources. Give the page some time and retry scrolling. - if retry_count == self.MAX_SCROLL_RETRIES: - raise Exception('Scrolling stuck at %d' % remaining) - retry_count += 1 - action_runner.Wait(self.TIME_BEFORE_SCROLL_RETRY_IN_SECONDS) - else: - retry_count = 0 - remaining = new_remaining - -class DiscourseDesktopStory(_InfiniteScrollStory): - NAME = 'discourse' - URL = ('https://meta.discourse.org/t/the-official-discourse-tags-plugin' + - '-discourse-tagging/26482') - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY - -class DiscourseMobileStory(_InfiniteScrollStory): - NAME = 'discourse' - URL = ('https://meta.discourse.org/t/the-official-discourse-tags-plugin' + - '-discourse-tagging/26482') - SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY - SCROLL_DISTANCE = 15000 - -class FacebookDesktopStory(_InfiniteScrollStory): - NAME = 'facebook' - URL = 'https://www.facebook.com/shakira' - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY - -class FacebookMobileStory(_InfiniteScrollStory): - NAME = 'facebook' - URL = 'https://m.facebook.com/shakira' - SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY - def RunNavigateSteps(self, action_runner): - facebook_login.LoginWithMobileSite( - action_runner, 'facebook3', self.credentials_path) - super(FacebookMobileStory, self).RunNavigateSteps(action_runner) - -class FlickrDesktopStory(_InfiniteScrollStory): - NAME = 'flickr' - URL = 'https://www.flickr.com/explore' - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY - -class FlickrMobileStory(_InfiniteScrollStory): - NAME = 'flickr' - URL = 'https://www.flickr.com/explore' - SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY - SCROLL_DISTANCE = 10000 - -class PinterestMobileStory(_InfiniteScrollStory): - NAME = 'pinterest' - URL = 'https://www.pinterest.com/all' - SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY - -class TumblrStory(_InfiniteScrollStory): - NAME = 'tumblr' - URL = 'http://techcrunch.tumblr.com/' - -class TwitterDesktopStory(_InfiniteScrollStory): - NAME = 'twitter' - URL = 'https://twitter.com/taylorswift13' - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY - -class InfiniteScrollStorySet(story.StorySet): - """ Desktop story set. """ - def __init__(self): - super(InfiniteScrollStorySet, self).__init__( - archive_data_file='data/infinite_scroll.json', - cloud_storage_bucket=story.PARTNER_BUCKET) - for story_class in _FindInfiniteScrollStoryClasses(platforms.DESKTOP): - self.AddStory(story_class(self)) - -class MobileInfiniteScrollStorySet(story.StorySet): - """ Mobile story set. """ - def __init__(self): - super(MobileInfiniteScrollStorySet, self).__init__( - archive_data_file='data/mobile_infinite_scroll.json', - cloud_storage_bucket=story.PARTNER_BUCKET) - for story_class in _FindInfiniteScrollStoryClasses(platforms.MOBILE): - self.AddStory(story_class(self)) - -def _FindInfiniteScrollStoryClasses(platform): - # Sort the classes by their names so that their order is stable and - # deterministic. - for unused_cls_name, cls in sorted(discover.DiscoverClassesInModule( - module=sys.modules[__name__], base_class=_InfiniteScrollStory, - index_by_class_name=True).iteritems()): - if platform in cls.SUPPORTED_PLATFORMS: - yield cls
diff --git a/tools/perf/page_sets/system_health/browsing_stories.py b/tools/perf/page_sets/system_health/browsing_stories.py index c9bd4c67..8667896 100644 --- a/tools/perf/page_sets/system_health/browsing_stories.py +++ b/tools/perf/page_sets/system_health/browsing_stories.py
@@ -893,7 +893,7 @@ class TumblrStory(_InfiniteScrollStory): NAME = 'browse:social:tumblr_infinite_scroll' URL = 'http://techcrunch.tumblr.com/' # This page doesn't support HTTPS. - TAGS = [story_tags.INFINITE_SCROLL] + TAGS = [story_tags.INFINITE_SCROLL, story_tags.JAVASCRIPT_HEAVY] class TwitterScrollDesktopStory(_InfiniteScrollStory):
diff --git a/tools/perf/page_sets/system_health/loading_stories.py b/tools/perf/page_sets/system_health/loading_stories.py index 828af12..1000951 100644 --- a/tools/perf/page_sets/system_health/loading_stories.py +++ b/tools/perf/page_sets/system_health/loading_stories.py
@@ -79,16 +79,14 @@ ################################################################################ -class LoadFacebookStory(_LoadingStory): - # Using Facebook login often causes "404 Not Found" with WPR. - NAME = 'load:social:facebook' - URL = 'https://www.facebook.com/rihanna' - - class LoadTwitterStory(_LoadingStory): NAME = 'load:social:twitter' URL = 'https://www.twitter.com/nasa' + # Desktop version is already covered by + # 'browse:social:twitter_infinite_scroll' + SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY + class LoadVkStory(_LoadingStory): NAME = 'load:social:vk' @@ -111,13 +109,9 @@ NAME = 'load:social:pinterest' URL = 'https://uk.pinterest.com/categories/popular/' TAGS = [story_tags.JAVASCRIPT_HEAVY] - - -class LoadTumblrStory(_LoadingStory): - NAME = 'load:social:tumblr' - # Redirects to the "http://" version. - URL = 'https://50thousand.tumblr.com/' - TAGS = [story_tags.JAVASCRIPT_HEAVY] + # Mobile story is already covered by + # 'browse:social:pinterest_infinite_scroll'. + SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY ################################################################################ @@ -252,19 +246,6 @@ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY -class LoadFlickrDesktopStory(_LoadingStory): - NAME = 'load:media:flickr' - URL = 'https://www.flickr.com/photos/tags/farm' - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY - - def _DidLoadDocument(self, action_runner): - # Wait until the 'Recently tagged' view loads. - action_runner.WaitForJavaScriptCondition(''' - document.querySelector( - '.search-photos-everyone-trending-view .photo-list-view') - !== null''') - - class LoadImgurStory(_LoadingStory): NAME = 'load:media:imgur' URL = 'http://imgur.com/gallery/5UlBN'
diff --git a/tools/resources/OWNERS b/tools/resources/OWNERS index cf28eeea..fb33baa 100644 --- a/tools/resources/OWNERS +++ b/tools/resources/OWNERS
@@ -1,2 +1,4 @@ per-file generate_resource_whitelist.*=agrieve@chromium.org per-file generate_resource_whitelist.*=estevenson@chromium.org +per-file filter_resource_whitelist.*=agrieve@chromium.org +per-file filter_resource_whitelist.*=zpeng@chromium.org
diff --git a/tools/resources/filter_resource_whitelist.py b/tools/resources/filter_resource_whitelist.py new file mode 100755 index 0000000..415444e --- /dev/null +++ b/tools/resources/filter_resource_whitelist.py
@@ -0,0 +1,50 @@ +#!/usr/bin/env python +# 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. + +__doc__ = """filter_resource_whitelist.py [-h] [--input INPUT] +[--filter FILTER] [--output OUTPUT] + +INPUT specifies a resource whitelist file containing resource IDs that should +be whitelisted, where each line of INPUT contains a single resource ID. + +FILTER specifies a resource whitelist file containing resource IDs that should +not be whitelisted, where each line of FILTER contains a single resource ID. + +Filters a resource whitelist by removing resource IDs that are contained in a +another resource whitelist. + +This script is used to generate Monochrome's locale paks. +""" + +import argparse +import sys + + +def main(): + parser = argparse.ArgumentParser(usage=__doc__) + parser.add_argument( + '--input', type=argparse.FileType('r'), required=True, + help='A resource whitelist where each line contains one resource ID. ' + 'These IDs, excluding the ones in FILTER, are to be included.') + parser.add_argument( + '--filter', type=argparse.FileType('r'), required=True, + help='A resource whitelist where each line contains one resource ID. ' + 'These IDs are to be excluded.') + parser.add_argument( + '--output', type=argparse.FileType('w'), default=sys.stdout, + help='The resource list path to write (default stdout)') + + args = parser.parse_args() + + input_resources = list(int(resource_id) for resource_id in args.input) + filter_resources = set(int(resource_id) for resource_id in args.filter) + output_resources = [resource_id for resource_id in input_resources + if resource_id not in filter_resources] + + for resource_id in sorted(output_resources): + args.output.write('%d\n' % resource_id) + +if __name__ == '__main__': + main()
diff --git a/ui/base/ime/win/tsf_input_scope.cc b/ui/base/ime/win/tsf_input_scope.cc index e2932190..d8025ef 100644 --- a/ui/base/ime/win/tsf_input_scope.cc +++ b/ui/base/ime/win/tsf_input_scope.cc
@@ -165,10 +165,6 @@ if (!g_get_proc_done) { g_get_proc_done = true; - // For stability reasons, we do not support Windows XP. - if (base::win::GetVersion() < base::win::VERSION_VISTA) - return; - HMODULE module = NULL; if (GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_PIN, L"msctf.dll", &module)) {
diff --git a/ui/base/l10n/l10n_util_unittest.cc b/ui/base/l10n/l10n_util_unittest.cc index 18d775d..159395b 100644 --- a/ui/base/l10n/l10n_util_unittest.cc +++ b/ui/base/l10n/l10n_util_unittest.cc
@@ -30,10 +30,6 @@ #include <cstdlib> #endif -#if defined(OS_WIN) -#include "base/win/windows_version.h" -#endif - #if !defined(OS_MACOSX) #include "ui/base/test/data/resource.h" #endif @@ -376,22 +372,12 @@ } #if defined(OS_WIN) - // Amharic should be blocked unless OS is Vista or newer. - if (base::win::GetVersion() < base::win::VERSION_VISTA) { - base::i18n::SetICUDefaultLocale("am"); - EXPECT_EQ("en-US", l10n_util::GetApplicationLocale("")); - EXPECT_STREQ("en", icu::Locale::getDefault().getLanguage()); - base::i18n::SetICUDefaultLocale("en-GB"); - EXPECT_EQ("en-GB", l10n_util::GetApplicationLocale("am")); - EXPECT_STREQ("en", icu::Locale::getDefault().getLanguage()); - } else { - base::i18n::SetICUDefaultLocale("am"); - EXPECT_EQ("am", l10n_util::GetApplicationLocale("")); - EXPECT_STREQ("am", icu::Locale::getDefault().getLanguage()); - base::i18n::SetICUDefaultLocale("en-GB"); - EXPECT_EQ("am", l10n_util::GetApplicationLocale("am")); - EXPECT_STREQ("am", icu::Locale::getDefault().getLanguage()); - } + base::i18n::SetICUDefaultLocale("am"); + EXPECT_EQ("am", l10n_util::GetApplicationLocale("")); + EXPECT_STREQ("am", icu::Locale::getDefault().getLanguage()); + base::i18n::SetICUDefaultLocale("en-GB"); + EXPECT_EQ("am", l10n_util::GetApplicationLocale("am")); + EXPECT_STREQ("am", icu::Locale::getDefault().getLanguage()); #endif // defined(OS_WIN) // Clean up.
diff --git a/ui/base/l10n/l10n_util_win.cc b/ui/base/l10n/l10n_util_win.cc index 01bbacc6..8acfde0 100644 --- a/ui/base/l10n/l10n_util_win.cc +++ b/ui/base/l10n/l10n_util_win.cc
@@ -15,7 +15,6 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/win/i18n.h" -#include "base/win/windows_version.h" #include "ui/base/l10n/l10n_util.h" #include "ui/display/display.h" #include "ui/display/win/screen_win.h" @@ -47,23 +46,6 @@ } } -bool IsFontPresent(const wchar_t* font_name) { - HFONT hfont = CreateFont(12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - font_name); - if (hfont == NULL) - return false; - HDC dc = GetDC(0); - HGDIOBJ oldFont = static_cast<HFONT>(SelectObject(dc, hfont)); - WCHAR actual_font_name[LF_FACESIZE]; - int size_ret = GetTextFace(dc, LF_FACESIZE, actual_font_name); - SelectObject(dc, oldFont); - DeleteObject(hfont); - ReleaseDC(0, dc); - // We don't have to worry about East Asian fonts with locale-dependent - // names here. - return (size_ret != 0) && wcscmp(font_name, actual_font_name) == 0; -} - class OverrideLocaleHolder { public: OverrideLocaleHolder() {} @@ -107,13 +89,7 @@ } bool IsLocaleSupportedByOS(const std::string& locale) { - // Block Amharic on Windows XP unless 'Abyssinica SIL' font is present. - // On Win XP, no Ethiopic/Amahric font is availabel out of box. We hard-coded - // 'Abyssinica SIL' in the resource bundle to use in the UI. Check - // for its presence to determine whether or not to support Amharic UI on XP. - return (base::win::GetVersion() >= base::win::VERSION_VISTA || - !base::LowerCaseEqualsASCII(locale, "am") || - IsFontPresent(L"Abyssinica SIL")); + return true; } bool NeedOverrideDefaultUIFont(base::string16* override_font_family, @@ -123,19 +99,9 @@ // the default Windows fonts are too small to be legible. For those // locales, IDS_UI_FONT_FAMILY is set to an actual font family to // use while for other locales, it's set to 'default'. - - // XP and Vista or later have different font size issues and - // we need separate ui font specifications. - int ui_font_family_id = IDS_UI_FONT_FAMILY; - int ui_font_size_scaler_id = IDS_UI_FONT_SIZE_SCALER; - if (base::win::GetVersion() < base::win::VERSION_VISTA) { - ui_font_family_id = IDS_UI_FONT_FAMILY_XP; - ui_font_size_scaler_id = IDS_UI_FONT_SIZE_SCALER_XP; - } - - base::string16 ui_font_family = GetStringUTF16(ui_font_family_id); + base::string16 ui_font_family = GetStringUTF16(IDS_UI_FONT_FAMILY); int scaler100; - if (!base::StringToInt(l10n_util::GetStringUTF16(ui_font_size_scaler_id), + if (!base::StringToInt(l10n_util::GetStringUTF16(IDS_UI_FONT_SIZE_SCALER), &scaler100)) return false;
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc index 7e66615..a3c31f07 100644 --- a/ui/base/resource/resource_bundle.cc +++ b/ui/base/resource/resource_bundle.cc
@@ -211,7 +211,7 @@ base::File pak_file, const base::MemoryMappedFile::Region& region) { InitSharedInstance(NULL); - std::unique_ptr<DataPack> data_pack(new DataPack(SCALE_FACTOR_100P)); + auto data_pack = base::MakeUnique<DataPack>(SCALE_FACTOR_100P); if (!data_pack->LoadFromFileRegion(std::move(pak_file), region)) { NOTREACHED() << "failed to load pak file"; return; @@ -248,6 +248,17 @@ return *g_shared_instance_; } +void ResourceBundle::LoadSecondaryLocaleDataWithPakFileRegion( + base::File pak_file, + const base::MemoryMappedFile::Region& region) { + auto data_pack = base::MakeUnique<DataPack>(SCALE_FACTOR_100P); + if (!data_pack->LoadFromFileRegion(std::move(pak_file), region)) { + NOTREACHED() << "failed to load secondary pak file"; + return; + } + secondary_locale_resources_data_ = std::move(data_pack); +} + #if !defined(OS_ANDROID) bool ResourceBundle::LocaleDataPakExists(const std::string& locale) { return !GetLocaleFilePath(locale, true).empty(); @@ -389,6 +400,7 @@ void ResourceBundle::UnloadLocaleResources() { locale_resources_data_.reset(); + secondary_locale_resources_data_.reset(); } void ResourceBundle::OverrideLocalePakForTest(const base::FilePath& pak_path) { @@ -551,20 +563,27 @@ } base::StringPiece data; + ResourceHandle::TextEncodingType encoding = + locale_resources_data_->GetTextEncodingType(); if (!locale_resources_data_->GetStringPiece(static_cast<uint16_t>(message_id), &data)) { - // Fall back on the main data pack (shouldn't be any strings here except in - // unittests). - data = GetRawDataResource(message_id); - if (data.empty()) { - NOTREACHED() << "unable to find resource: " << message_id; - return base::string16(); + if (secondary_locale_resources_data_.get() && + secondary_locale_resources_data_->GetStringPiece( + static_cast<uint16_t>(message_id), &data)) { + // Fall back on the secondary locale pak if it exists. + encoding = secondary_locale_resources_data_->GetTextEncodingType(); + } else { + // Fall back on the main data pack (shouldn't be any strings here except + // in unittests). + data = GetRawDataResource(message_id); + if (data.empty()) { + NOTREACHED() << "unable to find resource: " << message_id; + return base::string16(); + } } } // Strings should not be loaded from a data pack that contains binary data. - ResourceHandle::TextEncodingType encoding = - locale_resources_data_->GetTextEncodingType(); DCHECK(encoding == ResourceHandle::UTF16 || encoding == ResourceHandle::UTF8) << "requested localized string from binary pack file"; @@ -584,12 +603,20 @@ { base::AutoLock lock_scope(*locale_resources_data_lock_); base::StringPiece data; + if (locale_resources_data_.get() && locale_resources_data_->GetStringPiece( static_cast<uint16_t>(resource_id), &data) && !data.empty()) { return new base::RefCountedStaticMemory(data.data(), data.length()); } + + if (secondary_locale_resources_data_.get() && + secondary_locale_resources_data_->GetStringPiece( + static_cast<uint16_t>(resource_id), &data) && + !data.empty()) { + return new base::RefCountedStaticMemory(data.data(), data.length()); + } } // Release lock_scope and fall back to main data pack. return LoadDataResourceBytes(resource_id);
diff --git a/ui/base/resource/resource_bundle.h b/ui/base/resource/resource_bundle.h index d0401d9..47112f6 100644 --- a/ui/base/resource/resource_bundle.h +++ b/ui/base/resource/resource_bundle.h
@@ -151,6 +151,11 @@ // Return the global resource loader instance. static ResourceBundle& GetSharedInstance(); + // Loads a secondary locale data pack using the given file region. + void LoadSecondaryLocaleDataWithPakFileRegion( + base::File pak_file, + const base::MemoryMappedFile::Region& region); + // Check if the .pak for the given locale exists. bool LocaleDataPakExists(const std::string& locale); @@ -399,6 +404,7 @@ // Handles for data sources. std::unique_ptr<ResourceHandle> locale_resources_data_; + std::unique_ptr<ResourceHandle> secondary_locale_resources_data_; std::vector<std::unique_ptr<ResourceHandle>> data_packs_; // The maximum scale factor currently loaded.
diff --git a/ui/base/resource/resource_bundle_android.cc b/ui/base/resource/resource_bundle_android.cc index 9b0ae24..68c8c47 100644 --- a/ui/base/resource/resource_bundle_android.cc +++ b/ui/base/resource/resource_bundle_android.cc
@@ -8,6 +8,7 @@ #include "base/android/jni_android.h" #include "base/android/jni_string.h" #include "base/logging.h" +#include "base/memory/ptr_util.h" #include "base/path_service.h" #include "jni/ResourceBundle_jni.h" #include "ui/base/l10n/l10n_util.h" @@ -20,36 +21,63 @@ namespace { bool g_locale_paks_in_apk = false; +bool g_load_secondary_locale_paks = false; // It is okay to cache and share these file descriptors since the // ResourceBundle singleton never closes the handles. int g_chrome_100_percent_fd = -1; int g_resources_pack_fd = -1; int g_locale_pack_fd = -1; +int g_secondary_locale_pack_fd = -1; base::MemoryMappedFile::Region g_chrome_100_percent_region; base::MemoryMappedFile::Region g_resources_pack_region; base::MemoryMappedFile::Region g_locale_pack_region; +base::MemoryMappedFile::Region g_secondary_locale_pack_region; bool LoadFromApkOrFile(const char* apk_path, const base::FilePath* disk_path, - int* fd_out, - base::MemoryMappedFile::Region* region_out) { - DCHECK_EQ(*fd_out, -1) << "Attempt to load " << apk_path << " twice."; + int* out_fd, + base::MemoryMappedFile::Region* out_region) { + DCHECK_EQ(*out_fd, -1) << "Attempt to load " << apk_path << " twice."; if (apk_path != nullptr) { - *fd_out = base::android::OpenApkAsset(apk_path, region_out); + *out_fd = base::android::OpenApkAsset(apk_path, out_region); } // For unit tests, the file exists on disk. - if (*fd_out < 0 && disk_path != nullptr) { + if (*out_fd < 0 && disk_path != nullptr) { int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; - *fd_out = base::File(*disk_path, flags).TakePlatformFile(); - *region_out = base::MemoryMappedFile::Region::kWholeFile; + *out_fd = base::File(*disk_path, flags).TakePlatformFile(); + *out_region = base::MemoryMappedFile::Region::kWholeFile; } - bool success = *fd_out >= 0; + bool success = *out_fd >= 0; if (!success) { LOG(ERROR) << "Failed to open pak file: " << apk_path; } return success; } +int LoadLocalePakFromApk(const std::string& app_locale, + base::MemoryMappedFile::Region* out_region) { + std::string locale_path_within_apk = + GetPathForAndroidLocalePakWithinApk(app_locale); + if (locale_path_within_apk.empty()) { + LOG(ERROR) << "locale_path_within_apk.empty() for locale " + << app_locale; + return -1; + } + return base::android::OpenApkAsset(locale_path_within_apk, out_region); +} + +std::unique_ptr<DataPack> LoadDataPackFromLocalePak( + int locale_pack_fd, + const base::MemoryMappedFile::Region& region) { + auto data_pack = base::MakeUnique<DataPack>(SCALE_FACTOR_100P); + if (!data_pack->LoadFromFileRegion(base::File(locale_pack_fd), region)) { + LOG(ERROR) << "failed to load locale.pak"; + NOTREACHED(); + return nullptr; + } + return data_pack; +} + } // namespace void ResourceBundle::LoadCommonResources() { @@ -74,22 +102,18 @@ std::string ResourceBundle::LoadLocaleResources( const std::string& pref_locale) { - DCHECK(!locale_resources_data_.get()) << "locale.pak already loaded"; + DCHECK(!locale_resources_data_.get() && + !secondary_locale_resources_data_.get()) + << "locale.pak already loaded"; if (g_locale_pack_fd != -1) { LOG(WARNING) << "Unexpected (outside of tests): Loading a second locale pak file."; } std::string app_locale = l10n_util::GetApplicationLocale(pref_locale); + + // Load primary locale .pak file. if (g_locale_paks_in_apk) { - std::string locale_path_within_apk = - GetPathForAndroidLocalePakWithinApk(app_locale); - if (locale_path_within_apk.empty()) { - LOG(WARNING) << "locale_path_within_apk.empty() for locale " - << app_locale; - return std::string(); - } - g_locale_pack_fd = base::android::OpenApkAsset(locale_path_within_apk, - &g_locale_pack_region); + g_locale_pack_fd = LoadLocalePakFromApk(app_locale, &g_locale_pack_region); } else { base::FilePath locale_file_path = GetOverriddenPakPath(); if (locale_file_path.empty()) @@ -105,15 +129,27 @@ g_locale_pack_region = base::MemoryMappedFile::Region::kWholeFile; } - std::unique_ptr<DataPack> data_pack(new DataPack(SCALE_FACTOR_100P)); - if (!data_pack->LoadFromFileRegion(base::File(g_locale_pack_fd), - g_locale_pack_region)) { - LOG(ERROR) << "failed to load locale.pak"; - NOTREACHED(); + locale_resources_data_ = LoadDataPackFromLocalePak( + g_locale_pack_fd, g_locale_pack_region); + + if (!locale_resources_data_.get()) return std::string(); + + // Load secondary locale .pak file if it exists. For debug build monochrome, + // a secondary locale pak will always be loaded; however, it should be + // unnecessary for loading locale resources because the primary locale pak + // would have a copy of all the resources in the secondary locale pak. + if (g_load_secondary_locale_paks) { + g_secondary_locale_pack_fd = LoadLocalePakFromApk( + app_locale, &g_secondary_locale_pack_region); + + secondary_locale_resources_data_ = LoadDataPackFromLocalePak( + g_secondary_locale_pack_fd, g_secondary_locale_pack_region); + + if (!secondary_locale_resources_data_.get()) + return std::string(); } - locale_resources_data_ = std::move(data_pack); return app_locale; } @@ -125,6 +161,10 @@ g_locale_paks_in_apk = value; } +void SetLoadSecondaryLocalePaks(bool value) { + g_load_secondary_locale_paks = value; +} + void LoadMainAndroidPackFile(const char* path_within_apk, const base::FilePath& disk_file_path) { if (LoadFromApkOrFile(path_within_apk, @@ -155,6 +195,11 @@ return g_locale_pack_fd; } +int GetSecondaryLocalePackFd(base::MemoryMappedFile::Region* out_region) { + *out_region = g_secondary_locale_pack_region; + return g_secondary_locale_pack_fd; +} + std::string GetPathForAndroidLocalePakWithinApk(const std::string& locale) { JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> ret =
diff --git a/ui/base/resource/resource_bundle_android.h b/ui/base/resource/resource_bundle_android.h index 2123eb0..57059b0 100644 --- a/ui/base/resource/resource_bundle_android.h +++ b/ui/base/resource/resource_bundle_android.h
@@ -31,10 +31,17 @@ UI_BASE_EXPORT int GetLocalePackFd( base::MemoryMappedFile::Region* out_region); +// Returns the file descriptor and region for the secondary locale .pak file. +UI_BASE_EXPORT int GetSecondaryLocalePackFd( + base::MemoryMappedFile::Region* out_region); + // Tell ResourceBundle to locate locale pak files via // GetPathForAndroidLocalePakWithinApk rather than looking for them on disk. UI_BASE_EXPORT void SetLocalePaksStoredInApk(bool value); +// Tell ResourceBundle to load secondary locale .pak files. +UI_BASE_EXPORT void SetLoadSecondaryLocalePaks(bool value); + // Returns the path within the apk for the given locale's .pak file, or an // empty string if it doesn't exist. // Only locale paks for the active Android language can be retrieved.
diff --git a/ui/base/webui/web_ui_util.cc b/ui/base/webui/web_ui_util.cc index 8b04a37c..e6a9c5c2 100644 --- a/ui/base/webui/web_ui_util.cc +++ b/ui/base/webui/web_ui_util.cc
@@ -160,12 +160,7 @@ } std::string GetFontFamily() { - std::string font_family = l10n_util::GetStringUTF8( -#if defined(OS_WIN) - base::win::GetVersion() < base::win::VERSION_VISTA ? - IDS_WEB_FONT_FAMILY_XP : -#endif - IDS_WEB_FONT_FAMILY); + std::string font_family = l10n_util::GetStringUTF8(IDS_WEB_FONT_FAMILY); // TODO(dnicoara) Remove Ozone check when PlatformFont support is introduced // into Ozone: crbug.com/320050 @@ -178,12 +173,7 @@ } std::string GetFontSize() { - return l10n_util::GetStringUTF8( -#if defined(OS_WIN) - base::win::GetVersion() < base::win::VERSION_VISTA ? - IDS_WEB_FONT_SIZE_XP : -#endif - IDS_WEB_FONT_SIZE); + return l10n_util::GetStringUTF8(IDS_WEB_FONT_SIZE); } std::string GetTextDirection() {
diff --git a/ui/gfx/animation/animation_unittest.cc b/ui/gfx/animation/animation_unittest.cc index 85ce255..5f7ecc45 100644 --- a/ui/gfx/animation/animation_unittest.cc +++ b/ui/gfx/animation/animation_unittest.cc
@@ -11,11 +11,6 @@ #include "ui/gfx/animation/linear_animation.h" #include "ui/gfx/animation/test_animation_delegate.h" -#if defined(OS_WIN) -#include "base/test/scoped_task_environment.h" -#include "base/win/windows_version.h" -#endif - namespace gfx { class AnimationTest: public testing::Test { @@ -135,18 +130,12 @@ TEST_F(AnimationTest, ShouldRenderRichAnimation) { #if defined(OS_WIN) - if (base::win::GetVersion() >= base::win::VERSION_VISTA) { - BOOL result; - ASSERT_NE( - 0, ::SystemParametersInfo(SPI_GETCLIENTAREAANIMATION, 0, &result, 0)); - // ShouldRenderRichAnimation() should check the SPI_GETCLIENTAREAANIMATION - // value on Vista. - EXPECT_EQ(!!result, Animation::ShouldRenderRichAnimation()); - } else { - // On XP, the function should check the SM_REMOTESESSION value. - EXPECT_EQ(!::GetSystemMetrics(SM_REMOTESESSION), - Animation::ShouldRenderRichAnimation()); - } + BOOL result; + ASSERT_NE(0, + ::SystemParametersInfo(SPI_GETCLIENTAREAANIMATION, 0, &result, 0)); + // ShouldRenderRichAnimation() should check the SPI_GETCLIENTAREAANIMATION + // value on Vista. + EXPECT_EQ(!!result, Animation::ShouldRenderRichAnimation()); #else EXPECT_TRUE(Animation::ShouldRenderRichAnimation()); #endif
diff --git a/ui/gfx/animation/animation_win.cc b/ui/gfx/animation/animation_win.cc index b8a7d28..ead2e07a 100644 --- a/ui/gfx/animation/animation_win.cc +++ b/ui/gfx/animation/animation_win.cc
@@ -4,18 +4,14 @@ #include "ui/gfx/animation/animation.h" -#include "base/win/windows_version.h" - namespace gfx { // static bool Animation::ShouldRenderRichAnimation() { - if (base::win::GetVersion() >= base::win::VERSION_VISTA) { - BOOL result; - // Get "Turn off all unnecessary animations" value. - if (::SystemParametersInfo(SPI_GETCLIENTAREAANIMATION, 0, &result, 0)) { - return !!result; - } + BOOL result; + // Get "Turn off all unnecessary animations" value. + if (::SystemParametersInfo(SPI_GETCLIENTAREAANIMATION, 0, &result, 0)) { + return !!result; } return !::GetSystemMetrics(SM_REMOTESESSION); }
diff --git a/ui/gfx/linux/client_native_pixmap_dmabuf.cc b/ui/gfx/linux/client_native_pixmap_dmabuf.cc index 4927daf..e532686 100644 --- a/ui/gfx/linux/client_native_pixmap_dmabuf.cc +++ b/ui/gfx/linux/client_native_pixmap_dmabuf.cc
@@ -11,11 +11,9 @@ #include <sys/mman.h> #include <xf86drm.h> -#include "base/debug/crash_logging.h" #include "base/memory/ptr_util.h" #include "base/posix/eintr_wrapper.h" #include "base/process/memory.h" -#include "base/process/process_metrics.h" #include "base/strings/stringprintf.h" #include "base/trace_event/trace_event.h" @@ -87,36 +85,16 @@ if (mmap_error == ENOMEM) base::TerminateBecauseOutOfMemory(map_size); - // TODO(dcastagna): Remove the following diagnostic information and the - // associated crash keys once crbug.com/629521 is fixed. bool fd_valid = fcntl(dmabuf_fd_.get(), F_GETFD) != -1 || logging::GetLastSystemErrorCode() != EBADF; - int minor = -1; - int major = -1; - struct stat buf; - if (!fstat(dmabuf_fd_.get(), &buf)) { - minor = minor(buf.st_dev); - major = major(buf.st_dev); - } - std::string mmap_params = base::StringPrintf( "(addr=nullptr, length=%zu, prot=(PROT_READ | PROT_WRITE), " - "flags=MAP_SHARED, fd=%d[valid=%d, minor=%d, major=%d], offset=0)", - map_size, dmabuf_fd_.get(), fd_valid, minor, major); + "flags=MAP_SHARED, fd=%d[valid=%d], offset=0)", + map_size, dmabuf_fd_.get(), fd_valid); std::string errno_str = logging::SystemErrorCodeToString(mmap_error); - std::unique_ptr<base::ProcessMetrics> process_metrics( - base::ProcessMetrics::CreateCurrentProcessMetrics()); - std::string number_of_fds = - base::StringPrintf("%d", process_metrics->GetOpenFdCount()); - base::debug::ScopedCrashKey params_crash_key("mmap_params", mmap_params); - base::debug::ScopedCrashKey size_crash_key("buffer_size", size.ToString()); - base::debug::ScopedCrashKey errno_crash_key("errno", errno_str); - base::debug::ScopedCrashKey number_of_fds_crash_key("number_of_fds", - number_of_fds); LOG(ERROR) << "Failed to mmap dmabuf; mmap_params: " << mmap_params << ", buffer_size: (" << size.ToString() - << "), errno: " << errno_str - << " , number_of_fds: " << number_of_fds; + << "), errno: " << errno_str; LOG(ERROR) << "NativePixmapHandle:"; LOG(ERROR) << "Number of fds: " << handle.fds.size(); LOG(ERROR) << "Number of planes: " << handle.planes.size();
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index ad7e8b2..72b1673 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc
@@ -1769,12 +1769,6 @@ { kText3, 50, 6, 6 }, }; -#if defined(OS_WIN) - // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 - if (base::win::GetVersion() < base::win::VERSION_VISTA) - return; -#endif - RenderText* render_text = GetRenderText(); for (size_t i = 0; i < arraysize(cases); i++) { SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i)); @@ -1794,12 +1788,6 @@ // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 TEST_P(RenderTextHarfBuzzTest, MidGraphemeSelectionBounds) { -#if defined(OS_WIN) - // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 - if (base::win::GetVersion() < base::win::VERSION_VISTA) - return; -#endif - // Test that selection bounds may be set amid multi-character graphemes. const base::string16 kHindi = WideToUTF16(L"\x0915\x093f"); const base::string16 kThai = WideToUTF16(L"\x0e08\x0e33"); @@ -1951,12 +1939,6 @@ { kHebrewLatin, base::i18n::RIGHT_TO_LEFT }, }; -#if defined(OS_WIN) - // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 - if (base::win::GetVersion() < base::win::VERSION_VISTA) - return; -#endif - RenderText* render_text = GetRenderText(); for (size_t i = 0; i < arraysize(cases); i++) { render_text->SetText(cases[i].text);
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc index 70c83cd..3340f37 100644 --- a/ui/native_theme/native_theme_win.cc +++ b/ui/native_theme/native_theme_win.cc
@@ -16,7 +16,6 @@ #include "base/win/scoped_hdc.h" #include "base/win/scoped_select_object.h" #include "base/win/win_util.h" -#include "base/win/windows_version.h" #include "cc/paint/paint_canvas.h" #include "cc/paint/paint_flags.h" #include "skia/ext/platform_canvas.h" @@ -108,12 +107,6 @@ return static_cast<int>(animation_width * ratio) - object_width; } -RECT InsetRect(const RECT* rect, int size) { - gfx::Rect result(*rect); - result.Inset(size, size); - return result.ToRECT(); -} - // Custom scoped object for storing DC and a bitmap that was selected into it, // and making sure that they are deleted in the right order. class ScopedCreateDCWithBitmap { @@ -1365,10 +1358,7 @@ const int kDeterminateOverlayPixelsPerSecond = 300; const int kDeterminateOverlayWidth = 120; const int kIndeterminateOverlayPixelsPerSecond = 175; - const int kVistaIndeterminateOverlayWidth = 120; - const int kXPIndeterminateOverlayWidth = 55; - // The thickness of the bar frame inside |value_rect| - const int kXPBarPadding = 3; + const int kIndeterminateOverlayWidth = 120; RECT bar_rect = rect.ToRECT(); RECT value_rect = gfx::Rect(extra.value_rect_x, @@ -1386,27 +1376,19 @@ draw_theme_(handle, hdc, PP_BAR, 0, &bar_rect, NULL); - bool pre_vista = base::win::GetVersion() < base::win::VERSION_VISTA; int bar_width = bar_rect.right - bar_rect.left; if (!extra.determinate) { // The glossy overlay for the indeterminate progress bar has a small pause // after each animation. We emulate this by adding an invisible margin the // animation has to traverse. int width_with_margin = bar_width + kIndeterminateOverlayPixelsPerSecond; - int overlay_width = pre_vista ? - kXPIndeterminateOverlayWidth : kVistaIndeterminateOverlayWidth; + int overlay_width = kIndeterminateOverlayWidth; RECT overlay_rect = bar_rect; overlay_rect.left += ComputeAnimationProgress( width_with_margin, overlay_width, kIndeterminateOverlayPixelsPerSecond, extra.animated_seconds); overlay_rect.right = overlay_rect.left + overlay_width; - if (pre_vista) { - RECT shrunk_rect = InsetRect(&overlay_rect, kXPBarPadding); - RECT shrunk_bar_rect = InsetRect(&bar_rect, kXPBarPadding); - draw_theme_(handle, hdc, PP_CHUNK, 0, &shrunk_rect, &shrunk_bar_rect); - } else { - draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &bar_rect); - } + draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &bar_rect); return S_OK; } @@ -1419,26 +1401,18 @@ DTBG_MIRRORDC : 0u, bar_rect }; - if (pre_vista) { - // On XP, the progress bar is chunk-style and has no glossy effect. We need - // to shrink the destination rect to fit the part inside the bar with an - // appropriate margin. - RECT shrunk_value_rect = InsetRect(&value_rect, kXPBarPadding); - draw_theme_ex_(handle, hdc, PP_CHUNK, 0, &shrunk_value_rect, - &value_draw_options); - } else { - // On Vista or later, the progress bar part has a single-block value part - // and a glossy effect. The value part has exactly same height as the bar - // part, so we don't need to shrink the rect. - draw_theme_ex_(handle, hdc, PP_FILL, 0, &value_rect, &value_draw_options); - RECT overlay_rect = value_rect; - overlay_rect.left += ComputeAnimationProgress( - bar_width, kDeterminateOverlayWidth, kDeterminateOverlayPixelsPerSecond, - extra.animated_seconds); - overlay_rect.right = overlay_rect.left + kDeterminateOverlayWidth; - draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &value_rect); - } + // On Vista or later, the progress bar part has a single-block value part + // and a glossy effect. The value part has exactly same height as the bar + // part, so we don't need to shrink the rect. + draw_theme_ex_(handle, hdc, PP_FILL, 0, &value_rect, &value_draw_options); + + RECT overlay_rect = value_rect; + overlay_rect.left += ComputeAnimationProgress( + bar_width, kDeterminateOverlayWidth, kDeterminateOverlayPixelsPerSecond, + extra.animated_seconds); + overlay_rect.right = overlay_rect.left + kDeterminateOverlayWidth; + draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &value_rect); return S_OK; } @@ -1764,9 +1738,7 @@ case kDisabled: return ABS_DOWNDISABLED; case kHovered: - // Mimic ScrollbarThemeChromiumWin.cpp in WebKit. - return base::win::GetVersion() < base::win::VERSION_VISTA ? - ABS_DOWNHOT : ABS_DOWNHOVER; + return ABS_DOWNHOVER; case kNormal: return ABS_DOWNNORMAL; case kPressed: @@ -1780,9 +1752,7 @@ case kDisabled: return ABS_LEFTDISABLED; case kHovered: - // Mimic ScrollbarThemeChromiumWin.cpp in WebKit. - return base::win::GetVersion() < base::win::VERSION_VISTA ? - ABS_LEFTHOT : ABS_LEFTHOVER; + return ABS_LEFTHOVER; case kNormal: return ABS_LEFTNORMAL; case kPressed: @@ -1796,9 +1766,7 @@ case kDisabled: return ABS_RIGHTDISABLED; case kHovered: - // Mimic ScrollbarThemeChromiumWin.cpp in WebKit. - return base::win::GetVersion() < base::win::VERSION_VISTA ? - ABS_RIGHTHOT : ABS_RIGHTHOVER; + return ABS_RIGHTHOVER; case kNormal: return ABS_RIGHTNORMAL; case kPressed: @@ -1813,9 +1781,7 @@ case kDisabled: return ABS_UPDISABLED; case kHovered: - // Mimic ScrollbarThemeChromiumWin.cpp in WebKit. - return base::win::GetVersion() < base::win::VERSION_VISTA ? - ABS_UPHOT : ABS_UPHOVER; + return ABS_UPHOVER; case kNormal: return ABS_UPNORMAL; case kPressed: @@ -1831,9 +1797,7 @@ case kDisabled: return SCRBS_DISABLED; case kHovered: - // Mimic WebKit's behaviour in ScrollbarThemeChromiumWin.cpp. - return base::win::GetVersion() < base::win::VERSION_VISTA ? - SCRBS_HOT : SCRBS_HOVER; + return SCRBS_HOVER; case kNormal: return SCRBS_NORMAL; case kPressed:
diff --git a/ui/strings/app_locale_settings.grd b/ui/strings/app_locale_settings.grd index a6de88a..3417591a 100644 --- a/ui/strings/app_locale_settings.grd +++ b/ui/strings/app_locale_settings.grd
@@ -148,10 +148,6 @@ <message name="IDS_UI_FONT_FAMILY" use_name_for_id="true"> default </message> - <!-- For Windows XP --> - <message name="IDS_UI_FONT_FAMILY_XP" use_name_for_id="true"> - default - </message> <!-- To get the actual UI font size for native UI components (e.g. menu), the system UI font size is scaled with this value/100. @@ -159,29 +155,15 @@ <message name="IDS_UI_FONT_SIZE_SCALER" use_name_for_id="true"> 100 </message> - <!-- For Windows XP --> - <message name="IDS_UI_FONT_SIZE_SCALER_XP" use_name_for_id="true"> - 100 - </message> <!-- The font used in Web UI (e.g. History). --> <message name="IDS_WEB_FONT_FAMILY" use_name_for_id="true"> 'Segoe UI', Tahoma, sans-serif </message> - <!-- The font used in Web UI on Windows XP (e.g. History). --> - <message name="IDS_WEB_FONT_FAMILY_XP" use_name_for_id="true"> - Tahoma, sans-serif - </message> - <!-- The relative font size in % used in Web UI (e.g. History). --> <message name="IDS_WEB_FONT_SIZE" use_name_for_id="true"> 75% </message> - <!-- The relative font size in % used in web-style native pages - on Windows earlier than Vista (e.g. History). --> - <message name="IDS_WEB_FONT_SIZE_XP" use_name_for_id="true"> - 75% - </message> </if> <if expr="is_macosx"> <!-- The font used in Web UI (e.g. History). -->
diff --git a/ui/views/controls/textfield/textfield_model_unittest.cc b/ui/views/controls/textfield/textfield_model_unittest.cc index 25dcf33..d3722bb 100644 --- a/ui/views/controls/textfield/textfield_model_unittest.cc +++ b/ui/views/controls/textfield/textfield_model_unittest.cc
@@ -24,10 +24,6 @@ #include "ui/views/test/test_views_delegate.h" #include "ui/views/test/views_test_base.h" -#if defined(OS_WIN) -#include "base/win/windows_version.h" -#endif - #define EXPECT_STR_EQ(ascii, utf16) EXPECT_EQ(base::ASCIIToUTF16(ascii), utf16) namespace { @@ -153,12 +149,6 @@ } TEST_F(TextfieldModelTest, EditString_ComplexScript) { - // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 - bool on_windows_xp = false; -#if defined(OS_WIN) - on_windows_xp = base::win::GetVersion() < base::win::VERSION_VISTA; -#endif - TextfieldModel model(NULL); // Append two Hindi strings. @@ -168,30 +158,29 @@ EXPECT_EQ(base::WideToUTF16( L"\x0915\x093f\x0915\x094d\x0915\x0915\x094d\x092e\x094d"), model.text()); - if (!on_windows_xp) { - // Ensure the cursor cannot be placed in the middle of a grapheme. - MoveCursorTo(model, 1); - EXPECT_EQ(0U, model.GetCursorPosition()); + // Ensure the cursor cannot be placed in the middle of a grapheme. + MoveCursorTo(model, 1); + EXPECT_EQ(0U, model.GetCursorPosition()); - MoveCursorTo(model, 2); - EXPECT_EQ(2U, model.GetCursorPosition()); - model.InsertChar('a'); - EXPECT_EQ(base::WideToUTF16( - L"\x0915\x093f\x0061\x0915\x094d\x0915\x0915\x094d\x092e\x094d"), - model.text()); + MoveCursorTo(model, 2); + EXPECT_EQ(2U, model.GetCursorPosition()); + model.InsertChar('a'); + EXPECT_EQ( + base::WideToUTF16( + L"\x0915\x093f\x0061\x0915\x094d\x0915\x0915\x094d\x092e\x094d"), + model.text()); - // ReplaceChar will replace the whole grapheme. - model.ReplaceChar('b'); - // TODO(xji): temporarily disable in platform Win since the complex script - // characters turned into empty square due to font regression. So, not able - // to test 2 characters belong to the same grapheme. + // ReplaceChar will replace the whole grapheme. + model.ReplaceChar('b'); +// TODO(xji): temporarily disable in platform Win since the complex script +// characters turned into empty square due to font regression. So, not able +// to test 2 characters belong to the same grapheme. #if defined(OS_LINUX) - EXPECT_EQ(base::WideToUTF16( - L"\x0915\x093f\x0061\x0062\x0915\x0915\x094d\x092e\x094d"), - model.text()); + EXPECT_EQ(base::WideToUTF16( + L"\x0915\x093f\x0061\x0062\x0915\x0915\x094d\x092e\x094d"), + model.text()); #endif - EXPECT_EQ(4U, model.GetCursorPosition()); - } + EXPECT_EQ(4U, model.GetCursorPosition()); // Delete should delete the whole grapheme. MoveCursorTo(model, 0); @@ -214,12 +203,10 @@ MoveCursorTo(model, 0); EXPECT_EQ(0U, model.GetCursorPosition()); - if (!on_windows_xp) { - MoveCursorTo(model, 1); - EXPECT_EQ(0U, model.GetCursorPosition()); - MoveCursorTo(model, 3); - EXPECT_EQ(3U, model.GetCursorPosition()); - } + MoveCursorTo(model, 1); + EXPECT_EQ(0U, model.GetCursorPosition()); + MoveCursorTo(model, 3); + EXPECT_EQ(3U, model.GetCursorPosition()); // TODO(asvitkine): Temporarily disable the following check on Windows. It // seems Windows treats "\x0D38\x0D4D\x0D15" as a single grapheme.
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/camera_alt_icon.svg b/ui/webui/resources/cr_elements/chromeos/cr_picture/camera_alt_icon.svg similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/camera_alt_icon.svg rename to ui/webui/resources/cr_elements/chromeos/cr_picture/camera_alt_icon.svg
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/camera_flip_icon.svg b/ui/webui/resources/cr_elements/chromeos/cr_picture/camera_flip_icon.svg similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/camera_flip_icon.svg rename to ui/webui/resources/cr_elements/chromeos/cr_picture/camera_flip_icon.svg
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/compiled_resources2.gyp b/ui/webui/resources/cr_elements/chromeos/cr_picture/compiled_resources2.gyp similarity index 95% rename from ui/webui/resources/cr_elements/chromeos/change_picture/compiled_resources2.gyp rename to ui/webui/resources/cr_elements/chromeos/cr_picture/compiled_resources2.gyp index bccc6b3..ca23e91 100644 --- a/ui/webui/resources/cr_elements/chromeos/change_picture/compiled_resources2.gyp +++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/compiled_resources2.gyp
@@ -21,7 +21,7 @@ 'cr_camera', 'cr_picture_types', ], - 'target_name': 'cr_picture_preview', + 'target_name': 'cr_picture_pane', 'includes': ['../../../../../../third_party/closure_compiler/compile_js2.gypi'], }, {
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_camera.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_camera.html rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_camera.js b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.js similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_camera.js rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.js
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_list.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_list.html rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_list.js b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.js similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_list.js rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.js
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html similarity index 94% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.html rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html index e2ec0145..e43f14c 100644 --- a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.html +++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html
@@ -5,7 +5,7 @@ <link rel="import" href="cr_camera.html"> <link rel="import" href="cr_picture_types.html"> -<dom-module id="cr-picture-preview"> +<dom-module id="cr-picture-pane"> <template> <style include="cr-shared-style"> img { @@ -45,5 +45,5 @@ </cr-camera> </template> </template> - <script src="cr_picture_preview.js"></script> + <script src="cr_picture_pane.js"></script> </dom-module>
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.js b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.js similarity index 94% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.js rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.js index baae7b92..b93c09d 100644 --- a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.js +++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.js
@@ -4,12 +4,12 @@ /** * @fileoverview - * 'cr-picture-preview' is a Polymer element used to show either a profile + * 'cr-picture-pane' is a Polymer element used to show either a profile * picture or a camera image preview. */ Polymer({ - is: 'cr-picture-preview', + is: 'cr-picture-pane', properties: { /** Whether the camera is present / available */
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_types.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_types.html similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_types.html rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_types.html
diff --git a/ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_types.js b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_types.js similarity index 100% rename from ui/webui/resources/cr_elements/chromeos/change_picture/cr_picture_types.js rename to ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_types.js
diff --git a/ui/webui/resources/cr_elements/compiled_resources2.gyp b/ui/webui/resources/cr_elements/compiled_resources2.gyp index 74cbbfe6..cd7896a 100644 --- a/ui/webui/resources/cr_elements/compiled_resources2.gyp +++ b/ui/webui/resources/cr_elements/compiled_resources2.gyp
@@ -7,7 +7,7 @@ 'target_name': 'cr_elements_resources', 'type': 'none', 'dependencies': [ - 'chromeos/change_picture/compiled_resources2.gyp:*', + 'chromeos/cr_picture/compiled_resources2.gyp:*', 'chromeos/network/compiled_resources2.gyp:*', 'cr_action_menu/compiled_resources2.gyp:*', 'cr_dialog/compiled_resources2.gyp:*',
diff --git a/ui/webui/resources/cr_elements_images.grdp b/ui/webui/resources/cr_elements_images.grdp index c962220a..f60b73e 100644 --- a/ui/webui/resources/cr_elements_images.grdp +++ b/ui/webui/resources/cr_elements_images.grdp
@@ -33,10 +33,10 @@ file="images/icon_arrow_dropdown.svg" type="BINDATA" /> <if expr="chromeos"> <include name="IDR_CR_ELEMENTS_CAMERA_ALT_ICON_SVG" - file="cr_elements/chromeos/change_picture/camera_alt_icon.svg" + file="cr_elements/chromeos/cr_picture/camera_alt_icon.svg" type="BINDATA" /> <include name="IDR_CR_ELEMENTS_CAMERA_FLIP_ICON_SVG" - file="cr_elements/chromeos/change_picture/camera_flip_icon.svg" + file="cr_elements/chromeos/cr_picture/camera_flip_icon.svg" type="BINDATA" /> <include name="IDR_CR_ELEMENTS_CELLULAR_0_SVG" file="cr_elements/chromeos/network/cellular_0.svg"
diff --git a/ui/webui/resources/cr_elements_resources.grdp b/ui/webui/resources/cr_elements_resources.grdp index d6d5d14..4cd422e 100644 --- a/ui/webui/resources/cr_elements_resources.grdp +++ b/ui/webui/resources/cr_elements_resources.grdp
@@ -42,29 +42,29 @@ file="../../webui/resources/cr_elements/cr_lazy_render/cr_lazy_render.js" type="chrome_html" /> <if expr="chromeos"> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR_CAMERA_HTML" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_camera.html" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR_CAMERA_HTML" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR__CAMERA_JS" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_camera.js" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR__CAMERA_JS" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_camera.js" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR_PICTURE_LIST_HTML" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_picture_list.html" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR_PICTURE_LIST_HTML" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR__PICTURE_LIST_JS" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_picture_list.js" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR__PICTURE_LIST_JS" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.js" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR_PICTURE_PREVIEW_HTML" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.html" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR_PICTURE_PANE_HTML" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR__PICTURE_PREVIEW_JS" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_picture_preview.js" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR_PICTURE_PANE_JS" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.js" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR_PICTURE_TYPES_HTML" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_picture_types.html" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR_PICTURE_TYPES_HTML" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_picture_types.html" type="chrome_html" /> - <structure name="IDR_CR_ELEMENTS_CHROMEOS_CHANGE_PICTURE_CR__PICTURE_TYPES_JS" - file="../../webui/resources/cr_elements/chromeos/change_picture/cr_picture_types.js" + <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_PICTURE_CR_PICTURE_TYPES_JS" + file="../../webui/resources/cr_elements/chromeos/cr_picture/cr_picture_types.js" type="chrome_html" /> <structure name="IDR_CR_ELEMENTS_CHROMEOS_CR_NETWORK_ICON_HTML" file="../../webui/resources/cr_elements/chromeos/network/cr_network_icon.html"