diff --git a/AUTHORS b/AUTHORS index a4f7b83..0c29cc8 100644 --- a/AUTHORS +++ b/AUTHORS
@@ -897,6 +897,7 @@ Yi Shen <yi.shen@samsung.com> Yi Sun <ratsunny@gmail.com> Yichen Jiang <jiangyichen123@gmail.com> +Yifei Yu <yuyifei@xiaomi.com> Yizhou Jiang <yizhou.jiang@intel.com> Yoav Weiss <yoav@yoav.ws> Yoav Zilberberg <yoav.zilberberg@gmail.com>
diff --git a/DEPS b/DEPS index af73972..c76fe55 100644 --- a/DEPS +++ b/DEPS
@@ -96,11 +96,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': 'd8a189fca3cdfa064de75a280d5af34cc5026bbe', + 'skia_revision': '05cfcff70ced3af834e0c9c5309f98bd6662f851', # 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': 'cfcbf96b54f42d12c987f1c547f991c212ee510b', + 'v8_revision': 'e0f6ae79bb64820192f303ceb01053407107e328', # 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. @@ -108,7 +108,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '7a8fe15682f39a0e26c860c2973ec02f53120a24', + 'angle_revision': '983460e6cd51b4b51bd1363b75324f99e7161c7b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build tools # and whatever else without interference from each other. @@ -156,7 +156,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '4f42243e85c8ff1829a76127c039f67623f50e5b', + 'catapult_revision': '53d9b3ced38904718a0b3eb9471a47215e1e168c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -498,7 +498,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8672346ad7cea4606a723db794bb09ce50d578d2', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'abd74feb3dc42cfbb69fa139a5616470aa6f9bad', 'condition': 'checkout_linux', }, @@ -561,7 +561,7 @@ Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '90210b5e10d3917567a3025e4853704bfefd8384', 'src/third_party/flac': - Var('chromium_git') + '/chromium/deps/flac.git' + '@' + '7d0f5b3a173ffe98db08057d1f52b7787569e0a6', + Var('chromium_git') + '/chromium/deps/flac.git' + '@' + 'af862024c8c8fa0ae07ced05e89013d881b00596', 'src/third_party/flatbuffers/src': Var('chromium_git') + '/external/github.com/google/flatbuffers.git' + '@' + '01c50d57a67a52ee3cddd81b54d4647e9123a290', @@ -968,7 +968,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '7c0541da63f571512c49758cbc0767117997a270', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'a1f566b28a69512037e36f5194329d9ada46be01', # commit position 21742 + Var('webrtc_git') + '/src.git' + '@' + 'e6256055e7db560da560829a3e249898f9685d1f', # commit position 21742 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d', @@ -1002,7 +1002,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@7c592e6301d6d66c213e90bfa584a4eb60994739', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6cee97214012610df40316388a4aebdec6ecc15a', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/java/src/org/chromium/android_webview/AwActionModeCallback.java b/android_webview/java/src/org/chromium/android_webview/AwActionModeCallback.java index 2c54cdd..7a27be74 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwActionModeCallback.java +++ b/android_webview/java/src/org/chromium/android_webview/AwActionModeCallback.java
@@ -17,6 +17,8 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.content.R; import org.chromium.content_public.browser.ActionModeCallbackHelper; +import org.chromium.content_public.browser.SelectionPopupController; +import org.chromium.content_public.browser.WebContents; /** * A class that handles selection action mode for Android WebView. @@ -27,11 +29,11 @@ private final ActionModeCallbackHelper mHelper; private int mAllowedMenuItems; - public AwActionModeCallback(Context context, AwContents awContents, - ActionModeCallbackHelper helper) { + public AwActionModeCallback(Context context, AwContents awContents, WebContents webContents) { mContext = context; mAwContents = awContents; - mHelper = helper; + mHelper = + SelectionPopupController.fromWebContents(webContents).getActionModeCallbackHelper(); mHelper.setAllowedMenuItems(0); // No item is allowed by default for WebView. }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 44fcbcc..9e1ef07 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -875,8 +875,7 @@ viewDelegate, internalDispatcher, windowAndroid); mContentViewCore.setHideKeyboardOnBlur(false); SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); - controller.setActionModeCallback( - new AwActionModeCallback(mContext, this, controller.getActionModeCallbackHelper())); + controller.setActionModeCallback(new AwActionModeCallback(mContext, this, webContents)); if (mAutofillProvider != null) { controller.setNonSelectionActionModeCallback( new AutofillActionModeCallback(mContext, mAutofillProvider));
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index e49b4cc9..cbc2c7aa 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -93,6 +93,8 @@ "ash_export.h", "ash_layout_constants.cc", "ash_layout_constants.h", + "ash_service.cc", + "ash_service.h", "ash_view_ids.h", "assistant/ash_assistant_controller.cc", "assistant/ash_assistant_controller.h", @@ -205,8 +207,6 @@ "events/event_rewriter_controller.h", "events/keyboard_driven_event_rewriter.cc", "events/keyboard_driven_event_rewriter.h", - "events/spoken_feedback_event_rewriter.cc", - "events/spoken_feedback_event_rewriter.h", "first_run/desktop_cleaner.cc", "first_run/desktop_cleaner.h", "first_run/first_run_helper.cc", @@ -1180,6 +1180,8 @@ "wm/workspace/workspace_window_resizer.h", "wm/workspace_controller.cc", "wm/workspace_controller.h", + "ws/window_service_delegate_impl.cc", + "ws/window_service_delegate_impl.h", ] configs += [ "//build/config:precompiled_headers" ] @@ -1192,13 +1194,16 @@ "//ash/resources/vector_icons", "//ash/strings", "//ash/wayland", + "//components/discardable_memory/public/interfaces", "//mash/public/mojom", "//mojo/public/cpp/system", + "//services/service_manager/embedder", "//services/ui/common:mus_common", "//services/ui/public/cpp", "//services/ui/public/cpp/input_devices", "//services/ui/public/interfaces", "//services/ui/public/interfaces/display", + "//services/ui/ws2:lib", "//skia", "//ui/aura", "//ui/events", @@ -1315,6 +1320,8 @@ component("ash_with_content") { sources = [ "content/ash_with_content_export.h", + "content/content_gpu_support.cc", + "content/content_gpu_support.h", "content/keyboard_overlay/keyboard_overlay_delegate.cc", "content/keyboard_overlay/keyboard_overlay_delegate.h", "content/keyboard_overlay/keyboard_overlay_view.cc", @@ -1334,6 +1341,7 @@ "//ash/public/cpp", "//base", "//base/third_party/dynamic_annotations", + "//components/discardable_memory/public/interfaces", "//content/public/browser", "//gpu/config", "//ipc", @@ -1427,14 +1435,21 @@ ":ash_with_content", ":test_support_without_content", "//ash/app_list/presenter:test_support", + "//ash/components/quick_launch:lib", + "//ash/components/quick_launch/public/mojom", "//ash/public/cpp", + "//ash/shell:resources", "//base:i18n", "//chrome:packed_resources", "//chromeos", + "//components/discardable_memory/public/interfaces", + "//components/services/font:lib", + "//components/services/font/public/interfaces", "//content", "//content/shell:content_shell_lib", "//device/bluetooth", "//net", + "//services/ui/ws2:lib", "//skia", "//ui/aura", "//ui/base", @@ -1561,7 +1576,6 @@ "drag_drop/drag_drop_tracker_unittest.cc", "drag_drop/drag_image_view_unittest.cc", "events/keyboard_driven_event_rewriter_unittest.cc", - "events/spoken_feedback_event_rewriter_unittest.cc", "extended_desktop_unittest.cc", "first_run/first_run_helper_unittest.cc", "focus_cycler_unittest.cc",
diff --git a/ash/DEPS b/ash/DEPS index e4a0365..42fd749 100644 --- a/ash/DEPS +++ b/ash/DEPS
@@ -25,9 +25,11 @@ "+mojo/public", "+services/catalog/public", "+services/preferences/public", + "+services/service_manager/embedder", "+services/service_manager/public", "+services/ui/common", "+services/ui/public", + "+services/ui/ws2", "+services/viz/public", "+skia/ext", "+third_party/cros_system_api",
diff --git a/ash/ash_service.cc b/ash/ash_service.cc new file mode 100644 index 0000000..eae4cc2a --- /dev/null +++ b/ash/ash_service.cc
@@ -0,0 +1,44 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/ash_service.h" + +#include "ash/mojo_interface_factory.h" +#include "base/threading/thread_task_runner_handle.h" +#include "services/service_manager/embedder/embedded_service_info.h" + +namespace ash { +namespace { + +std::unique_ptr<service_manager::Service> CreateAshService() { + return std::make_unique<AshService>(); +} + +} // namespace + +AshService::AshService() = default; + +AshService::~AshService() = default; + +// static +service_manager::EmbeddedServiceInfo AshService::CreateEmbeddedServiceInfo() { + service_manager::EmbeddedServiceInfo info; + info.factory = base::BindRepeating(&CreateAshService); + info.task_runner = base::ThreadTaskRunnerHandle::Get(); + return info; +} + +void AshService::OnStart() { + mojo_interface_factory::RegisterInterfaces( + ®istry_, base::ThreadTaskRunnerHandle::Get()); +} + +void AshService::OnBindInterface( + const service_manager::BindSourceInfo& remote_info, + const std::string& interface_name, + mojo::ScopedMessagePipeHandle handle) { + registry_.BindInterface(interface_name, std::move(handle)); +} + +} // namespace ash
diff --git a/ash/ash_service.h b/ash/ash_service.h new file mode 100644 index 0000000..8775f98 --- /dev/null +++ b/ash/ash_service.h
@@ -0,0 +1,43 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_ASH_SERVICE_H_ +#define ASH_ASH_SERVICE_H_ + +#include "ash/ash_export.h" +#include "base/macros.h" +#include "services/service_manager/public/cpp/binder_registry.h" +#include "services/service_manager/public/cpp/service.h" + +namespace service_manager { +struct EmbeddedServiceInfo; +} + +namespace ash { + +// Used to export Ash's mojo services. Specifically the interfaces defined in +// Ash's manifest.json. +class ASH_EXPORT AshService : public service_manager::Service { + public: + AshService(); + ~AshService() override; + + // Returns an appropriate EmbeddedServiceInfo that creates AshService. + static service_manager::EmbeddedServiceInfo CreateEmbeddedServiceInfo(); + + // service_manager::Service: + void OnStart() override; + void OnBindInterface(const service_manager::BindSourceInfo& remote_info, + const std::string& interface_name, + mojo::ScopedMessagePipeHandle handle) override; + + private: + service_manager::BinderRegistry registry_; + + DISALLOW_COPY_AND_ASSIGN(AshService); +}; + +} // namespace ash + +#endif // ASH_ASH_SERVICE_H_
diff --git a/ash/assistant/ui/assistant_bubble_view.cc b/ash/assistant/ui/assistant_bubble_view.cc index 1f94f94f..bab7564 100644 --- a/ash/assistant/ui/assistant_bubble_view.cc +++ b/ash/assistant/ui/assistant_bubble_view.cc
@@ -16,7 +16,6 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/render_text.h" #include "ui/views/background.h" -#include "ui/views/border.h" #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" @@ -232,8 +231,6 @@ views::View* text_container = new views::View(); text_container->SetBackground(std::make_unique<RoundRectBackground>( kTextBackgroundColor, kTextCornerRadiusDip)); - text_container->SetBorder( - views::CreateEmptyBorder(0, kPaddingDip, 0, kPaddingDip)); text_container->SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kHorizontal, gfx::Insets(kTextPaddingVerticalDip, kTextPaddingHorizontalDip))); @@ -271,8 +268,8 @@ void InitLayout() { views::BoxLayout* layout = SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical, gfx::Insets(), - kSpacingDip)); + views::BoxLayout::Orientation::kVertical, + gfx::Insets(0, kPaddingDip), kSpacingDip)); layout->set_cross_axis_alignment( views::BoxLayout::CrossAxisAlignment::CROSS_AXIS_ALIGNMENT_START);
diff --git a/ash/content/DEPS b/ash/content/DEPS index 9288539..3eea109 100644 --- a/ash/content/DEPS +++ b/ash/content/DEPS
@@ -1,4 +1,7 @@ specific_include_rules = { + "content_gpu_support.*": [ + "+content/public/browser", + ], "screen_orientation_delegate_chromeos.cc": [ "+content/public/browser/screen_orientation_provider.h", "+content/public/browser/web_contents.h",
diff --git a/ash/content/content_gpu_support.cc b/ash/content/content_gpu_support.cc new file mode 100644 index 0000000..4fe2bd4 --- /dev/null +++ b/ash/content/content_gpu_support.cc
@@ -0,0 +1,44 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/content/content_gpu_support.h" + +#include "base/containers/unique_ptr_adapters.h" +#include "content/public/browser/gpu_client.h" +#include "content/public/browser/gpu_service_registry.h" + +namespace ash { + +ContentGpuSupport::ContentGpuSupport() = default; + +ContentGpuSupport::~ContentGpuSupport() = default; + +scoped_refptr<base::SingleThreadTaskRunner> +ContentGpuSupport::GetGpuTaskRunner() { + return content::BrowserThread::GetTaskRunnerForThread( + content::BrowserThread::IO); +} + +void ContentGpuSupport::BindDiscardableSharedMemoryManagerOnGpuTaskRunner( + discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) { + content::BindInterfaceInGpuProcess(std::move(request)); +} + +void ContentGpuSupport::BindGpuRequestOnGpuTaskRunner( + ui::mojom::GpuRequest request) { + auto gpu_client = content::GpuClient::Create( + std::move(request), + base::BindOnce(&ContentGpuSupport::OnGpuClientConnectionError, + base::Unretained(this))); + gpu_clients_.push_back(std::move(gpu_client)); +} + +void ContentGpuSupport::OnGpuClientConnectionError(content::GpuClient* client) { + base::EraseIf( + gpu_clients_, + base::UniquePtrMatcher<content::GpuClient, + content::BrowserThread::DeleteOnIOThread>(client)); +} + +} // namespace ash
diff --git a/ash/content/content_gpu_support.h b/ash/content/content_gpu_support.h new file mode 100644 index 0000000..6f68aee --- /dev/null +++ b/ash/content/content_gpu_support.h
@@ -0,0 +1,48 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_CONTENT_CONTENT_GPU_SUPPORT_H_ +#define ASH_CONTENT_CONTENT_GPU_SUPPORT_H_ + +#include <memory> +#include <vector> + +#include "ash/content/ash_with_content_export.h" +#include "base/macros.h" +#include "content/public/browser/browser_thread.h" +#include "services/ui/ws2/gpu_support.h" + +namespace content { +class GpuClient; +} + +namespace ash { + +// An implementation of GpuSupport that forwards to the Gpu implementation in +// content. +class ASH_WITH_CONTENT_EXPORT ContentGpuSupport : public ui::ws2::GpuSupport { + public: + ContentGpuSupport(); + ~ContentGpuSupport() override; + + // ui::ws2::GpuSupport: + scoped_refptr<base::SingleThreadTaskRunner> GetGpuTaskRunner() override; + void BindDiscardableSharedMemoryManagerOnGpuTaskRunner( + discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) + override; + void BindGpuRequestOnGpuTaskRunner(ui::mojom::GpuRequest request) override; + + private: + void OnGpuClientConnectionError(content::GpuClient* client); + + std::vector<std::unique_ptr<content::GpuClient, + content::BrowserThread::DeleteOnIOThread>> + gpu_clients_; + + DISALLOW_COPY_AND_ASSIGN(ContentGpuSupport); +}; + +} // namespace ash + +#endif // ASH_CONTENT_CONTENT_GPU_SUPPORT_H_
diff --git a/ash/events/OWNERS b/ash/events/OWNERS deleted file mode 100644 index fbd7277..0000000 --- a/ash/events/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -per-file spoken_feedback_event_rewriter*=file://ui/accessibility/OWNERS
diff --git a/ash/events/event_rewriter_controller.cc b/ash/events/event_rewriter_controller.cc index 91871fd6..e8546e96 100644 --- a/ash/events/event_rewriter_controller.cc +++ b/ash/events/event_rewriter_controller.cc
@@ -9,12 +9,10 @@ #include "ash/display/mirror_window_controller.h" #include "ash/display/window_tree_host_manager.h" #include "ash/events/keyboard_driven_event_rewriter.h" -#include "ash/events/spoken_feedback_event_rewriter.h" #include "ash/shell.h" #include "ui/aura/env.h" #include "ui/aura/window_tree_host.h" #include "ui/events/event_rewriter.h" -#include "ui/events/event_sink.h" #include "ui/events/event_source.h" namespace ash { @@ -27,11 +25,6 @@ std::make_unique<KeyboardDrivenEventRewriter>(); keyboard_driven_event_rewriter_ = keyboard_driven_event_rewriter.get(); AddEventRewriter(std::move(keyboard_driven_event_rewriter)); - - std::unique_ptr<SpokenFeedbackEventRewriter> spoken_feedback_event_rewriter = - std::make_unique<SpokenFeedbackEventRewriter>(); - spoken_feedback_event_rewriter_ = spoken_feedback_event_rewriter.get(); - AddEventRewriter(std::move(spoken_feedback_event_rewriter)); } EventRewriterController::~EventRewriterController() { @@ -74,17 +67,6 @@ keyboard_driven_event_rewriter_->set_arrow_to_tab_rewriting_enabled(enabled); } -void EventRewriterController::SetSpokenFeedbackEventRewriterDelegate( - mojom::SpokenFeedbackEventRewriterDelegatePtr delegate) { - spoken_feedback_event_rewriter_->SetDelegate(std::move(delegate)); -} - -void EventRewriterController::OnUnhandledSpokenFeedbackEvent( - std::unique_ptr<ui::Event> event) { - spoken_feedback_event_rewriter_->OnUnhandledSpokenFeedbackEvent( - std::move(event)); -} - void EventRewriterController::OnHostInitialized(aura::WindowTreeHost* host) { for (const auto& rewriter : rewriters_) host->GetEventSource()->AddEventRewriter(rewriter.get());
diff --git a/ash/events/event_rewriter_controller.h b/ash/events/event_rewriter_controller.h index 04ef56f8..05c6637 100644 --- a/ash/events/event_rewriter_controller.h +++ b/ash/events/event_rewriter_controller.h
@@ -22,7 +22,6 @@ namespace ash { class KeyboardDrivenEventRewriter; -class SpokenFeedbackEventRewriter; // Owns ui::EventRewriters and ensures that they are added to each root window // EventSource, current and future, in the order that they are added to this. @@ -43,10 +42,6 @@ // mojom::EventRewriterController: void SetKeyboardDrivenEventRewriterEnabled(bool enabled) override; void SetArrowToTabRewritingEnabled(bool enabled) override; - void SetSpokenFeedbackEventRewriterDelegate( - mojom::SpokenFeedbackEventRewriterDelegatePtr delegate) override; - void OnUnhandledSpokenFeedbackEvent( - std::unique_ptr<ui::Event> event) override; // aura::EnvObserver: void OnWindowInitialized(aura::Window* window) override {} @@ -56,12 +51,9 @@ // The |EventRewriter|s managed by this controller. std::vector<std::unique_ptr<ui::EventRewriter>> rewriters_; - // A weak pointer to the KeyboardDrivenEventRewriter owned in |rewriters_|. + // A weak pointer the KeyboardDrivenEventRewriter owned in |rewriters_|. KeyboardDrivenEventRewriter* keyboard_driven_event_rewriter_; - // A weak pointer to the SpokenFeedbackEventRewriter owned in |rewriters_|. - SpokenFeedbackEventRewriter* spoken_feedback_event_rewriter_; - // Bindings for the EventRewriterController mojo interface. mojo::BindingSet<mojom::EventRewriterController> bindings_;
diff --git a/ash/events/spoken_feedback_event_rewriter.cc b/ash/events/spoken_feedback_event_rewriter.cc deleted file mode 100644 index 7ee2142..0000000 --- a/ash/events/spoken_feedback_event_rewriter.cc +++ /dev/null
@@ -1,60 +0,0 @@ -// Copyright 2015 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/events/spoken_feedback_event_rewriter.h" - -#include <string> -#include <utility> - -#include "ash/accessibility/accessibility_controller.h" -#include "ash/shell.h" -#include "ui/aura/window_tree_host.h" -#include "ui/events/event.h" -#include "ui/events/event_sink.h" - -namespace ash { - -SpokenFeedbackEventRewriter::SpokenFeedbackEventRewriter() = default; - -SpokenFeedbackEventRewriter::~SpokenFeedbackEventRewriter() = default; - -void SpokenFeedbackEventRewriter::SetDelegate( - mojom::SpokenFeedbackEventRewriterDelegatePtr delegate) { - delegate_ = std::move(delegate); -} - -void SpokenFeedbackEventRewriter::OnUnhandledSpokenFeedbackEvent( - std::unique_ptr<ui::Event> event) const { - DCHECK(event->IsKeyEvent()) << "Unexpected unhandled event type"; - // For now, these events are sent directly to the primary display's EventSink. - // TODO: Pass the event to the original EventSource's other event rewriters. - ui::EventSink* sink = Shell::GetPrimaryRootWindow()->GetHost()->event_sink(); - if (sink->OnEventFromSource(event.get()).dispatcher_destroyed) { - VLOG(0) << "Undispatched key " << event->AsKeyEvent()->key_code() - << " due to destroyed dispatcher."; - } -} - -ui::EventRewriteStatus SpokenFeedbackEventRewriter::RewriteEvent( - const ui::Event& event, - std::unique_ptr<ui::Event>* new_event) { - if (!delegate_.is_bound() || !event.IsKeyEvent()) - return ui::EVENT_REWRITE_CONTINUE; - - if (!Shell::Get()->accessibility_controller()->IsSpokenFeedbackEnabled()) - return ui::EVENT_REWRITE_CONTINUE; - - // TODO: Avoid passing events that will be reposted for system-wide dispatch. - delegate_->DispatchKeyEventToChromeVox(ui::Event::Clone(event)); - return ui::EVENT_REWRITE_DISCARD; -} - -ui::EventRewriteStatus SpokenFeedbackEventRewriter::NextDispatchEvent( - const ui::Event& last_event, - std::unique_ptr<ui::Event>* new_event) { - NOTREACHED(); - return ui::EVENT_REWRITE_CONTINUE; -} - -} // namespace ash
diff --git a/ash/events/spoken_feedback_event_rewriter.h b/ash/events/spoken_feedback_event_rewriter.h deleted file mode 100644 index cd3568c..0000000 --- a/ash/events/spoken_feedback_event_rewriter.h +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2015 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_EVENTS_SPOKEN_FEEDBACK_EVENT_REWRITER_H_ -#define ASH_EVENTS_SPOKEN_FEEDBACK_EVENT_REWRITER_H_ - -#include "ash/ash_export.h" -#include "ash/public/interfaces/event_rewriter_controller.mojom.h" -#include "base/macros.h" -#include "ui/events/event_rewriter.h" - -namespace ash { - -// SpokenFeedbackEventRewriter sends key events to ChromeVox (via the delegate) -// when spoken feedback is enabled. Continues dispatch of unhandled key events. -// TODO(http://crbug.com/839541): Avoid reposting unhandled events. -class ASH_EXPORT SpokenFeedbackEventRewriter : public ui::EventRewriter { - public: - SpokenFeedbackEventRewriter(); - ~SpokenFeedbackEventRewriter() override; - - // Set the delegate used to send key events to the ChromeVox extension. - void SetDelegate(mojom::SpokenFeedbackEventRewriterDelegatePtr delegate); - mojom::SpokenFeedbackEventRewriterDelegatePtr* get_delegate_for_testing() { - return &delegate_; - } - - // Continue dispatch of events that were unhandled by the ChromeVox extension. - // NOTE: These events may be delivered out-of-order from non-ChromeVox events. - void OnUnhandledSpokenFeedbackEvent(std::unique_ptr<ui::Event> event) const; - - private: - // ui::EventRewriter: - ui::EventRewriteStatus RewriteEvent( - const ui::Event& event, - std::unique_ptr<ui::Event>* new_event) override; - ui::EventRewriteStatus NextDispatchEvent( - const ui::Event& last_event, - std::unique_ptr<ui::Event>* new_event) override; - - // The delegate used to send key events to the ChromeVox extension. - mojom::SpokenFeedbackEventRewriterDelegatePtr delegate_; - - DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriter); -}; - -} // namespace ash - -#endif // ASH_EVENTS_SPOKEN_FEEDBACK_EVENT_REWRITER_H_
diff --git a/ash/events/spoken_feedback_event_rewriter_unittest.cc b/ash/events/spoken_feedback_event_rewriter_unittest.cc deleted file mode 100644 index 8eb2109..0000000 --- a/ash/events/spoken_feedback_event_rewriter_unittest.cc +++ /dev/null
@@ -1,202 +0,0 @@ -// Copyright 2015 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/events/spoken_feedback_event_rewriter.h" - -#include <memory> -#include <vector> - -#include "ash/accessibility/accessibility_controller.h" -#include "ash/shell.h" -#include "ash/test/ash_test_base.h" -#include "base/macros.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "ui/aura/window.h" -#include "ui/aura/window_tree_host.h" -#include "ui/events/event.h" -#include "ui/events/event_constants.h" -#include "ui/events/event_rewriter.h" -#include "ui/events/keycodes/keyboard_codes.h" -#include "ui/events/test/event_generator.h" - -namespace ash { -namespace { - -// An event rewriter that simply records all events that it receives. -class EventRecorder : public ui::EventRewriter { - public: - EventRecorder() = default; - ~EventRecorder() override = default; - - // ui::EventRewriter: - ui::EventRewriteStatus RewriteEvent( - const ui::Event& event, - std::unique_ptr<ui::Event>* new_event) override { - recorded_event_count_++; - return ui::EVENT_REWRITE_CONTINUE; - } - ui::EventRewriteStatus NextDispatchEvent( - const ui::Event& last_event, - std::unique_ptr<ui::Event>* new_event) override { - NOTREACHED(); - return ui::EVENT_REWRITE_CONTINUE; - } - - // Count of events sent to the rewriter. - size_t recorded_event_count_ = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(EventRecorder); -}; - -// A test implementation of the spoken feedback delegate interface. -class TestDelegate : public mojom::SpokenFeedbackEventRewriterDelegate { - public: - TestDelegate() : binding_(this) {} - ~TestDelegate() override = default; - - mojom::SpokenFeedbackEventRewriterDelegatePtr BindInterface() { - mojom::SpokenFeedbackEventRewriterDelegatePtr ptr; - binding_.Bind(MakeRequest(&ptr)); - return ptr; - } - - // Count of events sent to the delegate. - size_t recorded_event_count_ = 0; - - private: - // SpokenFeedbackEventRewriterDelegate: - void DispatchKeyEventToChromeVox(std::unique_ptr<ui::Event> event) override { - recorded_event_count_++; - } - - // The binding that backs the interface pointer held by the event rewriter. - mojo::Binding<ash::mojom::SpokenFeedbackEventRewriterDelegate> binding_; - - DISALLOW_COPY_AND_ASSIGN(TestDelegate); -}; - -class SpokenFeedbackEventRewriterTest : public ash::AshTestBase { - public: - SpokenFeedbackEventRewriterTest() { - spoken_feedback_event_rewriter_.SetDelegate(delegate_.BindInterface()); - } - - void SetUp() override { - ash::AshTestBase::SetUp(); - generator_ = &AshTestBase::GetEventGenerator(); - CurrentContext()->GetHost()->GetEventSource()->AddEventRewriter( - &spoken_feedback_event_rewriter_); - CurrentContext()->GetHost()->GetEventSource()->AddEventRewriter( - &event_recorder_); - } - - void TearDown() override { - CurrentContext()->GetHost()->GetEventSource()->RemoveEventRewriter( - &event_recorder_); - CurrentContext()->GetHost()->GetEventSource()->RemoveEventRewriter( - &spoken_feedback_event_rewriter_); - generator_ = nullptr; - ash::AshTestBase::TearDown(); - } - - // Flush any messages to the test delegate and return events it has recorded. - size_t GetDelegateRecordedEventCount() { - spoken_feedback_event_rewriter_.get_delegate_for_testing() - ->FlushForTesting(); - return delegate_.recorded_event_count_; - } - - protected: - // A test spoken feedback delegate; simulates ChromeVox. - TestDelegate delegate_; - // Generates ui::Events from simulated user input. - ui::test::EventGenerator* generator_ = nullptr; - // Records events delivered to the next event rewriter after spoken feedback. - EventRecorder event_recorder_; - - private: - SpokenFeedbackEventRewriter spoken_feedback_event_rewriter_; - - DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriterTest); -}; - -// The delegate should not intercept events when spoken feedback is disabled. -TEST_F(SpokenFeedbackEventRewriterTest, EventsNotConsumedWhenDisabled) { - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); - - generator_->PressKey(ui::VKEY_A, ui::EF_NONE); - EXPECT_EQ(1U, event_recorder_.recorded_event_count_); - EXPECT_EQ(0U, GetDelegateRecordedEventCount()); - generator_->ReleaseKey(ui::VKEY_A, ui::EF_NONE); - EXPECT_EQ(2U, event_recorder_.recorded_event_count_); - EXPECT_EQ(0U, GetDelegateRecordedEventCount()); - - generator_->ClickLeftButton(); - EXPECT_EQ(4U, event_recorder_.recorded_event_count_); - EXPECT_EQ(0U, GetDelegateRecordedEventCount()); - - generator_->GestureTapAt(gfx::Point()); - EXPECT_EQ(6U, event_recorder_.recorded_event_count_); - EXPECT_EQ(0U, GetDelegateRecordedEventCount()); -} - -// The delegate should intercept key events when spoken feedback is enabled. -TEST_F(SpokenFeedbackEventRewriterTest, KeyEventsConsumedWhenEnabled) { - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - controller->SetSpokenFeedbackEnabled(true, A11Y_NOTIFICATION_NONE); - EXPECT_TRUE(controller->IsSpokenFeedbackEnabled()); - - generator_->PressKey(ui::VKEY_A, ui::EF_NONE); - EXPECT_EQ(0U, event_recorder_.recorded_event_count_); - EXPECT_EQ(1U, GetDelegateRecordedEventCount()); - generator_->ReleaseKey(ui::VKEY_A, ui::EF_NONE); - EXPECT_EQ(0U, event_recorder_.recorded_event_count_); - EXPECT_EQ(2U, GetDelegateRecordedEventCount()); - - generator_->ClickLeftButton(); - EXPECT_EQ(2U, event_recorder_.recorded_event_count_); - EXPECT_EQ(2U, GetDelegateRecordedEventCount()); - - generator_->GestureTapAt(gfx::Point()); - EXPECT_EQ(4U, event_recorder_.recorded_event_count_); - EXPECT_EQ(2U, GetDelegateRecordedEventCount()); -} - -TEST_F(SpokenFeedbackEventRewriterTest, KeysNotEatenWithChromeVoxDisabled) { - AccessibilityController* controller = - Shell::Get()->accessibility_controller(); - EXPECT_FALSE(controller->IsSpokenFeedbackEnabled()); - - // Send Search+Shift+Right. - generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); - EXPECT_EQ(1U, event_recorder_.recorded_event_count_); - generator_->PressKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN); - EXPECT_EQ(2U, event_recorder_.recorded_event_count_); - - // Mock successful commands lookup and dispatch; shouldn't matter either way. - generator_->PressKey(ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN); - EXPECT_EQ(3U, event_recorder_.recorded_event_count_); - - // Released keys shouldn't get eaten. - generator_->ReleaseKey(ui::VKEY_RIGHT, - ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN); - generator_->ReleaseKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN); - generator_->ReleaseKey(ui::VKEY_LWIN, 0); - EXPECT_EQ(6U, event_recorder_.recorded_event_count_); - - // Try releasing more keys. - generator_->ReleaseKey(ui::VKEY_RIGHT, 0); - generator_->ReleaseKey(ui::VKEY_SHIFT, 0); - generator_->ReleaseKey(ui::VKEY_LWIN, 0); - EXPECT_EQ(9U, event_recorder_.recorded_event_count_); - - EXPECT_EQ(0U, GetDelegateRecordedEventCount()); -} - -} // namespace -} // namespace ash
diff --git a/ash/public/interfaces/event_rewriter_controller.mojom b/ash/public/interfaces/event_rewriter_controller.mojom index 6eded7dc..4917b6ee 100644 --- a/ash/public/interfaces/event_rewriter_controller.mojom +++ b/ash/public/interfaces/event_rewriter_controller.mojom
@@ -4,14 +4,6 @@ module ash.mojom; -import "ui/events/mojo/event.mojom"; - -// Allows a client to implement spoken feedback features; used for ChromeVox. -interface SpokenFeedbackEventRewriterDelegate { - // Used to send key events to the ChromeVox extension. - DispatchKeyEventToChromeVox(ui.mojom.Event event); -}; - // Allows clients to toggle some event rewriting behavior. interface EventRewriterController { // Enables the KeyboardDrivenEventRewriter, which is disabled by default. @@ -21,12 +13,4 @@ // If true, Shift + Arrow keys are rewritten to Tab/Shift-Tab keys. // This only applies when the KeyboardDrivenEventRewriter is active. SetArrowToTabRewritingEnabled(bool enabled); - - // Set the delegate used by the spoken feedback event rewriter. - SetSpokenFeedbackEventRewriterDelegate( - SpokenFeedbackEventRewriterDelegate delegate); - - // Continue dispatch of key events that were unhandled by ChromeVox. - // TODO: Remove this; ChromeVox should not be able to repost unhandled events. - OnUnhandledSpokenFeedbackEvent(ui.mojom.Event event); };
diff --git a/ash/resources/BUILD.gn b/ash/resources/BUILD.gn index 445078ee..625e6dc 100644 --- a/ash/resources/BUILD.gn +++ b/ash/resources/BUILD.gn
@@ -85,9 +85,11 @@ ash_test_resources("with_content_100_percent") { percent = "100" sources = [ + "$root_gen_dir/ash/shell/ash_shell_resources.pak", "$root_gen_dir/content/content_resources.pak", ] deps = [ + "//ash/shell:resources", "//content:resources", ] }
diff --git a/ash/shell.cc b/ash/shell.cc index b9fe93e3..7eb37e30 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -150,6 +150,7 @@ #include "ash/wm/window_util.h" #include "ash/wm/wm_shadow_controller_delegate.h" #include "ash/wm/workspace_controller.h" +#include "ash/ws/window_service_delegate_impl.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/command_line.h" @@ -699,6 +700,7 @@ vpn_list_(std::make_unique<VpnList>()), window_cycle_controller_(std::make_unique<WindowCycleController>()), window_selector_controller_(std::make_unique<WindowSelectorController>()), + window_service_delegate_(std::make_unique<WindowServiceDelegateImpl>()), tray_bluetooth_helper_(std::make_unique<TrayBluetoothHelper>()), display_configurator_(new display::DisplayConfigurator()), native_cursor_manager_(nullptr),
diff --git a/ash/shell.h b/ash/shell.h index 20f8210..98be620 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -185,6 +185,7 @@ class WindowCycleController; class WindowPositioner; class WindowSelectorController; +class WindowServiceDelegateImpl; class WindowTreeHostManager; enum class Config; @@ -536,6 +537,9 @@ WindowSelectorController* window_selector_controller() { return window_selector_controller_.get(); } + WindowServiceDelegateImpl* window_service_delegate() { + return window_service_delegate_.get(); + } WindowTreeHostManager* window_tree_host_manager() { return window_tree_host_manager_.get(); } @@ -755,6 +759,7 @@ std::unique_ptr<WallpaperController> wallpaper_controller_; std::unique_ptr<WindowCycleController> window_cycle_controller_; std::unique_ptr<WindowSelectorController> window_selector_controller_; + std::unique_ptr<WindowServiceDelegateImpl> window_service_delegate_; std::unique_ptr<::wm::ShadowController> shadow_controller_; std::unique_ptr<::wm::VisibilityController> visibility_controller_; std::unique_ptr<::wm::WindowModalityController> window_modality_controller_;
diff --git a/ash/shell/BUILD.gn b/ash/shell/BUILD.gn new file mode 100644 index 0000000..2aa5b04 --- /dev/null +++ b/ash/shell/BUILD.gn
@@ -0,0 +1,33 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//services/service_manager/public/service_manifest.gni") +import("//tools/grit/grit_rule.gni") + +assert(is_chromeos) + +grit("resources") { + source = "ash_shell_resources.grd" + outputs = [ + "grit/ash_shell_resources.h", + "ash_shell_resources.pak", + ] + grit_flags = [ + "-E", + "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), + ] + + deps = [ + ":ash_content_packaged_services_manifest_overlay", + ] +} + +service_manifest("ash_content_packaged_services_manifest_overlay") { + source = "//ash/shell/ash_content_packaged_services_manifest_overlay.json" + packaged_services = [ + "//ash/components/quick_launch:manifest", + "//components/services/font:manifest", + "//services/ui:manifest", + ] +}
diff --git a/ash/shell/OWNERS b/ash/shell/OWNERS index c8dc16e..f356f62 100644 --- a/ash/shell/OWNERS +++ b/ash/shell/OWNERS
@@ -1 +1,4 @@ per-file *app_list*=xiyuan@chromium.org + +per-file ash_content_packaged_services_manifest_overlay.json=set noparent +per-file ash_content_packaged_services_manifest_overlay.json=file://ipc/SECURITY_OWNERS
diff --git a/ash/shell/ash_content_packaged_services_manifest_overlay.json b/ash/shell/ash_content_packaged_services_manifest_overlay.json new file mode 100644 index 0000000..eaffdf51 --- /dev/null +++ b/ash/shell/ash_content_packaged_services_manifest_overlay.json
@@ -0,0 +1,5 @@ +{ + "name": "content_packaged_services", + "display_name": "Ash Packaged Services", + "interface_provider_specs": {} +}
diff --git a/ash/shell/ash_shell_resources.grd b/ash/shell/ash_shell_resources.grd new file mode 100644 index 0000000..f7da8612 --- /dev/null +++ b/ash/shell/ash_shell_resources.grd
@@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> + <outputs> + <output filename="grit/ash_shell_resources.h" type="rc_header"> + <emit emit_type='prepend'></emit> + </output> + <output filename="ash_shell_resources.pak" type="data_package" /> + </outputs> + <release seq="1"> + <includes> + <include name="IDR_ASH_SHELL_QUICK_LAUNCH_MANIFEST" file="../../ash/components/quick_launch/manifest.json" type="BINDATA" use_base_dir="false" /> + <include name="IDR_ASH_SHELL_FONT_SERVICE_MANIFEST" file="../../components/services/font/manifest.json" type="BINDATA" use_base_dir="false" /> + <include name="IDR_ASH_SHELL_CONTENT_PACKAGED_SERVICES_MANIFEST_OVERLAY" file="${root_gen_dir}\ash\shell\ash_content_packaged_services_manifest_overlay.json" type="BINDATA" use_base_dir="false"/> + </includes> + </release> +</grit>
diff --git a/ash/shell/content/client/DEPS b/ash/shell/content/client/DEPS index 08c4461..b1e783f 100644 --- a/ash/shell/content/client/DEPS +++ b/ash/shell/content/client/DEPS
@@ -1,4 +1,7 @@ include_rules = [ + "+ash/components/quick_launch", + "+components/discardable_memory/public/interfaces", + "+components/services/font", "+content/public", "+content/shell", "+storage/browser/quota",
diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc index 5c3f46b..44f6dcb 100644 --- a/ash/shell/content/client/shell_browser_main_parts.cc +++ b/ash/shell/content/client/shell_browser_main_parts.cc
@@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "ash/components/quick_launch/public/mojom/constants.mojom.h" #include "ash/content/shell_content_state.h" #include "ash/login_status.h" #include "ash/shell.h" @@ -27,13 +28,16 @@ #include "base/threading/thread_restrictions.h" #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/power_policy_controller.h" #include "components/exo/file_helper.h" #include "content/public/browser/context_factory.h" #include "content/public/common/content_switches.h" +#include "content/public/common/service_manager_connection.h" #include "content/shell/browser/shell_browser_context.h" #include "content/shell/browser/shell_net_log.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "net/base/net_module.h" +#include "services/service_manager/public/cpp/connector.h" #include "ui/aura/env.h" #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" @@ -76,6 +80,9 @@ bluez::BluezDBusManager::Initialize(nullptr, true /* use stub */); + chromeos::PowerPolicyController::Initialize( + chromeos::DBusThreadManager::Get()->GetPowerManagerClient()); + ShellContentState::SetInstance( new ShellContentStateImpl(browser_context_.get())); ui::MaterialDesignController::Initialize(); @@ -102,6 +109,9 @@ ash::Shell::GetPrimaryRootWindow()->GetHost()->Show(); + content::ServiceManagerConnection::GetForProcess() + ->GetConnector() + ->StartService(quick_launch::mojom::kServiceName); ash::Shell::Get()->InitWaylandServer(nullptr); } @@ -112,6 +122,8 @@ chromeos::CrasAudioHandler::Shutdown(); + chromeos::PowerPolicyController::Shutdown(); + views_delegate_.reset(); // The keyboard may have created a WebContents. The WebContents is destroyed
diff --git a/ash/shell/content/client/shell_content_browser_client.cc b/ash/shell/content/client/shell_content_browser_client.cc index aaa35d4..54efc63 100644 --- a/ash/shell/content/client/shell_content_browser_client.cc +++ b/ash/shell/content/client/shell_content_browser_client.cc
@@ -6,15 +6,44 @@ #include <utility> +#include "ash/ash_service.h" +#include "ash/components/quick_launch/public/mojom/constants.mojom.h" +#include "ash/content/content_gpu_support.h" +#include "ash/public/interfaces/constants.mojom.h" +#include "ash/shell.h" #include "ash/shell/content/client/shell_browser_main_parts.h" +#include "ash/shell/grit/ash_shell_resources.h" +#include "ash/ws/window_service_delegate_impl.h" +#include "base/base_switches.h" +#include "base/bind.h" #include "base/command_line.h" +#include "base/json/json_reader.h" +#include "base/stl_util.h" +#include "base/strings/utf_string_conversions.h" +#include "components/services/font/public/interfaces/constants.mojom.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/service_names.mojom.h" +#include "content/public/utility/content_utility_client.h" +#include "services/ui/public/interfaces/constants.mojom.h" +#include "services/ui/ws2/window_service.h" +#include "services/ui/ws2/window_service_delegate.h" #include "storage/browser/quota/quota_settings.h" #include "third_party/skia/include/core/SkBitmap.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/base/ui_base_features.h" namespace ash { namespace shell { +namespace { + +std::unique_ptr<service_manager::Service> CreateWindowService() { + return std::make_unique<ui::ws2::WindowService>( + Shell::Get()->window_service_delegate(), + std::make_unique<ContentGpuSupport>()); +} + +} // namespace ShellContentBrowserClient::ShellContentBrowserClient() : shell_browser_main_parts_(nullptr) {} @@ -35,5 +64,54 @@ partition->GetPath(), context->IsOffTheRecord(), std::move(callback)); } -} // namespace examples -} // namespace views +std::unique_ptr<base::Value> +ShellContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) { + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + if (name != content::mojom::kPackagedServicesServiceName) + return nullptr; + + base::StringPiece manifest_contents = rb.GetRawDataResourceForScale( + IDR_ASH_SHELL_CONTENT_PACKAGED_SERVICES_MANIFEST_OVERLAY, + ui::ScaleFactor::SCALE_FACTOR_NONE); + return base::JSONReader::Read(manifest_contents); +} + +std::vector<content::ContentBrowserClient::ServiceManifestInfo> +ShellContentBrowserClient::GetExtraServiceManifests() { + return { + {quick_launch::mojom::kServiceName, IDR_ASH_SHELL_QUICK_LAUNCH_MANIFEST}, + {font_service::mojom::kServiceName, IDR_ASH_SHELL_FONT_SERVICE_MANIFEST}}; +} + +void ShellContentBrowserClient::RegisterOutOfProcessServices( + OutOfProcessServiceMap* services) { + (*services)[quick_launch::mojom::kServiceName] = OutOfProcessServiceInfo( + base::ASCIIToUTF16(quick_launch::mojom::kServiceName)); + (*services)[font_service::mojom::kServiceName] = OutOfProcessServiceInfo( + base::ASCIIToUTF16(font_service::mojom::kServiceName)); +} + +void ShellContentBrowserClient::RegisterInProcessServices( + StaticServiceMap* services) { + services->insert(std::make_pair(ash::mojom::kServiceName, + AshService::CreateEmbeddedServiceInfo())); + + service_manager::EmbeddedServiceInfo ws_service_info; + ws_service_info.factory = base::BindRepeating(&CreateWindowService); + ws_service_info.task_runner = base::ThreadTaskRunnerHandle::Get(); + services->insert(std::make_pair(ui::mojom::kServiceName, ws_service_info)); +} + +void ShellContentBrowserClient::AdjustUtilityServiceProcessCommandLine( + const service_manager::Identity& identity, + base::CommandLine* command_line) { + if (identity.name() == quick_launch::mojom::kServiceName) { + // TODO(sky): this is necessary because WindowTreeClient only connects to + // the gpu related interfaces if Mash is set. + command_line->AppendSwitchASCII(switches::kEnableFeatures, + features::kMash.name); + } +} + +} // namespace shell +} // namespace ash
diff --git a/ash/shell/content/client/shell_content_browser_client.h b/ash/shell/content/client/shell_content_browser_client.h index 73eb45b..c3515976 100644 --- a/ash/shell/content/client/shell_content_browser_client.h +++ b/ash/shell/content/client/shell_content_browser_client.h
@@ -32,6 +32,14 @@ content::BrowserContext* context, content::StoragePartition* partition, storage::OptionalQuotaSettingsCallback callback) override; + std::unique_ptr<base::Value> GetServiceManifestOverlay( + base::StringPiece name) override; + std::vector<ServiceManifestInfo> GetExtraServiceManifests() override; + void RegisterOutOfProcessServices(OutOfProcessServiceMap* services) override; + void RegisterInProcessServices(StaticServiceMap* services) override; + void AdjustUtilityServiceProcessCommandLine( + const service_manager::Identity& identity, + base::CommandLine* command_line) override; private: ShellBrowserMainParts* shell_browser_main_parts_;
diff --git a/ash/shell/content/client/shell_main_delegate.cc b/ash/shell/content/client/shell_main_delegate.cc index c1ca2823..6fece30 100644 --- a/ash/shell/content/client/shell_main_delegate.cc +++ b/ash/shell/content/client/shell_main_delegate.cc
@@ -4,16 +4,56 @@ #include "ash/shell/content/client/shell_main_delegate.h" +#include "ash/components/quick_launch/public/mojom/constants.mojom.h" +#include "ash/components/quick_launch/quick_launch_application.h" #include "ash/shell/content/client/shell_content_browser_client.h" #include "base/command_line.h" #include "base/files/file_path.h" #include "base/path_service.h" +#include "components/services/font/font_service_app.h" +#include "components/services/font/public/interfaces/constants.mojom.h" #include "content/public/common/content_switches.h" +#include "content/public/utility/content_utility_client.h" +#include "services/service_manager/public/cpp/service.h" #include "ui/base/ime/input_method_initializer.h" #include "ui/base/resource/resource_bundle.h" namespace ash { namespace shell { +namespace { + +std::unique_ptr<service_manager::Service> CreateQuickLaunch() { + return std::make_unique<quick_launch::QuickLaunchApplication>(); +} + +std::unique_ptr<service_manager::Service> CreateFontService() { + return std::make_unique<font_service::FontServiceApp>(); +} + +class ShellContentUtilityClient : public content::ContentUtilityClient { + public: + ShellContentUtilityClient() = default; + ~ShellContentUtilityClient() override = default; + + // ContentUtilityClient: + void RegisterServices(StaticServiceMap* services) override { + { + service_manager::EmbeddedServiceInfo info; + info.factory = base::BindRepeating(&CreateQuickLaunch); + (*services)[quick_launch::mojom::kServiceName] = info; + } + { + service_manager::EmbeddedServiceInfo info; + info.factory = base::BindRepeating(&CreateFontService); + (*services)[font_service::mojom::kServiceName] = info; + } + } + + private: + DISALLOW_COPY_AND_ASSIGN(ShellContentUtilityClient); +}; + +} // namespace ShellMainDelegate::ShellMainDelegate() = default; @@ -61,5 +101,10 @@ } } +content::ContentUtilityClient* ShellMainDelegate::CreateContentUtilityClient() { + utility_client_ = std::make_unique<ShellContentUtilityClient>(); + return utility_client_.get(); +} + } // namespace shell } // namespace ash
diff --git a/ash/shell/content/client/shell_main_delegate.h b/ash/shell/content/client/shell_main_delegate.h index 53e615f6..ce6363b 100644 --- a/ash/shell/content/client/shell_main_delegate.h +++ b/ash/shell/content/client/shell_main_delegate.h
@@ -25,12 +25,14 @@ bool BasicStartupComplete(int* exit_code) override; void PreSandboxStartup() override; content::ContentBrowserClient* CreateContentBrowserClient() override; + content::ContentUtilityClient* CreateContentUtilityClient() override; private: void InitializeResourceBundle(); std::unique_ptr<ShellContentBrowserClient> browser_client_; content::ShellContentClient content_client_; + std::unique_ptr<content::ContentUtilityClient> utility_client_; DISALLOW_COPY_AND_ASSIGN(ShellMainDelegate); };
diff --git a/ash/standalone/BUILD.gn b/ash/standalone/BUILD.gn deleted file mode 100644 index c438c0e1..0000000 --- a/ash/standalone/BUILD.gn +++ /dev/null
@@ -1,42 +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("//services/service_manager/public/cpp/service.gni") -import("//services/service_manager/public/service_manifest.gni") - -assert(is_chromeos) - -service("ash_standalone") { - output_name = "ash_standalone" - testonly = true - - sources = [ - "ash_standalone_main.cc", - ] - - deps = [ - "//ash", - "//ash:ash_service_resources", - "//ash:ash_service_resources_200", - "//ash:ash_shell_lib", - "//ash/app_list/presenter", - "//services/service_manager/public/cpp", - "//services/ui/public/cpp/input_devices", - "//services/ui/public/interfaces", - "//ui/views/examples:views_examples_lib", - ] - - # TODO(beng): This target relies on //mash/session, but there is a cycle so we - # can't state that dependency here. - data_deps = [ - "//ash:ash_service_resources", - "//ash:ash_service_resources_200", - "//services/ui", - ] -} - -service_manifest("manifest") { - name = "ash_standalone" - source = "manifest.json" -}
diff --git a/ash/standalone/OWNERS b/ash/standalone/OWNERS deleted file mode 100644 index 59dfd4b3..0000000 --- a/ash/standalone/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -per-file manifest.json=set noparent -per-file manifest.json=file://ipc/SECURITY_OWNERS
diff --git a/ash/standalone/README.md b/ash/standalone/README.md deleted file mode 100644 index 9fc2eb1..0000000 --- a/ash/standalone/README.md +++ /dev/null
@@ -1,7 +0,0 @@ -Ash standalone is a version of ash intended for use without Chrome for -testing/debugging purposes. Ash typically expects Chrome to connect to it -and configure various state (such as login). Ash standalone configures -ash in a test environment so that it does not need Chrome to connect -to it. Run it via `mash_session`, e.g.: - - out_dir/mash --service=mash_session --window-manager=ash_standalone
diff --git a/ash/standalone/ash_standalone_main.cc b/ash/standalone/ash_standalone_main.cc deleted file mode 100644 index 18675c26..0000000 --- a/ash/standalone/ash_standalone_main.cc +++ /dev/null
@@ -1,99 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <memory> - -#include "ash/shell.h" -#include "ash/shell/example_session_controller_client.h" -#include "ash/shell/shell_delegate_impl.h" -#include "ash/shell/shell_views_delegate.h" -#include "ash/shell/window_type_launcher.h" -#include "ash/shell/window_watcher.h" -#include "ash/shell_observer.h" -#include "ash/window_manager_service.h" -#include "base/bind.h" -#include "base/bind_helpers.h" -#include "services/service_manager/public/c/main.h" -#include "services/service_manager/public/cpp/connector.h" -#include "services/service_manager/public/cpp/service_runner.h" -#include "services/ui/public/cpp/input_devices/input_device_client.h" -#include "services/ui/public/interfaces/constants.mojom.h" -#include "ui/aura/window.h" -#include "ui/aura/window_tree_host.h" -#include "ui/views/examples/examples_window.h" - -namespace ash { -namespace { - -void ShowViewsExamples() { - views::examples::ShowExamplesWindow(views::examples::DO_NOTHING_ON_CLOSE); -} - -class ShellInit : public shell::ShellDelegateImpl, public ShellObserver { - public: - ShellInit() - : input_device_client_(std::make_unique<ui::InputDeviceClient>()) {} - ~ShellInit() override = default; - - void set_window_manager_service(WindowManagerService* service) { - window_manager_service_ = service; - } - - // shell::ShellDelegateImpl: - void PreInit() override { - DCHECK(window_manager_service_->GetConnector()); - ui::mojom::InputDeviceServerPtr server; - window_manager_service_->GetConnector()->BindInterface( - ui::mojom::kServiceName, &server); - input_device_client_->Connect(std::move(server)); - - shell::ShellDelegateImpl::PreInit(); - Shell::Get()->AddShellObserver(this); - } - - // ShellObserver: - void OnShellInitialized() override { - Shell::Get()->RemoveShellObserver(this); - - // Initialize session controller client and create fake user sessions. The - // fake user sessions makes ash into the logged in state. - example_session_controller_client_ = - std::make_unique<shell::ExampleSessionControllerClient>( - Shell::Get()->session_controller()); - example_session_controller_client_->Initialize(); - - window_watcher_ = std::make_unique<shell::WindowWatcher>(); - shell::InitWindowTypeLauncher(base::Bind(&ShowViewsExamples)); - - Shell::GetPrimaryRootWindow()->GetHost()->Show(); - } - - private: - // Used to observe new windows and update the shelf accordingly. - std::unique_ptr<shell::WindowWatcher> window_watcher_; - std::unique_ptr<shell::ExampleSessionControllerClient> - example_session_controller_client_; - std::unique_ptr<ui::InputDeviceClient> input_device_client_; - WindowManagerService* window_manager_service_ = nullptr; - - DISALLOW_COPY_AND_ASSIGN(ShellInit); -}; - -} // namespace -} // namespace ash - -MojoResult ServiceMain(MojoHandle service_request_handle) { - ash::shell::ShellViewsDelegate shell_views_delegate; - const bool show_primary_host_on_connect = false; - std::unique_ptr<ash::ShellInit> shell_init_ptr = - std::make_unique<ash::ShellInit>(); - ash::ShellInit* shell_init = shell_init_ptr.get(); - ash::WindowManagerService* window_manager_service = - new ash::WindowManagerService(show_primary_host_on_connect, - ash::Config::MUS, - std::move(shell_init_ptr)); - shell_init->set_window_manager_service(window_manager_service); - service_manager::ServiceRunner runner(window_manager_service); - return runner.Run(service_request_handle); -}
diff --git a/ash/standalone/manifest.json b/ash/standalone/manifest.json deleted file mode 100644 index ec0861e..0000000 --- a/ash/standalone/manifest.json +++ /dev/null
@@ -1,37 +0,0 @@ -{ - "name": "ash_standalone", - "display_name": "Standalone (testing) Ash Window Manager and Shell", - "interface_provider_specs": { - "service_manager:connector": { - "provides": { - "ash": [ - "app_list::mojom::AppList", - "ash::mojom::AcceleratorController", - "ash::mojom::CastConfig", - "ash::mojom::EventRewriterController", - "ash::mojom::HighlighterController", - "ash::mojom::ImeController", - "ash::mojom::LocaleNotificationController", - "ash::mojom::MediaController", - "ash::mojom::NewWindowController", - "ash::mojom::NoteTakingController", - "ash::mojom::SessionController", - "ash::mojom::ShelfController", - "ash::mojom::ShutdownController", - "ash::mojom::SystemTray", - "ash::mojom::TabletModeController", - "ash::mojom::VoiceInteractionController", - "ash::mojom::VpnList", - "ash::mojom::WallpaperController" - ], - "mus:window_manager": [ "ui::mojom::AcceleratorRegistrar" ] - }, - "requires": { - "*": [ "accessibility", "app" ], - "preferences_forwarder": [ "pref_client" ], - "ui": [ "display_dev", "window_manager" ], - "touch_hud_app": [ "mash:launchable" ] - } - } - } -}
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc index c6f558b..2216b0d0 100644 --- a/ash/wm/workspace/workspace_layout_manager_unittest.cc +++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -1547,8 +1547,13 @@ GetAppListTestHelper()->Dismiss(); } -// TODO(minch): This test has a high flake rate. https://crbug.com/838756 -TEST_F(WorkspaceLayoutManagerBackdropTest, DISABLED_OpenAppListInOverviewMode) { +// TODO(crbug.com/803286): The npot texture check failed on asan tests bot. +#if defined(ADDRESS_SANITIZER) +#define MAYBE_OpenAppListInOverviewMode DISABLED_OpenAppListInOverviewMode +#else +#define MAYBE_OpenAppListInOverviewMode OpenAppListInOverviewMode +#endif +TEST_F(WorkspaceLayoutManagerBackdropTest, MAYBE_OpenAppListInOverviewMode) { WorkspaceController* wc = ShellTestApi(Shell::Get()).workspace_controller(); WorkspaceControllerTestApi test_helper(wc);
diff --git a/ash/ws/window_service_delegate_impl.cc b/ash/ws/window_service_delegate_impl.cc new file mode 100644 index 0000000..e5b42701 --- /dev/null +++ b/ash/ws/window_service_delegate_impl.cc
@@ -0,0 +1,27 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/ws/window_service_delegate_impl.h" + +#include "ash/wm/container_finder.h" +#include "ui/aura/window.h" + +namespace ash { + +WindowServiceDelegateImpl::WindowServiceDelegateImpl() = default; + +WindowServiceDelegateImpl::~WindowServiceDelegateImpl() = default; + +std::unique_ptr<aura::Window> WindowServiceDelegateImpl::NewTopLevel( + const base::flat_map<std::string, std::vector<uint8_t>>& properties) { + // TODO: this needs to call CreateAndParentTopLevelWindow(); + std::unique_ptr<aura::Window> window = + std::make_unique<aura::Window>(nullptr); + window->SetType(aura::client::WINDOW_TYPE_NORMAL); + window->Init(ui::LAYER_NOT_DRAWN); + ash::wm::GetDefaultParent(window.get(), gfx::Rect())->AddChild(window.get()); + return window; +} + +} // namespace ash
diff --git a/ash/ws/window_service_delegate_impl.h b/ash/ws/window_service_delegate_impl.h new file mode 100644 index 0000000..a594b248 --- /dev/null +++ b/ash/ws/window_service_delegate_impl.h
@@ -0,0 +1,30 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WS_WINDOW_SERVICE_DELEGATE_IMPL_H_ +#define ASH_WS_WINDOW_SERVICE_DELEGATE_IMPL_H_ + +#include <memory> + +#include "services/ui/ws2/window_service_delegate.h" + +namespace ash { + +class WindowServiceDelegateImpl : public ui::ws2::WindowServiceDelegate { + public: + WindowServiceDelegateImpl(); + ~WindowServiceDelegateImpl() override; + + // ui::ws2::WindowServiceDelegate: + std::unique_ptr<aura::Window> NewTopLevel( + const base::flat_map<std::string, std::vector<uint8_t>>& properties) + override; + + private: + DISALLOW_COPY_AND_ASSIGN(WindowServiceDelegateImpl); +}; + +} // namespace ash + +#endif // ASH_WS_WINDOW_SERVICE_DELEGATE_IMPL_H_
diff --git a/base/allocator/partition_allocator/partition_alloc_constants.h b/base/allocator/partition_allocator/partition_alloc_constants.h index c4afd027..deaa19e 100644 --- a/base/allocator/partition_allocator/partition_alloc_constants.h +++ b/base/allocator/partition_allocator/partition_alloc_constants.h
@@ -5,6 +5,8 @@ #ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_CONSTANTS_H_ #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_CONSTANTS_H_ +#include <limits.h> + #include "base/allocator/partition_allocator/page_allocator_constants.h" #include "base/bits.h" #include "base/logging.h"
diff --git a/base/task_scheduler/task_scheduler.h b/base/task_scheduler/task_scheduler.h index d1d08d7..2195205f 100644 --- a/base/task_scheduler/task_scheduler.h +++ b/base/task_scheduler/task_scheduler.h
@@ -23,7 +23,7 @@ #include "build/build_config.h" namespace gin { -class V8BackgroundTaskRunner; +class V8Platform; } namespace content { @@ -217,7 +217,7 @@ static TaskScheduler* GetInstance(); private: - friend class gin::V8BackgroundTaskRunner; + friend class gin::V8Platform; friend class content::BrowserMainLoopTest_CreateThreadsInSingleProcess_Test; // Returns the maximum number of non-single-threaded non-blocked tasks posted
diff --git a/build/android/lint/suppressions.xml b/build/android/lint/suppressions.xml index e1ef41d9..fe61584 100644 --- a/build/android/lint/suppressions.xml +++ b/build/android/lint/suppressions.xml
@@ -335,6 +335,10 @@ <!-- 2 resource sets used by clank widgets for each channel --> <ignore regexp="The resource `R.string.bookmark_widget_title.*` appears to be unused"/> <ignore regexp="The resource `R.string.search_widget_title.*` appears to be unused"/> + <!-- Download location strings checked in before M68 deadline --> + <ignore regexp="The resource `R.string.download_location_not_enough_space_sd_card_full` appears to be unused"/> + <ignore regexp="The resource `R.string.download_location_notification_retry*` appears to be unused"/> + <ignore regexp="The resource `R.string.download_manager_ui_space_using*` appears to be unused"/> <!-- Endnote: Please specify number of suppressions when adding more --> </issue> <issue id="UseCompoundDrawables">
diff --git a/build/fuchsia/sdk.sha1 b/build/fuchsia/sdk.sha1 index 0e2c8ed..9e97b7ae 100644 --- a/build/fuchsia/sdk.sha1 +++ b/build/fuchsia/sdk.sha1
@@ -1 +1 @@ -daaeb5c85d212f83a958b69043b472aafefb14de \ No newline at end of file +5e56edb6c1a07d13fcab888cc5e2a753a61af349 \ No newline at end of file
diff --git a/cc/animation/animation.cc b/cc/animation/animation.cc index 8dd68be..57af259 100644 --- a/cc/animation/animation.cc +++ b/cc/animation/animation.cc
@@ -243,7 +243,7 @@ void Animation::Tick(base::TimeTicks monotonic_time) { DCHECK(!monotonic_time.is_null()); for (auto& keyframe_effect : keyframe_effects_) - keyframe_effect->Tick(monotonic_time, nullptr); + keyframe_effect->Tick(monotonic_time); } void Animation::UpdateState(bool start_ready_animations,
diff --git a/cc/animation/animation.h b/cc/animation/animation.h index 64ddcae..6ac050d 100644 --- a/cc/animation/animation.h +++ b/cc/animation/animation.h
@@ -90,7 +90,7 @@ void AbortKeyframeModels(TargetProperty::Type target_property, bool needs_completion); - virtual void PushPropertiesTo(Animation* animation_impl); + void PushPropertiesTo(Animation* animation_impl); void UpdateState(bool start_ready_keyframe_models, AnimationEvents* events); virtual void Tick(base::TimeTicks monotonic_time);
diff --git a/cc/animation/keyframe_effect.cc b/cc/animation/keyframe_effect.cc index c7a5c338..9b01eda 100644 --- a/cc/animation/keyframe_effect.cc +++ b/cc/animation/keyframe_effect.cc
@@ -104,8 +104,7 @@ element_id_ = ElementId(); } -void KeyframeEffect::Tick(base::TimeTicks monotonic_time, - const AnimationTimeProvider* tick_provider) { +void KeyframeEffect::Tick(base::TimeTicks monotonic_time) { DCHECK(has_bound_element_animations()); if (!element_animations_->has_element_in_any_list()) return; @@ -113,12 +112,8 @@ if (needs_to_start_keyframe_models_) StartKeyframeModels(monotonic_time); - base::TimeTicks tick_time = monotonic_time; for (auto& keyframe_model : keyframe_models_) { - if (tick_provider) - tick_time = tick_provider->GetTimeForKeyframeModel(*keyframe_model); - - TickKeyframeModel(tick_time, keyframe_model.get(), + TickKeyframeModel(monotonic_time, keyframe_model.get(), element_animations_.get()); } @@ -225,6 +220,19 @@ } } +void KeyframeEffect::Pause(base::TimeDelta pause_offset) { + for (auto& keyframe_model : keyframe_models_) { + base::TimeTicks pause_time = keyframe_model->time_offset() + + keyframe_model->start_time() + pause_offset; + keyframe_model->SetRunState(KeyframeModel::PAUSED, pause_time); + } + + if (has_bound_element_animations()) { + animation_->SetNeedsCommit(); + SetNeedsPushProperties(); + } +} + void KeyframeEffect::AddKeyframeModel( std::unique_ptr<KeyframeModel> keyframe_model) { AnimationHost* animation_host = animation_->animation_host();
diff --git a/cc/animation/keyframe_effect.h b/cc/animation/keyframe_effect.h index 8db169e7..4ee5176e 100644 --- a/cc/animation/keyframe_effect.h +++ b/cc/animation/keyframe_effect.h
@@ -41,12 +41,6 @@ // given target. class CC_ANIMATION_EXPORT KeyframeEffect { public: - class AnimationTimeProvider { - public: - virtual base::TimeTicks GetTimeForKeyframeModel( - const KeyframeModel&) const = 0; - }; - explicit KeyframeEffect(KeyframeEffectId id); ~KeyframeEffect(); @@ -87,8 +81,7 @@ void AttachElement(ElementId element_id); void DetachElement(); - void Tick(base::TimeTicks monotonic_time, - const AnimationTimeProvider* tick_provider); + void Tick(base::TimeTicks monotonic_time); static void TickKeyframeModel(base::TimeTicks monotonic_time, KeyframeModel* keyframe_model, AnimationTarget* target); @@ -98,6 +91,8 @@ void UpdateState(bool start_ready_keyframe_models, AnimationEvents* events); void UpdateTickingState(UpdateTickingType type); + void Pause(base::TimeDelta pause_offset); + void AddKeyframeModel(std::unique_ptr<KeyframeModel> keyframe_model); void PauseKeyframeModel(int keyframe_model_id, double time_offset); void RemoveKeyframeModel(int keyframe_model_id);
diff --git a/cc/animation/keyframe_model.cc b/cc/animation/keyframe_model.cc index 0044254..d8495a62 100644 --- a/cc/animation/keyframe_model.cc +++ b/cc/animation/keyframe_model.cc
@@ -160,21 +160,6 @@ (fill_mode_ == FillMode::BOTH || fill_mode_ == FillMode::BACKWARDS); } -base::TimeTicks KeyframeModel::ConvertLocalTimeToMonotonicTime( - base::TimeDelta local_time) const { - // When waiting on receiving a start time, then our global clock is 'stuck' at - // the initial state. - if ((run_state_ == STARTING && !has_set_start_time()) || - needs_synchronized_start_time()) - return base::TimeTicks(); - - // If we're paused, time is 'stuck' at the pause time. - if (run_state_ == PAUSED) - return pause_time_; - - return local_time + start_time_ + total_paused_time_; -} - base::TimeDelta KeyframeModel::ConvertToActiveTime( base::TimeTicks monotonic_time) const { // If we're just starting or we're waiting on receiving a start time,
diff --git a/cc/animation/keyframe_model.h b/cc/animation/keyframe_model.h index c3731dac..9d77099 100644 --- a/cc/animation/keyframe_model.h +++ b/cc/animation/keyframe_model.h
@@ -140,9 +140,6 @@ base::TimeDelta TrimTimeToCurrentIteration( base::TimeTicks monotonic_time) const; - base::TimeTicks ConvertLocalTimeToMonotonicTime( - base::TimeDelta local_time) const; - void set_is_controlling_instance_for_test(bool is_controlling_instance) { is_controlling_instance_ = is_controlling_instance; }
diff --git a/cc/animation/worklet_animation.cc b/cc/animation/worklet_animation.cc index fcf91c1..5a79260b 100644 --- a/cc/animation/worklet_animation.cc +++ b/cc/animation/worklet_animation.cc
@@ -42,7 +42,13 @@ } void WorkletAnimation::Tick(base::TimeTicks monotonic_time) { - keyframe_effect()->Tick(monotonic_time, this); + // As the output of a WorkletAnimation is driven by a script-provided local + // time, we don't want the underlying effect to participate in the normal + // animations lifecycle. To avoid this we pause the underlying keyframe effect + // at the local time obtained from the user script - essentially turning each + // call to |WorkletAnimation::Tick| into a seek in the effect. + keyframe_effect()->Pause(local_time_); + keyframe_effect()->Tick(monotonic_time); } // TODO(crbug.com/780151): The current time returned should be an offset against @@ -66,19 +72,6 @@ return needs_update; } -base::TimeTicks WorkletAnimation::GetTimeForKeyframeModel( - const KeyframeModel& keyframe_model) const { - // The local time set by the script has to be converted to monotonic time; - // largely this means it is offset from the start time and includes any time - // the animation spent paused. - return keyframe_model.ConvertLocalTimeToMonotonicTime(local_time_); -} - -void WorkletAnimation::PushPropertiesTo(Animation* animation_impl) { - SingleKeyframeEffectAnimation::PushPropertiesTo(animation_impl); - static_cast<WorkletAnimation*>(animation_impl)->SetLocalTime(local_time_); -} - bool WorkletAnimation::IsWorkletAnimation() const { return true; }
diff --git a/cc/animation/worklet_animation.h b/cc/animation/worklet_animation.h index 2737110..d98ee88 100644 --- a/cc/animation/worklet_animation.h +++ b/cc/animation/worklet_animation.h
@@ -19,8 +19,7 @@ // timing to be controlled by an animator instance that is running in a // AnimationWorkletGlobalScope. class CC_ANIMATION_EXPORT WorkletAnimation final - : public SingleKeyframeEffectAnimation, - KeyframeEffect::AnimationTimeProvider { + : public SingleKeyframeEffectAnimation { public: WorkletAnimation(int id, const std::string& name, @@ -51,12 +50,6 @@ bool NeedsUpdate(base::TimeTicks monotonic_time, const ScrollTree& scroll_tree); - // KeyframeEffect::AnimationTimeProvider: - base::TimeTicks GetTimeForKeyframeModel( - const KeyframeModel& keyframe_model) const override; - - void PushPropertiesTo(Animation* animation_impl) override; - private: ~WorkletAnimation() override;
diff --git a/cc/animation/worklet_animation_unittest.cc b/cc/animation/worklet_animation_unittest.cc index ef89d6f..e112fb4 100644 --- a/cc/animation/worklet_animation_unittest.cc +++ b/cc/animation/worklet_animation_unittest.cc
@@ -36,9 +36,15 @@ worklet_animation_->AttachElement(element_id_); host_->AddAnimationTimeline(timeline_); timeline_->AttachAnimation(worklet_animation_); + + host_->PushPropertiesTo(host_impl_); + timeline_impl_ = host_impl_->GetTimelineById(timeline_id_); + worklet_animation_impl_ = static_cast<WorkletAnimation*>( + timeline_impl_->GetAnimationById(worklet_animation_id_)); } scoped_refptr<WorkletAnimation> worklet_animation_; + scoped_refptr<WorkletAnimation> worklet_animation_impl_; int worklet_animation_id_ = 11; }; @@ -61,26 +67,14 @@ AddOpacityTransitionToAnimation(worklet_animation_.get(), duration, start_opacity, end_opacity, true); + // Push the opacity animation to the impl thread. host_->PushPropertiesTo(host_impl_); host_impl_->ActivateAnimations(); - // TODO(majidvp): At the moment the animation does not use the local time when - // it is starting. This is because KeyframeModel::ConvertToActiveTime always - // returns the time_offset when starting. We need to change this. - base::TimeTicks time; - time += base::TimeDelta::FromSecondsD(0.1); - TickAnimationsTransferEvents(time, 1u); - base::TimeDelta local_time = base::TimeDelta::FromSecondsD(duration / 2); - worklet_animation_->SetLocalTime(local_time); + worklet_animation_impl_->SetLocalTime(local_time); - host_->PushPropertiesTo(host_impl_); - - TickAnimationsTransferEvents(time, 0u); - - client_.ExpectOpacityPropertyMutated(element_id_, ElementListType::ACTIVE, - expected_opacity); - + TickAnimationsTransferEvents(base::TimeTicks(), 0u); client_impl_.ExpectOpacityPropertyMutated( element_id_, ElementListType::ACTIVE, expected_opacity); } @@ -109,7 +103,7 @@ base::TimeTicks time; time += base::TimeDelta::FromSecondsD(0.1); - TickAnimationsTransferEvents(time, 1u); + TickAnimationsTransferEvents(time, 0u); Mock::VerifyAndClearExpectations(mock_mutator); } @@ -136,7 +130,7 @@ base::TimeTicks time; time += base::TimeDelta::FromSecondsD(0.1); - TickAnimationsTransferEvents(time, 1u); + TickAnimationsTransferEvents(time, 0u); // The time has not changed which means worklet animation input is the same. // Ticking animations again should not result in mutator being asked to
diff --git a/cc/base/switches.cc b/cc/base/switches.cc index ae88a27..8b70bc4 100644 --- a/cc/base/switches.cc +++ b/cc/base/switches.cc
@@ -24,10 +24,8 @@ const char kEnableMainFrameBeforeActivation[] = "enable-main-frame-before-activation"; -// Enables defering image decodes to the image decode service. -const char kEnableCheckerImaging[] = "enable-checker-imaging"; - -// Disabled defering image decodes to the image decode service. +// Disabled defering all image decodes to the image decode service, ignoring +// DecodingMode preferences specified on PaintImage. const char kDisableCheckerImaging[] = "disable-checker-imaging"; // Percentage of the browser controls need to be hidden before they will auto
diff --git a/cc/base/switches.h b/cc/base/switches.h index 5fa324f..7234ee4 100644 --- a/cc/base/switches.h +++ b/cc/base/switches.h
@@ -20,7 +20,6 @@ CC_BASE_EXPORT extern const char kDisableCompositedAntialiasing[]; CC_BASE_EXPORT extern const char kDisableMainFrameBeforeActivation[]; CC_BASE_EXPORT extern const char kEnableMainFrameBeforeActivation[]; -CC_BASE_EXPORT extern const char kEnableCheckerImaging[]; CC_BASE_EXPORT extern const char kDisableCheckerImaging[]; CC_BASE_EXPORT extern const char kBrowserControlsHideThreshold[]; CC_BASE_EXPORT extern const char kBrowserControlsShowThreshold[];
diff --git a/cc/paint/image_transfer_cache_entry.h b/cc/paint/image_transfer_cache_entry.h index fd3937d0..3e709ca 100644 --- a/cc/paint/image_transfer_cache_entry.h +++ b/cc/paint/image_transfer_cache_entry.h
@@ -56,9 +56,6 @@ size_t CachedSize() const final; bool Deserialize(GrContext* context, base::span<const uint8_t> data) final; - void set_image_for_testing(sk_sp<SkImage> image) { - image_ = std::move(image); - } const sk_sp<SkImage>& image() { return image_; } private:
diff --git a/cc/test/test_options_provider.cc b/cc/test/test_options_provider.cc index 7c523ea..47a6725 100644 --- a/cc/test/test_options_provider.cc +++ b/cc/test/test_options_provider.cc
@@ -53,28 +53,37 @@ ImageProvider::ScopedDecodedDrawImage TestOptionsProvider::GetDecodedDrawImage( const DrawImage& draw_image) { + uint32_t image_id = draw_image.paint_image().GetSkImage()->uniqueID(); + // Lock and reuse the entry if possible. + const EntryKey entry_key(TransferCacheEntryType::kImage, image_id); + if (LockEntryDirect(entry_key)) { + return ScopedDecodedDrawImage( + DecodedDrawImage(image_id, SkSize::MakeEmpty(), SkSize::Make(1u, 1u), + draw_image.filter_quality(), true)); + } + decoded_images_.push_back(draw_image); - auto& entry = entry_map_[++transfer_cache_entry_id_]; SkBitmap bitmap; const auto& paint_image = draw_image.paint_image(); bitmap.allocPixelsFlags( SkImageInfo::MakeN32Premul(paint_image.width(), paint_image.height()), SkBitmap::kZeroPixels_AllocFlag); - sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); - entry.set_image_for_testing(image); - return ScopedDecodedDrawImage(DecodedDrawImage( - transfer_cache_entry_id_, SkSize::MakeEmpty(), SkSize::Make(1u, 1u), - draw_image.filter_quality(), true)); -} -ServiceTransferCacheEntry* TestOptionsProvider::GetEntryInternal( - TransferCacheEntryType entry_type, - uint32_t entry_id) { - if (entry_type != TransferCacheEntryType::kImage) - return TransferCacheTestHelper::GetEntryInternal(entry_type, entry_id); - auto it = entry_map_.find(entry_id); - CHECK(it != entry_map_.end()); - return &it->second; + // Create a transfer cache entry for this image. + auto color_space = SkColorSpace::MakeSRGB(); + ClientImageTransferCacheEntry cache_entry(&bitmap.pixmap(), + color_space.get()); + std::vector<uint8_t> data; + data.resize(cache_entry.SerializedSize()); + if (!cache_entry.Serialize(base::span<uint8_t>(data.data(), data.size()))) { + return ScopedDecodedDrawImage(); + } + + CreateEntryDirect(entry_key, base::span<uint8_t>(data.data(), data.size())); + + return ScopedDecodedDrawImage( + DecodedDrawImage(image_id, SkSize::MakeEmpty(), SkSize::Make(1u, 1u), + draw_image.filter_quality(), true)); } } // namespace cc
diff --git a/cc/test/test_options_provider.h b/cc/test/test_options_provider.h index 6b93bc2d..796099e 100644 --- a/cc/test/test_options_provider.h +++ b/cc/test/test_options_provider.h
@@ -52,10 +52,6 @@ ScopedDecodedDrawImage GetDecodedDrawImage( const DrawImage& draw_image) override; - ServiceTransferCacheEntry* GetEntryInternal(TransferCacheEntryType entry_type, - uint32_t entry_id) override; - uint32_t transfer_cache_entry_id_ = 0u; - base::flat_map<uint32_t, ServiceImageTransferCacheEntry> entry_map_; testing::StrictMock<MockCanvas> canvas_; PaintOp::SerializeOptions serialize_options_;
diff --git a/cc/test/transfer_cache_test_helper.cc b/cc/test/transfer_cache_test_helper.cc index e8eb7d3..073e6d8 100644 --- a/cc/test/transfer_cache_test_helper.cc +++ b/cc/test/transfer_cache_test_helper.cc
@@ -6,11 +6,18 @@ #include "base/containers/span.h" #include "base/logging.h" +#include "third_party/skia/include/gpu/gl/GrGLInterface.h" namespace cc { TransferCacheTestHelper::TransferCacheTestHelper(GrContext* context) - : context_(context) {} + : context_(context) { + if (!context_) { + sk_sp<const GrGLInterface> gl_interface(GrGLCreateNullInterface()); + owned_context_ = GrContext::MakeGL(std::move(gl_interface)); + context_ = owned_context_.get(); + } +} TransferCacheTestHelper::~TransferCacheTestHelper() = default; bool TransferCacheTestHelper::LockEntryDirect(const EntryKey& key) { @@ -22,9 +29,12 @@ // Deserialize into a service transfer cache entry. std::unique_ptr<ServiceTransferCacheEntry> service_entry = ServiceTransferCacheEntry::Create(key.first); - DCHECK(service_entry); + if (!service_entry) + return; + bool success = service_entry->Deserialize(context_, data); - DCHECK(success); + if (!success) + return; last_added_entry_ = key;
diff --git a/cc/test/transfer_cache_test_helper.h b/cc/test/transfer_cache_test_helper.h index f66cfb20..399885d 100644 --- a/cc/test/transfer_cache_test_helper.h +++ b/cc/test/transfer_cache_test_helper.h
@@ -11,6 +11,7 @@ #include "base/containers/span.h" #include "cc/paint/transfer_cache_deserialize_helper.h" #include "cc/paint/transfer_cache_serialize_helper.h" +#include "third_party/skia/include/gpu/GrContext.h" class GrContext; @@ -53,6 +54,7 @@ EntryKey last_added_entry_ = {TransferCacheEntryType::kRawMemory, ~0}; GrContext* context_ = nullptr; + sk_sp<GrContext> owned_context_; size_t cached_items_limit_ = std::numeric_limits<size_t>::max(); };
diff --git a/cc/tiles/checker_image_tracker.cc b/cc/tiles/checker_image_tracker.cc index 060eb020..33385afc 100644 --- a/cc/tiles/checker_image_tracker.cc +++ b/cc/tiles/checker_image_tracker.cc
@@ -209,8 +209,6 @@ // they should be accompanied with an invalidation during paint. image_id_to_decode_.clear(); - decoding_mode_map_.clear(); - if (can_clear_decode_policy_tracking) { image_async_decode_state_.clear(); } else { @@ -273,23 +271,12 @@ WhichTree tree) { const PaintImage& image = draw_image.paint_image(); PaintImage::Id image_id = image.stable_id(); - TRACE_EVENT1("cc", "CheckerImageTracker::ShouldCheckerImage", "image_id", - image_id); + TRACE_EVENT1("cc.debug", "CheckerImageTracker::ShouldCheckerImage", + "image_id", image_id); - auto decoding_mode_it = decoding_mode_map_.find(image_id); - PaintImage::DecodingMode decoding_mode_hint = - decoding_mode_it == decoding_mode_map_.end() - ? PaintImage::DecodingMode::kUnspecified - : decoding_mode_it->second; - - // If we don't have default checker imaging enabled, and the developer did not - // specify "async" then we don't checker the images. To put it different, we - // currently only not respect |enable_checker_imaging_| if the value was - // specified as "async" by the developer. - if (decoding_mode_hint != PaintImage::DecodingMode::kAsync && - !enable_checker_imaging_) { + // Checkering of all images is disabled. + if (!enable_checker_imaging_) return false; - } // If the image was invalidated on the current sync tree and the tile is // for the active tree, continue checkering it on the active tree to ensure @@ -306,6 +293,16 @@ return true; } + auto decoding_mode_it = decoding_mode_map_.find(image_id); + PaintImage::DecodingMode decoding_mode_hint = + decoding_mode_it == decoding_mode_map_.end() + ? PaintImage::DecodingMode::kUnspecified + : decoding_mode_it->second; + + // We only checker images if the developer specifies async decoding mode. + if (decoding_mode_hint != PaintImage::DecodingMode::kAsync) + return false; + auto insert_result = image_async_decode_state_.insert( std::pair<PaintImage::Id, DecodeState>(image_id, DecodeState())); auto it = insert_result.first;
diff --git a/cc/tiles/checker_image_tracker_unittest.cc b/cc/tiles/checker_image_tracker_unittest.cc index 0b4606f..88c3f10c 100644 --- a/cc/tiles/checker_image_tracker_unittest.cc +++ b/cc/tiles/checker_image_tracker_unittest.cc
@@ -112,12 +112,16 @@ } auto generator = CreatePaintImageGenerator(gfx::Size(dimension, dimension)); + auto id = PaintImage::GetNextId(); + checker_image_tracker_->UpdateImageDecodingHints( + {{id, PaintImage::DecodingMode::kAsync}}); return DrawImage(PaintImageBuilder::WithDefault() - .set_id(PaintImage::GetNextId()) + .set_id(id) .set_paint_image_generator(std::move(generator)) .set_animation_type(animation) .set_completion_state(completion) .set_is_multipart(is_multipart) + .set_decoding_mode(PaintImage::DecodingMode::kAsync) .TakePaintImage(), SkIRect::MakeWH(dimension, dimension), kNone_SkFilterQuality, SkMatrix::I(), @@ -379,8 +383,6 @@ checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking); image_decode_queue = BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE); - image_decode_queue = - BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE); EXPECT_EQ(image_decode_queue.size(), 1U); // If an image had been decoded and tracker was cleared after it, we should
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc index 9e1d304..2295aad 100644 --- a/cc/tiles/tile_manager_unittest.cc +++ b/cc/tiles/tile_manager_unittest.cc
@@ -2574,6 +2574,13 @@ EXPECT_TRUE(host_impl()->tile_manager()->IsReadyToActivate()); } +PaintImage MakeCheckerablePaintImage(const gfx::Size& size) { + auto image = CreateDiscardablePaintImage(size); + return PaintImageBuilder::WithCopy(image) + .set_decoding_mode(PaintImage::DecodingMode::kAsync) + .TakePaintImage(); +} + class CheckerImagingTileManagerTest : public TestLayerTreeHostBase { public: class MockImageGenerator : public FakePaintImageGenerator { @@ -2633,7 +2640,6 @@ TEST_F(CheckerImagingTileManagerTest, NoImageDecodeDependencyForCheckeredTiles) { const gfx::Size layer_bounds(512, 512); - SetupDefaultTrees(layer_bounds); std::unique_ptr<FakeRecordingSource> recording_source = FakeRecordingSource::CreateFilledRecordingSource(layer_bounds); @@ -2644,6 +2650,7 @@ PaintImage image = PaintImageBuilder::WithDefault() .set_id(PaintImage::GetNextId()) .set_paint_image_generator(generator) + .set_decoding_mode(PaintImage::DecodingMode::kAsync) .TakePaintImage(); recording_source->add_draw_image(image, gfx::Point(0, 0)); @@ -2651,13 +2658,12 @@ scoped_refptr<RasterSource> raster_source = recording_source->CreateRasterSource(); - std::unique_ptr<PictureLayerImpl> layer_impl = PictureLayerImpl::Create( - host_impl()->pending_tree(), 1, Layer::LayerMaskType::NOT_MASK); - layer_impl->set_contributes_to_drawn_render_surface(true); - PictureLayerTilingSet* tiling_set = layer_impl->picture_layer_tiling_set(); + Region invalidation((gfx::Rect(layer_bounds))); + SetupPendingTree(raster_source, layer_bounds, invalidation); - PictureLayerTiling* tiling = - tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source); + PictureLayerTilingSet* tiling_set = + pending_layer()->picture_layer_tiling_set(); + PictureLayerTiling* tiling = tiling_set->tiling_at(0); tiling->set_resolution(HIGH_RESOLUTION); tiling->CreateAllTilesForTesting(); tiling->SetTilePriorityRectsForTesting( @@ -2694,8 +2700,7 @@ recording_source->set_fill_with_nonsolid_color(true); int dimension = 500; - PaintImage image = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + PaintImage image = MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); recording_source->add_draw_image(image, gfx::Point(0, 0)); recording_source->Rerecord(); @@ -2731,8 +2736,7 @@ recording_source->set_fill_with_nonsolid_color(true); int dimension = 500; - PaintImage image = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + PaintImage image = MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); recording_source->add_draw_image(image, gfx::Point(0, 0)); recording_source->Rerecord(); @@ -2769,11 +2773,11 @@ int dimension = 450; PaintImage image1 = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); PaintImage image2 = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); PaintImage image3 = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); recording_source->add_draw_image(image1, gfx::Point(0, 0)); recording_source->add_draw_image(image2, gfx::Point(600, 0)); recording_source->add_draw_image(image3, gfx::Point(0, 600)); @@ -2930,7 +2934,7 @@ std::unique_ptr<FakeRecordingSource> recording_source = FakeRecordingSource::CreateFilledRecordingSource(layer_bounds); recording_source->set_fill_with_nonsolid_color(true); - PaintImage image = CreateDiscardablePaintImage(gfx::Size(512, 512)); + PaintImage image = MakeCheckerablePaintImage(gfx::Size(512, 512)); recording_source->add_draw_image(image, gfx::Point(0, 0)); recording_source->Rerecord(); scoped_refptr<RasterSource> raster_source = @@ -2969,7 +2973,7 @@ std::unique_ptr<FakeRecordingSource> recording_source = FakeRecordingSource::CreateFilledRecordingSource(layer_bounds); recording_source->set_fill_with_nonsolid_color(true); - PaintImage image = CreateDiscardablePaintImage(gfx::Size(512, 512)); + PaintImage image = MakeCheckerablePaintImage(gfx::Size(512, 512)); recording_source->add_draw_image(image, gfx::Point(0, 0)); recording_source->Rerecord(); scoped_refptr<RasterSource> raster_source = @@ -3054,9 +3058,9 @@ int dimension = 450; PaintImage image1 = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); PaintImage image2 = - CreateDiscardablePaintImage(gfx::Size(dimension, dimension)); + MakeCheckerablePaintImage(gfx::Size(dimension, dimension)); recording_source->add_draw_image(image1, gfx::Point(0, 515)); recording_source->add_draw_image(image2, gfx::Point(515, 515));
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index bada9a6..a4afbc7 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -13733,7 +13733,10 @@ std::unique_ptr<FakeRecordingSource> recording_source = FakeRecordingSource::CreateFilledRecordingSource(layer_size); PaintImage checkerable_image = - CreateDiscardablePaintImage(gfx::Size(500, 500)); + PaintImageBuilder::WithCopy( + CreateDiscardablePaintImage(gfx::Size(500, 500))) + .set_decoding_mode(PaintImage::DecodingMode::kAsync) + .TakePaintImage(); recording_source->add_draw_image(checkerable_image, gfx::Point(0, 0)); SkColor non_solid_color = SkColorSetARGB(128, 45, 56, 67); @@ -13763,6 +13766,11 @@ root->SetDrawsContent(true); pending_tree->BuildPropertyTreesForTesting(); + // Update the decoding state map for the tracker so it knows the correct + // decoding preferences for the image. + host_impl_->tile_manager()->checker_image_tracker().UpdateImageDecodingHints( + raster_source->TakeDecodingModeMap()); + // CompleteCommit which should perform a PrepareTiles, adding tilings for the // root layer, each one having a raster task. host_impl_->CommitComplete();
diff --git a/cc/trees/layer_tree_host_pixeltest_masks.cc b/cc/trees/layer_tree_host_pixeltest_masks.cc index 02e0e7bf..d3b91596d 100644 --- a/cc/trees/layer_tree_host_pixeltest_masks.cc +++ b/cc/trees/layer_tree_host_pixeltest_masks.cc
@@ -312,13 +312,13 @@ float average_error_allowed_in_bad_pixels = 100.0f; int large_error_allowed = 256; int small_error_allowed = 0; - pixel_comparator_.reset(new FuzzyPixelComparator( + pixel_comparator_ = std::make_unique<FuzzyPixelComparator>( true, // discard_alpha percentage_pixels_large_error, percentage_pixels_small_error, average_error_allowed_in_bad_pixels, large_error_allowed, - small_error_allowed)); + small_error_allowed); RunPixelResourceTest(background, base::FilePath( @@ -363,13 +363,13 @@ float average_error_allowed_in_bad_pixels = 256.0f; int large_error_allowed = 256; int small_error_allowed = 0; - pixel_comparator_.reset(new FuzzyPixelComparator( + pixel_comparator_ = std::make_unique<FuzzyPixelComparator>( true, // discard_alpha percentage_pixels_large_error, percentage_pixels_small_error, average_error_allowed_in_bad_pixels, large_error_allowed, - small_error_allowed)); + small_error_allowed); RunPixelResourceTest(background, base::FilePath( @@ -430,11 +430,11 @@ small_error_allowed = 1; } - pixel_comparator_.reset(new FuzzyPixelComparator( + pixel_comparator_ = std::make_unique<FuzzyPixelComparator>( false, // discard_alpha percentage_pixels_error, percentage_pixels_small_error, average_error_allowed_in_bad_pixels, large_error_allowed, - small_error_allowed)); + small_error_allowed); } static scoped_refptr<Layer> CreateCheckerboardLayer(const gfx::Size& bounds) { @@ -714,6 +714,59 @@ "mask_as_blending_rotated_circle_underflow.png"))); } +TEST_P(LayerTreeHostMasksForBackgroundFiltersPixelTest, + MaskOfLayerWithBackgroundFilterAndBlend) { + scoped_refptr<SolidColorLayer> background = + CreateSolidColorLayer(gfx::Rect(128, 128), SK_ColorWHITE); + + gfx::Size picture_bounds(128, 128); + CheckerContentLayerClient picture_client_vertical(picture_bounds, + SK_ColorGREEN, true); + scoped_refptr<PictureLayer> picture_vertical = + PictureLayer::Create(&picture_client_vertical); + picture_vertical->SetBounds(picture_bounds); + picture_vertical->SetIsDrawable(true); + + CheckerContentLayerClient picture_client_horizontal(picture_bounds, + SK_ColorMAGENTA, false); + scoped_refptr<PictureLayer> picture_horizontal = + PictureLayer::Create(&picture_client_horizontal); + picture_horizontal->SetBounds(picture_bounds); + picture_horizontal->SetIsDrawable(true); + picture_horizontal->SetContentsOpaque(false); + picture_horizontal->SetBlendMode(SkBlendMode::kMultiply); + + FilterOperations filters; + filters.Append(FilterOperation::CreateGrayscaleFilter(1.0)); + picture_horizontal->SetBackgroundFilters(filters); + + background->AddChild(picture_vertical); + background->AddChild(picture_horizontal); + + gfx::Size mask_bounds(128, 128); + CircleContentLayerClient mask_client(mask_bounds); + scoped_refptr<PictureLayer> mask = PictureLayer::Create(&mask_client); + mask->SetBounds(mask_bounds); + mask->SetIsDrawable(true); + mask->SetLayerMaskType(mask_type_); + picture_horizontal->SetMaskLayer(mask.get()); + + float percentage_pixels_large_error = 0.062f; // 0.062%, ~10px / (128*128) + float percentage_pixels_small_error = 0.0f; + float average_error_allowed_in_bad_pixels = 200.0f; + int large_error_allowed = 256; + int small_error_allowed = 0; + pixel_comparator_ = std::make_unique<FuzzyPixelComparator>( + true, // discard_alpha + percentage_pixels_large_error, percentage_pixels_small_error, + average_error_allowed_in_bad_pixels, large_error_allowed, + small_error_allowed); + + RunPixelResourceTest(background, + base::FilePath(FILE_PATH_LITERAL( + "mask_of_background_filter_and_blend.png"))); +} + } // namespace } // namespace cc
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index 2cdbd7f5..410e493 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -8291,11 +8291,9 @@ void ReadyToCommitOnThread(LayerTreeHostImpl* impl) override { if (one_commit_done_) return; - EXPECT_TRUE( + EXPECT_FALSE( impl->tile_manager()->checker_image_tracker().ShouldCheckerImage( image_, WhichTree::PENDING_TREE)); - // Reset the tracker as if it has never seen this image. - impl->tile_manager()->checker_image_tracker().ClearTracker(true); } void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
diff --git a/cc/trees/layer_tree_host_unittest_checkerimaging.cc b/cc/trees/layer_tree_host_unittest_checkerimaging.cc index f71c658..929c665 100644 --- a/cc/trees/layer_tree_host_unittest_checkerimaging.cc +++ b/cc/trees/layer_tree_host_unittest_checkerimaging.cc
@@ -60,6 +60,9 @@ content_layer_client_.set_fill_with_nonsolid_color(true); PaintImage checkerable_image = CreateDiscardablePaintImage(gfx::Size(450, 450)); + checkerable_image = PaintImageBuilder::WithCopy(checkerable_image) + .set_decoding_mode(PaintImage::DecodingMode::kAsync) + .TakePaintImage(); content_layer_client_.add_draw_image(checkerable_image, gfx::Point(0, 0), PaintFlags());
diff --git a/chrome/android/java/res/layout/autofill_keyboard_accessory_item.xml b/chrome/android/java/res/layout/autofill_keyboard_accessory_item.xml index 843a35c3..58daa3a7 100644 --- a/chrome/android/java/res/layout/autofill_keyboard_accessory_item.xml +++ b/chrome/android/java/res/layout/autofill_keyboard_accessory_item.xml
@@ -18,7 +18,7 @@ android:ellipsize="end" android:fontFamily="sans-serif-medium" android:gravity="center_vertical" - android:minWidth="@dimen/keyboard_accessory_chip_height" + android:minWidth="@dimen/keyboard_accessory_action_height" android:paddingEnd="@dimen/keyboard_accessory_half_padding" android:paddingStart="@dimen/keyboard_accessory_half_padding" android:singleLine="true"
diff --git a/chrome/android/java/res/layout/keyboard_accessory_action.xml b/chrome/android/java/res/layout/keyboard_accessory_action.xml new file mode 100644 index 0000000..5ad307f3 --- /dev/null +++ b/chrome/android/java/res/layout/keyboard_accessory_action.xml
@@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2018 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> + +<org.chromium.ui.widget.ButtonCompat + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:chrome="http://schemas.android.com/apk/res-auto" + android:gravity="center" + android:layout_height="@dimen/keyboard_accessory_action_height" + android:layout_width="wrap_content" + android:minHeight="0dp" + android:minWidth="0dp" + android:paddingBottom="0dp" + android:paddingEnd="@dimen/keyboard_accessory_half_padding" + android:paddingStart="@dimen/keyboard_accessory_half_padding" + android:paddingTop="0dp" + android:textAlignment="center" + android:textColor="@color/white_alpha_90" + android:textSize="@dimen/keyboard_accessory_text_size" + chrome:buttonColor="@color/google_blue_500" + chrome:buttonRaised="false"/>
diff --git a/chrome/android/java/res/layout/keyboard_accessory_sheet.xml b/chrome/android/java/res/layout/keyboard_accessory_sheet.xml new file mode 100644 index 0000000..5e6d7f2 --- /dev/null +++ b/chrome/android/java/res/layout/keyboard_accessory_sheet.xml
@@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2015 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. --> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/keyboard_accessory" + android:background="@drawable/keyboard_accessory_background" + android:contentDescription="@string/autofill_keyboard_accessory_content_description" + android:fillViewport="true" + android:layout_gravity="start|bottom" + android:layout_height="@dimen/keyboard_accessory_sheet_height" + android:layout_width="match_parent" + android:orientation="vertical" + android:visibility="gone"/> \ No newline at end of file
diff --git a/chrome/android/java/res/layout/main.xml b/chrome/android/java/res/layout/main.xml index 41833fa..dcada2ce 100644 --- a/chrome/android/java/res/layout/main.xml +++ b/chrome/android/java/res/layout/main.xml
@@ -34,6 +34,13 @@ android:layout_height="@dimen/keyboard_accessory_height" android:layout_width="match_parent" android:layout_gravity="start|bottom"/> + <ViewStub + android:id="@+id/keyboard_accessory_sheet_stub" + android:inflatedId="@+id/keyboard_accessory" + android:layout="@layout/keyboard_accessory_sheet" + android:layout_height="@dimen/keyboard_accessory_sheet_height" + android:layout_width="match_parent" + android:layout_gravity="start|bottom"/> </org.chromium.chrome.browser.snackbar.BottomContainer>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 9db549e..b357ac0 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -123,11 +123,12 @@ <dimen name="overlay_panel_bar_height">56dp</dimen> <!-- Autofill keyboard accessory dimensions --> - <dimen name="keyboard_accessory_chip_height">32dp</dimen> - <dimen name="keyboard_accessory_half_padding">4dp</dimen> - <dimen name="keyboard_accessory_height">48dp</dimen> - <dimen name="keyboard_accessory_padding">8dp</dimen> - <dimen name="keyboard_accessory_text_size">14sp</dimen> + <dimen name="keyboard_accessory_action_height">28dp</dimen> + <dimen name="keyboard_accessory_half_padding">2dp</dimen> + <dimen name="keyboard_accessory_height">36dp</dimen> + <dimen name="keyboard_accessory_padding">4dp</dimen> + <dimen name="keyboard_accessory_sheet_height">200dp</dimen> + <dimen name="keyboard_accessory_text_size">6sp</dimen> <!-- Password generation popup dimensions --> <dimen name="password_generation_divider_height">1dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java index 352800b..25e3052 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java
@@ -23,6 +23,8 @@ import org.chromium.content.R; import org.chromium.content_public.browser.ActionModeCallbackHelper; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.SelectionPopupController; +import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.PageTransition; /** @@ -32,9 +34,14 @@ private final Tab mTab; private final ActionModeCallbackHelper mHelper; - public ChromeActionModeCallback(Tab tab, ActionModeCallbackHelper helper) { + public ChromeActionModeCallback(Tab tab, WebContents webContents) { mTab = tab; - mHelper = helper; + mHelper = getActionModeCallbackHelper(webContents); + } + + @VisibleForTesting + protected ActionModeCallbackHelper getActionModeCallbackHelper(WebContents webContents) { + return SelectionPopupController.fromWebContents(webContents).getActionModeCallbackHelper(); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetCoordinator.java new file mode 100644 index 0000000..920034d6 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetCoordinator.java
@@ -0,0 +1,48 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import android.view.ViewStub; + +import org.chromium.base.VisibleForTesting; +import org.chromium.chrome.browser.modelutil.LazyViewBinderAdapter; +import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor; + +/** + * Creates and owns all elements which are part of the accessory sheet component. + * It's part of the controller but will mainly forward events (like showing the sheet) and handle + * communication with the {@link ManualFillingController} (e.g. add a tab to trigger the sheet). + * to the {@link AccessorySheetMediator}. + */ +public class AccessorySheetCoordinator { + private final AccessorySheetMediator mMediator; + + /** + * Creates the sheet component by instantiating Model, View and Controller before wiring these + * parts up. + * @param viewStub The view stub that can be inflated into the accessory layout. + */ + public AccessorySheetCoordinator(ViewStub viewStub) { + LazyViewBinderAdapter.StubHolder stubHolder = + new LazyViewBinderAdapter.StubHolder(viewStub); + AccessorySheetModel model = new AccessorySheetModel(); + model.addObserver(new PropertyModelChangeProcessor<>( + model, stubHolder, new LazyViewBinderAdapter<>(new AccessorySheetViewBinder()))); + mMediator = new AccessorySheetMediator(model); + } + + /** + * Returns a {@link KeyboardAccessoryData.Tab} object that is used to display this bottom sheet. + * @return Returns a {@link KeyboardAccessoryData.Tab}. + */ + public KeyboardAccessoryData.Tab getTab() { + return mMediator.getTab(); + } + + @VisibleForTesting + AccessorySheetMediator getMediatorForTesting() { + return mMediator; + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetMediator.java new file mode 100644 index 0000000..0b35a5c --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetMediator.java
@@ -0,0 +1,38 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import org.chromium.base.VisibleForTesting; + +/** + * Contains the controller logic of the AccessorySheet component. + * It communicates with data providers and native backends to update a {@link AccessorySheetModel}. + */ +class AccessorySheetMediator { + private final AccessorySheetModel mModel; + private KeyboardAccessoryData.Tab mTab; + + AccessorySheetMediator(AccessorySheetModel model) { + mModel = model; + } + + KeyboardAccessoryData.Tab getTab() { + if (mTab == null) mTab = new KeyboardAccessoryData.Tab() {}; + return mTab; + } + + @VisibleForTesting + AccessorySheetModel getModelForTesting() { + return mModel; + } + + public void show() { + mModel.setVisible(true); + } + + public void hide() { + mModel.setVisible(false); + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetModel.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetModel.java new file mode 100644 index 0000000..43bec8a --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetModel.java
@@ -0,0 +1,27 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import org.chromium.chrome.browser.modelutil.PropertyObservable; + +/** + * This model holds all view state of the accessory sheet. + * It is updated by the {@link AccessorySheetMediator} and emits notification on which observers + * like the view binder react. + */ +class AccessorySheetModel extends PropertyObservable<AccessorySheetModel.PropertyKey> { + public static class PropertyKey { public static final PropertyKey VISIBLE = new PropertyKey(); } + private boolean mVisible; + + public void setVisible(boolean visible) { + if (mVisible == visible) return; // Nothing to do here: same value. + mVisible = visible; + notifyPropertyChanged(PropertyKey.VISIBLE); + } + + boolean isVisible() { + return mVisible; + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewBinder.java new file mode 100644 index 0000000..96582a6 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewBinder.java
@@ -0,0 +1,36 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import android.view.View; + +import org.chromium.chrome.browser.autofill.keyboard_accessory.AccessorySheetModel.PropertyKey; +import org.chromium.chrome.browser.modelutil.LazyViewBinderAdapter; + +/** + * Observes {@link AccessorySheetModel} changes (like a newly available tab) and triggers the + * {@link AccessorySheetViewBinder} which will modify the view accordingly. + */ +class AccessorySheetViewBinder + implements LazyViewBinderAdapter.SimpleViewBinder<PropertyKey, AccessorySheetModel> { + @Override + public PropertyKey getVisibilityProperty() { + return PropertyKey.VISIBLE; + } + + @Override + public boolean isVisible(AccessorySheetModel model) { + return model.isVisible(); + } + + @Override + public void bind(AccessorySheetModel model, View inflatedView, PropertyKey propertyKey) { + if (propertyKey == PropertyKey.VISIBLE) { + inflatedView.setVisibility(model.isVisible() ? View.VISIBLE : View.GONE); + return; + } + assert false : "Every possible property update needs to be handled!"; + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryCoordinator.java index c4da0b04..2f41d472 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryCoordinator.java
@@ -8,6 +8,8 @@ import org.chromium.base.VisibleForTesting; import org.chromium.chrome.browser.autofill.AutofillKeyboardSuggestions; +import org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryViewBinder.AccessoryViewHolder; +import org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryViewBinder.ActionViewBinder; import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor; import org.chromium.chrome.browser.modelutil.RecyclerViewAdapter; import org.chromium.chrome.browser.modelutil.RecyclerViewModelChangeProcessor; @@ -20,12 +22,8 @@ * or showing the accessory) to the {@link KeyboardAccessoryMediator}. */ public class KeyboardAccessoryCoordinator { - private final KeyboardAccessoryModel mModel = new KeyboardAccessoryModel(); private final KeyboardAccessoryMediator mMediator; - private KeyboardAccessoryViewBinder.AccessoryViewHolder mViewHolder; - private PropertyModelChangeProcessor<KeyboardAccessoryModel, - KeyboardAccessoryViewBinder.AccessoryViewHolder, KeyboardAccessoryModel.PropertyKey> - mModelChangeProcessor; + private AccessoryViewHolder mViewHolder; /** * Initializes the component as soon as the native library is loaded by e.g. starting to listen @@ -34,15 +32,24 @@ * @param viewStub the stub that will become the accessory. */ public KeyboardAccessoryCoordinator(WindowAndroid windowAndroid, ViewStub viewStub) { - mMediator = new KeyboardAccessoryMediator(mModel, windowAndroid); - mViewHolder = new KeyboardAccessoryViewBinder.AccessoryViewHolder(viewStub); - mModelChangeProcessor = new PropertyModelChangeProcessor<>( - mModel, mViewHolder, new KeyboardAccessoryViewBinder()); - mModel.addObserver(mModelChangeProcessor); - mModel.addTabListObserver(new RecyclerViewModelChangeProcessor<>( - new RecyclerViewAdapter<>(mModel.getTabList()))); - mModel.addActionListObserver(new RecyclerViewModelChangeProcessor<>( - new RecyclerViewAdapter<>(mModel.getActionList()))); + KeyboardAccessoryModel model = new KeyboardAccessoryModel(); + mMediator = new KeyboardAccessoryMediator(model, windowAndroid); + + RecyclerViewAdapter< + KeyboardAccessoryModel.SimpleListObservable<KeyboardAccessoryData.Action>, + ActionViewBinder.ViewHolder> actionsAdapter = + new RecyclerViewAdapter<>(model.getActionList(), new ActionViewBinder()); + + mViewHolder = new AccessoryViewHolder(viewStub, actionsAdapter); + PropertyModelChangeProcessor<KeyboardAccessoryModel, AccessoryViewHolder, + KeyboardAccessoryModel.PropertyKey> modelChangeProcessor = + new PropertyModelChangeProcessor<>( + model, mViewHolder, new KeyboardAccessoryViewBinder()); + + model.addObserver(modelChangeProcessor); + model.addTabListObserver(new RecyclerViewModelChangeProcessor<>( + new RecyclerViewAdapter<>(model.getTabList(), null))); + model.addActionListObserver(new RecyclerViewModelChangeProcessor<>(actionsAdapter)); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryData.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryData.java index a498f53..bff27bf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryData.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryData.java
@@ -46,7 +46,18 @@ * The most prominent example hereof is the "Generate Password" action. */ public interface Action { - // E.g. getCaption() or onActionSelected(); + /** + * The delegate is called when the Action is triggered by a user. + */ + interface Delegate { + /** + * When this function is called, a user interacted with the passed action. + * @param action The action that the user interacted with. + */ + void onActionTriggered(Action action); + } + String getCaption(); + Delegate getDelegate(); } private KeyboardAccessoryData() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryView.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryView.java index 244e3d3..44eabd9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryView.java
@@ -7,6 +7,9 @@ import static org.chromium.ui.base.LocalizationUtils.isLayoutRtl; import android.content.Context; +import android.graphics.Rect; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; @@ -26,6 +29,19 @@ */ class KeyboardAccessoryView extends LinearLayout { private HorizontalScrollView mSuggestionsView; + private RecyclerView mActionsView; + + private static class HorizontalDividerItemDecoration extends RecyclerView.ItemDecoration { + private final int mHorizontalMargin; + HorizontalDividerItemDecoration(int horizontalMargin) { + this.mHorizontalMargin = horizontalMargin; + } + @Override + public void getItemOffsets( + Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + outRect.right = mHorizontalMargin; + } + } /** * Constructor for inflating from XML. @@ -39,6 +55,9 @@ super.onFinishInflate(); sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + mActionsView = findViewById(R.id.actions_view); + initializeHorizontalRecyclerView(mActionsView); + mSuggestionsView = findViewById(R.id.suggestions_view); // Apply RTL layout changes to the views childen: @@ -61,6 +80,10 @@ } } + void setActionsAdapter(RecyclerView.Adapter adapter) { + mActionsView.setAdapter(adapter); + } + // TODO(crbug/722897): Check to handle RTL. // TODO(fhorschig): This should use a RecyclerView. The model should contain single suggestions. /** @@ -81,4 +104,21 @@ private void hide() { setVisibility(View.GONE); } + + private void initializeHorizontalRecyclerView(RecyclerView recyclerView) { + // Set horizontal layout. + recyclerView.setLayoutManager( + new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); + + // Create margins between every element. + recyclerView.addItemDecoration(new HorizontalDividerItemDecoration( + getResources().getDimensionPixelSize(R.dimen.keyboard_accessory_padding))); + + // Remove all animations - the accessory shouldn't be visibly built anyway. + recyclerView.setItemAnimator(null); + + int pad = getResources().getDimensionPixelSize(R.dimen.keyboard_accessory_padding); + int halfPad = getResources().getDimensionPixelSize(R.dimen.keyboard_accessory_half_padding); + recyclerView.setPadding(pad, halfPad, pad, halfPad); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewBinder.java index 78ef035..e069a72d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewBinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewBinder.java
@@ -4,10 +4,17 @@ package org.chromium.chrome.browser.autofill.keyboard_accessory; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; import android.view.ViewStub; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryData.Action; import org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryModel.PropertyKey; import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor; +import org.chromium.chrome.browser.modelutil.RecyclerViewAdapter; +import org.chromium.ui.widget.ButtonCompat; import javax.annotation.Nullable; @@ -22,9 +29,15 @@ @Nullable private KeyboardAccessoryView mView; // Remains null until |mViewStub| is inflated. private final ViewStub mViewStub; + private final RecyclerViewAdapter<KeyboardAccessoryModel.SimpleListObservable<Action>, + ActionViewBinder.ViewHolder> mActionsAdapter; - AccessoryViewHolder(ViewStub viewStub) { + AccessoryViewHolder(ViewStub viewStub, + RecyclerViewAdapter<KeyboardAccessoryModel.SimpleListObservable<Action>, + ActionViewBinder.ViewHolder> actionsAdapter) { mViewStub = viewStub; + mActionsAdapter = actionsAdapter; + mActionsAdapter.setViewBinder(new ActionViewBinder()); } @Nullable @@ -34,6 +47,36 @@ public void initializeView() { mView = (KeyboardAccessoryView) mViewStub.inflate(); + mView.setActionsAdapter(mActionsAdapter); + } + } + + static class ActionViewBinder implements RecyclerViewAdapter.ViewBinder< + KeyboardAccessoryModel.SimpleListObservable<Action>, ActionViewBinder.ViewHolder> { + static class ViewHolder extends RecyclerView.ViewHolder { + public ViewHolder(ButtonCompat actionView) { + super(actionView); + } + + ButtonCompat getActionView() { + return (ButtonCompat) super.itemView; + } + } + + @Override + public ActionViewBinder.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new ViewHolder( + (ButtonCompat) LayoutInflater.from(parent.getContext()) + .inflate(R.layout.keyboard_accessory_action, parent, false)); + } + + @Override + public void onBindViewHolder(KeyboardAccessoryModel.SimpleListObservable<Action> actions, + ViewHolder holder, int position) { + final Action action = actions.get(position); + holder.getActionView().setText(action.getCaption()); + holder.getActionView().setOnClickListener( + view -> action.getDelegate().onActionTriggered(action)); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingController.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingController.java new file mode 100644 index 0000000..3712f65 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingController.java
@@ -0,0 +1,35 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +// TODO(fhorschig): Inline this class if the setting up/destroying is less overhead than expected. +// TODO(fhorschig): Otherwise, replace the KeyboardAccessorySheet in the ChromeActivity. +/** + * Handles requests to the manual UI for filling passwords, payments and other user data. Ideally, + * the caller has no access to Keyboard accessory or sheet and is only interacting with this + * component. + * For that, it facilitates the communication between {@link KeyboardAccessoryCoordinator} and + * {@link AccessorySheetCoordinator} to add and trigger surfaces that may assist users while filling + * fields. + */ +public class ManualFillingController { + private final KeyboardAccessoryCoordinator mKeyboardAccessoryCoordinator; + + /** + * Creates a the manual filling controller. + * @param keyboardAccessoryCoordinator The keybaord + */ + public ManualFillingController(KeyboardAccessoryCoordinator keyboardAccessoryCoordinator) { + mKeyboardAccessoryCoordinator = keyboardAccessoryCoordinator; + } + + /** + * Links an {@link AccessorySheetCoordinator} to the {@link KeyboardAccessoryCoordinator}. + * @param accessorySheetCoordinator The sheet component to be linked. + */ + public void addAccessorySheet(AccessorySheetCoordinator accessorySheetCoordinator) { + mKeyboardAccessoryCoordinator.addTab(accessorySheetCoordinator.getTab()); + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsAdapter.java index f8aa7e0..c6807e5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsAdapter.java
@@ -74,7 +74,7 @@ ContextualSuggestionsAdapter(Context context, Profile profile, UiConfig uiConfig, SuggestionsUiDelegate uiDelegate, ContextualSuggestionsModel model, ContextMenuManager contextMenuManager) { - super(model.mClusterListObservable); + super(model.mClusterListObservable, null); setViewBinder(new ContextualSuggestionsViewBinder());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java index b0be5b3..e836142 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -660,6 +660,11 @@ tab.addObserver(mTabObserver); tab.addObserver(mTabNavigationEventObserver); + // Let ServiceWorkerPaymentAppBridge observe the opened tab for payment request. + if (mIntentDataProvider.isForPaymentRequest()) { + ServiceWorkerPaymentAppBridge.addTabObserverForPaymentRequestTab(tab); + } + prepareTabBackground(tab); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modelutil/LazyViewBinderAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/modelutil/LazyViewBinderAdapter.java new file mode 100644 index 0000000..17d9f45 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/modelutil/LazyViewBinderAdapter.java
@@ -0,0 +1,90 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.modelutil; + +import android.view.View; +import android.view.ViewStub; + +import javax.annotation.Nullable; + +/** + * Observes updates to a model {@link M} and calls a given {@link SimpleViewBinder} with a lazily + * inflated view whenever a property with key {@link K} has changed. + * The view used by this class is passed in as a {@link ViewStub} wrapped in a {@link StubHolder}. + * The held stub is inflated when the observed model becomes visible for the first time. + * @param <K> The type of property keys which are published by model {@link M}. + * @param <M> The observable model that contains the data which should be should to the view. + */ +public class LazyViewBinderAdapter<K, M extends PropertyObservable<K>> + implements PropertyModelChangeProcessor.ViewBinder<M, LazyViewBinderAdapter.StubHolder, K> { + /** + * Holds a {@link ViewStub} that is inflated by the {@link LazyViewBinderAdapter} which calls a + * {@link SimpleViewBinder}. + */ + public static class StubHolder { + @Nullable + private View mView; // Remains null until |mViewStub| is inflated. + private final ViewStub mViewStub; + + public StubHolder(ViewStub viewStub) { + mViewStub = viewStub; + } + + // TODO(fhorschig): Consider parameterizing this view. + @Nullable + public View getView() { + return mView; + } + + void inflateView() { + mView = mViewStub.inflate(); + } + } + + /** + * A {@link PropertyModelChangeProcessor.ViewBinder} that provides information about when to + * inflate a viewStub managed by a {@link LazyViewBinderAdapter}. + * @param <K> The class of the properties that model {@link M} propagates. + * @param <M> The model holding data about the view and it's visibility. + */ + public interface SimpleViewBinder<K, M> + extends PropertyModelChangeProcessor.ViewBinder<M, View, K> { + /** + * @return The Property that will indicate when this component becomes visible. + */ + K getVisibilityProperty(); + + /** + * Returns whether this component should be visible now. The view binder will inflate the + * given stub if this returns true when the {@link SimpleViewBinder#getVisibilityProperty} + * is updated. + * @param model The model that should contain an observable property about the visibility. + * @return whether this component should be visible now. + */ + boolean isVisible(M model); + } + + private final SimpleViewBinder<K, M> mBinder; + + /** + * Creates the adapter with a {@link SimpleViewBinder} that will be used to determine when to + * inflate the {@link StubHolder} that is passed in by the {@link PropertyModelChangeProcessor}. + * @param binder The binder to be called with the fully inflated view. + */ + public LazyViewBinderAdapter(SimpleViewBinder<K, M> binder) { + mBinder = binder; + } + + @Override + public void bind(M model, StubHolder stubHolder, K propertyKey) { + if (stubHolder.getView() == null) { + if (propertyKey != mBinder.getVisibilityProperty() || !mBinder.isVisible(model)) { + return; // Ignore model changes before the view is shown for the first time. + } + stubHolder.inflateView(); + } + mBinder.bind(model, stubHolder.getView(), propertyKey); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modelutil/RecyclerViewAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/modelutil/RecyclerViewAdapter.java index ce8ff99..134e55c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/modelutil/RecyclerViewAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/modelutil/RecyclerViewAdapter.java
@@ -55,9 +55,11 @@ * Construct a new {@link RecyclerViewAdapter}. * @param model The {@link ListObservable} model used to retrieve items to display in the * {@link RecyclerView}. + * @param viewBinder The {@link ViewBinder} binding this adapter to the view holder. */ - public RecyclerViewAdapter(E model) { + public RecyclerViewAdapter(E model, RecyclerViewAdapter.ViewBinder<E, VH> viewBinder) { mModel = model; + mViewBinder = viewBinder; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java index 21d0be2..bc3041f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
@@ -17,6 +17,9 @@ import org.chromium.base.annotations.JNIAdditionalImport; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeFeatureList; +import org.chromium.chrome.browser.tab.EmptyTabObserver; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.components.payments.OriginSecurityChecker; import org.chromium.content_public.browser.WebContents; import org.chromium.payments.mojom.PaymentDetailsModifier; import org.chromium.payments.mojom.PaymentItem; @@ -236,6 +239,35 @@ nativeAbortPaymentApp(webContents, registrationId, callback); } + /** + * Add observer for the opened payment app window tab so as to validate whether the web + * contents is secure. + * + * @param tab The opened payment app window tab. + */ + public static void addTabObserverForPaymentRequestTab(Tab tab) { + tab.addObserver(new EmptyTabObserver() { + @Override + public void onPageLoadFinished(Tab tab) { + // Notify closing payment app window so as to abort payment if unsecure. + WebContents webContents = tab.getWebContents(); + if (!OriginSecurityChecker.isOriginSecure(webContents.getLastCommittedUrl()) + || (!OriginSecurityChecker.isSchemeCryptographic( + webContents.getLastCommittedUrl()) + && !OriginSecurityChecker.isOriginLocalhostOrFile( + webContents.getLastCommittedUrl())) + || !SslValidityChecker.isSslCertificateValid(webContents)) { + onClosingPaymentAppWindow(webContents); + } + } + }); + } + + /** + * Notify closing the opened payment app window. + * + * @param webContents The web contents in the opened window. + */ public static void onClosingPaymentAppWindow(WebContents webContents) { nativeOnClosingPaymentAppWindow(webContents); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java index 2e2c9052..926bb5f0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -1795,10 +1795,8 @@ R.string.accessibility_content_view)); ContentViewCore cvc = ContentViewCore.create(mThemedApplicationContext, PRODUCT_VERSION, webContents, new TabViewAndroidDelegate(this, cv), cv, getWindowAndroid()); - SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); - ChromeActionModeCallback actionModeCallback = - new ChromeActionModeCallback(this, controller.getActionModeCallbackHelper()); - controller.setActionModeCallback(actionModeCallback); + SelectionPopupController.fromWebContents(webContents) + .setActionModeCallback(new ChromeActionModeCallback(this, webContents)); return cvc; }
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index 0c5d5ed..2380f0f2 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -1230,13 +1230,16 @@ <message name="IDS_DOWNLOAD_LOCATION_NAME_TOO_LONG" desc="Subtitle for download location dialog in the case that the file needs to be renamed because the name is too long."> File name too long </message> - <message name="IDS_DOWNLOAD_LOCATION_NOT_ENOUGH_SPACE" desc="Text on download location dialog in the case that there is not enough space in the chosen location."> + <message name="IDS_DOWNLOAD_LOCATION_NOT_ENOUGH_SPACE" desc="Text on download location dialog and error notification in the case that there is not enough space in the chosen location."> Not enough space </message> + <message name="IDS_DOWNLOAD_LOCATION_NOT_ENOUGH_SPACE_SD_CARD_FULL" desc="Text on download location error notification in the case that there is not enough space on SD card."> + Not enough space on SD card + </message> <message name="IDS_DOWNLOAD_LOCATION_DOWNLOAD_TO_DEFAULT_FOLDER" desc="Subtitle for download location dialog in the case that the download location the user had originally selected is full or not found. We automatically revert back to the default download location and ask the user to confirm that this is ok."> Download to default folder? </message> - <message name="IDS_DOWNLOAD_LOCATION_NO_SD_CARD" desc="Title for download location dialog in the case that the SD card is not found."> + <message name="IDS_DOWNLOAD_LOCATION_NO_SD_CARD" desc="Title for download location dialog and error notification in the case that the SD card is not found."> SD card not found </message> <message name="IDS_DOWNLOAD_LOCATION_NO_SD_CARD_SNACKBAR" desc="Text for the snackbar that shows up in downloads home to let the user know that since the SD card is not found, some of the files may be missing."> @@ -1245,6 +1248,9 @@ <message name="IDS_DOWNLOAD_LOCATION_NO_AVAILABLE_LOCATIONS" desc="Text that indicates to the user that there are no download locations available."> No available download locations </message> + <message name="IDS_DOWNLOAD_LOCATION_NOTIFICATION_RETRY" desc="Text on download location error notification button, to let the user retry the download."> + Retry + </message> <!-- About Chrome preferences --> <message name="IDS_PREFS_ABOUT_CHROME" desc="Title for the About Chrome page. [CHAR-LIMIT=32]"> @@ -2189,6 +2195,9 @@ <message name="IDS_DOWNLOAD_MANAGER_UI_SPACE_USED_GB" desc="String indicating that some amount of storage space on the device has been used by downloads, in gigabytes."> <ph name="gigabytes">%1$3.2f<ex>0.3</ex></ph> GB downloaded </message> + <message name="IDS_DOWNLOAD_MANAGER_UI_SPACE_USING" desc="String indicating the amount of storage space used by downloads out of total available storage."> + Using <ph name="SPACE_USED">%1$s<ex>0.3MB</ex></ph> of <ph name="SPACE_AVAILABLE">%2$s<ex>3 GB</ex></ph> + </message> <message name="IDS_DOWNLOAD_MANAGER_UI_ALL_DOWNLOADS" desc="Indicates that clicking on this button shows all of your downloads."> All </message>
diff --git a/chrome/android/java/strings/android_chrome_strings_grd/IDS_DOWNLOAD_LOCATION_NOTIFICATION_RETRY.png.sha1 b/chrome/android/java/strings/android_chrome_strings_grd/IDS_DOWNLOAD_LOCATION_NOTIFICATION_RETRY.png.sha1 new file mode 100644 index 0000000..f5c00d9 --- /dev/null +++ b/chrome/android/java/strings/android_chrome_strings_grd/IDS_DOWNLOAD_LOCATION_NOTIFICATION_RETRY.png.sha1
@@ -0,0 +1 @@ +50970aed45e2894702a4b6c4f0941c7b06f16439 \ No newline at end of file
diff --git a/chrome/android/java/strings/android_chrome_strings_grd/IDS_DOWNLOAD_LOCATION_NOT_ENOUGH_SPACE_SD_CARD_FULL.png.sha1 b/chrome/android/java/strings/android_chrome_strings_grd/IDS_DOWNLOAD_LOCATION_NOT_ENOUGH_SPACE_SD_CARD_FULL.png.sha1 new file mode 100644 index 0000000..f5c00d9 --- /dev/null +++ b/chrome/android/java/strings/android_chrome_strings_grd/IDS_DOWNLOAD_LOCATION_NOT_ENOUGH_SPACE_SD_CARD_FULL.png.sha1
@@ -0,0 +1 @@ +50970aed45e2894702a4b6c4f0941c7b06f16439 \ No newline at end of file
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index f7e3f2b..2b86c7ca 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -96,12 +96,17 @@ "java/src/org/chromium/chrome/browser/autofill/PasswordGenerationPopupBridge.java", "java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java", "java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java", + "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetCoordinator.java", + "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetMediator.java", + "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetModel.java", "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryCoordinator.java", + "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewBinder.java", "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryData.java", "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryMediator.java", "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryModel.java", "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryView.java", "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewBinder.java", + "java/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingController.java", "java/src/org/chromium/chrome/browser/background_task_scheduler/NativeBackgroundTask.java", "java/src/org/chromium/chrome/browser/banners/AppBannerManager.java", "java/src/org/chromium/chrome/browser/banners/AppBannerUiDelegateAndroid.java", @@ -685,6 +690,7 @@ "java/src/org/chromium/chrome/browser/modaldialog/ModalDialogView.java", "java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java", "java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java", + "java/src/org/chromium/chrome/browser/modelutil/LazyViewBinderAdapter.java", "java/src/org/chromium/chrome/browser/modelutil/ListObservable.java", "java/src/org/chromium/chrome/browser/modelutil/PropertyModelChangeProcessor.java", "java/src/org/chromium/chrome/browser/modelutil/PropertyObservable.java", @@ -1558,6 +1564,7 @@ "javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java", "javatests/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java", "javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewTest.java", + "javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewTest.java", "javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java", "javatests/src/org/chromium/chrome/browser/banners/InstallerDelegateTest.java", "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java", @@ -1959,7 +1966,9 @@ "junit/src/org/chromium/chrome/browser/DisableHistogramsRule.java", "junit/src/org/chromium/chrome/browser/ShortcutHelperTest.java", "junit/src/org/chromium/chrome/browser/SSLClientCertificateRequestTest.java", + "junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetControllerTest.java", "junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryControllerTest.java", + "junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingControllerTest.java", "junit/src/org/chromium/chrome/browser/background_task_scheduler/NativeBackgroundTaskTest.java", "junit/src/org/chromium/chrome/browser/browseractions/BrowserActionsIntentTest.java", "junit/src/org/chromium/chrome/browser/compositor/animation/CompositorAnimatorTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewTest.java new file mode 100644 index 0000000..4f4dd73c --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetViewTest.java
@@ -0,0 +1,69 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertNull; + +import static org.junit.Assert.assertTrue; + +import android.support.test.filters.MediumTest; +import android.view.View; + +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.CommandLineFlags; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.ChromeSwitches; +import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.modelutil.LazyViewBinderAdapter; +import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor; +import org.chromium.chrome.test.ChromeActivityTestRule; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; + +/** + * View tests for the keyboard accessory sheet component. + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +public class AccessorySheetViewTest { + private AccessorySheetModel mModel; + private LazyViewBinderAdapter.StubHolder mStubHolder; + + @Rule + public ChromeActivityTestRule<ChromeTabbedActivity> mActivityTestRule = + new ChromeActivityTestRule<>(ChromeTabbedActivity.class); + + @Before + public void setUp() throws InterruptedException { + mActivityTestRule.startMainActivityOnBlankPage(); + mStubHolder = new LazyViewBinderAdapter.StubHolder( + mActivityTestRule.getActivity().findViewById(R.id.keyboard_accessory_sheet_stub)); + mModel = new AccessorySheetModel(); + mModel.addObserver(new PropertyModelChangeProcessor<>( + mModel, mStubHolder, new LazyViewBinderAdapter<>(new AccessorySheetViewBinder()))); + } + + @Test + @MediumTest + public void testAccessoryVisibilityChangedByModel() { + // Initially, there shouldn't be a view yet. + assertNull(mStubHolder.getView()); + + // After setting the visibility to true, the view should exist and be visible. + ThreadUtils.runOnUiThreadBlocking(() -> mModel.setVisible(true)); + assertNotNull(mStubHolder.getView()); + assertTrue(mStubHolder.getView().getVisibility() == View.VISIBLE); + + // After hiding the view, the view should still exist but be invisible. + ThreadUtils.runOnUiThreadBlocking(() -> mModel.setVisible(false)); + assertNotNull(mStubHolder.getView()); + assertTrue(mStubHolder.getView().getVisibility() != View.VISIBLE); + } +} \ No newline at end of file
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewTest.java index 33af20a..7ce98699 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryViewTest.java
@@ -4,15 +4,27 @@ package org.chromium.chrome.browser.autofill.keyboard_accessory; +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.action.ViewActions.click; +import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist; +import static android.support.test.espresso.assertion.ViewAssertions.matches; +import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; +import static android.support.test.espresso.matcher.ViewMatchers.isRoot; +import static android.support.test.espresso.matcher.ViewMatchers.withText; + import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.R.id; +import static org.chromium.chrome.test.util.ViewUtils.VIEW_GONE; +import static org.chromium.chrome.test.util.ViewUtils.VIEW_INVISIBLE; +import static org.chromium.chrome.test.util.ViewUtils.VIEW_NULL; +import static org.chromium.chrome.test.util.ViewUtils.waitForView; import android.support.test.filters.MediumTest; import android.view.View; +import android.view.ViewGroup; import org.junit.Before; import org.junit.Rule; @@ -21,12 +33,18 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryViewBinder.ActionViewBinder; import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor; +import org.chromium.chrome.browser.modelutil.RecyclerViewAdapter; +import org.chromium.chrome.browser.modelutil.RecyclerViewModelChangeProcessor; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import java.util.concurrent.atomic.AtomicReference; + /** * View tests for the keyboard accessory component. * @@ -41,14 +59,37 @@ public ChromeActivityTestRule<ChromeTabbedActivity> mActivityTestRule = new ChromeActivityTestRule<>(ChromeTabbedActivity.class); + private static KeyboardAccessoryData.Action createTestAction( + String caption, KeyboardAccessoryData.Action.Delegate delegate) { + return new KeyboardAccessoryData.Action() { + @Override + public String getCaption() { + return caption; + } + + @Override + public Delegate getDelegate() { + return delegate; + } + }; + } + @Before public void setUp() throws InterruptedException { mActivityTestRule.startMainActivityOnBlankPage(); - mViewHolder = new KeyboardAccessoryViewBinder.AccessoryViewHolder( - mActivityTestRule.getActivity().findViewById(id.keyboard_accessory_stub)); mModel = new KeyboardAccessoryModel(); + + RecyclerViewAdapter< + KeyboardAccessoryModel.SimpleListObservable<KeyboardAccessoryData.Action>, + ActionViewBinder.ViewHolder> actionsAdapter = + new RecyclerViewAdapter<>(mModel.getActionList(), new ActionViewBinder()); + mViewHolder = new KeyboardAccessoryViewBinder.AccessoryViewHolder( + mActivityTestRule.getActivity().findViewById(R.id.keyboard_accessory_stub), + actionsAdapter); mModel.addObserver(new PropertyModelChangeProcessor<>( mModel, mViewHolder, new KeyboardAccessoryViewBinder())); + + mModel.addActionListObserver(new RecyclerViewModelChangeProcessor<>(actionsAdapter)); } @Test @@ -67,4 +108,74 @@ assertNotNull(mViewHolder.getView()); assertTrue(mViewHolder.getView().getVisibility() != View.VISIBLE); } + + @Test + @MediumTest + public void testClickableActionAddedWhenChangingModel() { + final AtomicReference<Boolean> buttonClicked = new AtomicReference<>(); + final KeyboardAccessoryData.Action testAction = + createTestAction("Test Button", action -> buttonClicked.set(true)); + + ThreadUtils.runOnUiThreadBlocking(() -> { + mModel.setVisible(true); + mModel.getActionList().add(testAction); + }); + + onView(isRoot()).check((root, e) -> waitForView((ViewGroup) root, withText("Test Button"))); + onView(withText("Test Button")).perform(click()); + + assertTrue(buttonClicked.get()); + } + + @Test + @MediumTest + public void testCanAddSingleButtons() { + ThreadUtils.runOnUiThreadBlocking(() -> { + mModel.setVisible(true); + mModel.getActionList().set( + new KeyboardAccessoryData.Action[] {createTestAction("First", action -> {}), + createTestAction("Second", action -> {})}); + }); + + onView(isRoot()).check((root, e) -> waitForView((ViewGroup) root, withText("First"))); + onView(withText("First")).check(matches(isDisplayed())); + onView(withText("Second")).check(matches(isDisplayed())); + + ThreadUtils.runOnUiThreadBlocking(() -> { + mModel.setVisible(true); + mModel.getActionList().add(createTestAction("Third", action -> {})); + }); + + onView(isRoot()).check((root, e) -> waitForView((ViewGroup) root, withText("Third"))); + onView(withText("First")).check(matches(isDisplayed())); + onView(withText("Second")).check(matches(isDisplayed())); + onView(withText("Third")).check(matches(isDisplayed())); + } + + @Test + @MediumTest + public void testCanRemoveSingleButtons() { + ThreadUtils.runOnUiThreadBlocking(() -> { + mModel.setVisible(true); + mModel.getActionList().set( + new KeyboardAccessoryData.Action[] {createTestAction("First", action -> {}), + createTestAction("Second", action -> {}), + createTestAction("Third", action -> {})}); + }); + + onView(isRoot()).check((root, e) -> waitForView((ViewGroup) root, withText("First"))); + onView(withText("First")).check(matches(isDisplayed())); + onView(withText("Second")).check(matches(isDisplayed())); + onView(withText("Third")).check(matches(isDisplayed())); + + ThreadUtils.runOnUiThreadBlocking( + () -> mModel.getActionList().remove(mModel.getActionList().get(1))); + + onView(isRoot()).check((root, e) + -> waitForView((ViewGroup) root, withText("Second"), + VIEW_INVISIBLE | VIEW_GONE | VIEW_NULL)); + onView(withText("First")).check(matches(isDisplayed())); + onView(withText("Second")).check(doesNotExist()); + onView(withText("Third")).check(matches(isDisplayed())); + } } \ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java index dedb68e97a..4a24bfe 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java
@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.content.R; import org.chromium.content_public.browser.ActionModeCallbackHelper; +import org.chromium.content_public.browser.WebContents; import org.chromium.testing.local.LocalRobolectricTestRunner; /** @@ -45,7 +46,18 @@ @Mock private Menu mMenu; - private ChromeActionModeCallback mActionModeCallback; + private class TestChromeActionModeCallback extends ChromeActionModeCallback { + public TestChromeActionModeCallback(Tab tab, ActionModeCallbackHelper helper) { + super(tab, null); + } + + @Override + public ActionModeCallbackHelper getActionModeCallbackHelper(WebContents webContents) { + return mActionModeCallbackHelper; + } + } + + private TestChromeActionModeCallback mActionModeCallback; @Before public void setUp() throws Exception { @@ -55,7 +67,7 @@ RecordUserAction.setDisabledForTests(true); mActionModeCallback = - Mockito.spy(new ChromeActionModeCallback(mTab, mActionModeCallbackHelper)); + Mockito.spy(new TestChromeActionModeCallback(mTab, mActionModeCallbackHelper)); } @After
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetControllerTest.java new file mode 100644 index 0000000..19527e1 --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetControllerTest.java
@@ -0,0 +1,87 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.support.test.filters.SmallTest; +import android.view.ViewStub; +import android.widget.LinearLayout; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.Feature; +import org.chromium.chrome.browser.modelutil.PropertyObservable; + +/** + * Controller tests for the keyboard accessory bottom sheet component. + */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class AccessorySheetControllerTest { + @Mock + private PropertyObservable + .PropertyObserver<AccessorySheetModel.PropertyKey> mMockPropertyObserver; + @Mock + private ViewStub mMockViewStub; + @Mock + private LinearLayout mMockView; + + private AccessorySheetCoordinator mCoordinator; + private AccessorySheetMediator mMediator; + private AccessorySheetModel mModel; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mMockViewStub.inflate()).thenReturn(mMockView); + mCoordinator = new AccessorySheetCoordinator(mMockViewStub); + mMediator = mCoordinator.getMediatorForTesting(); + mModel = mMediator.getModelForTesting(); + } + + @Test + @SmallTest + public void testCreatesValidSubComponents() { + assertThat(mCoordinator, is(notNullValue())); + assertThat(mMediator, is(notNullValue())); + assertThat(mModel, is(notNullValue())); + } + + @Test + @SmallTest + @Feature({"keyboard-accessory"}) + public void testModelNotifiesAboutVisibilityOncePerChange() { + mModel.addObserver(mMockPropertyObserver); + + // Calling show on the mediator should make model propagate that it's visible. + mMediator.show(); + verify(mMockPropertyObserver) + .onPropertyChanged(mModel, AccessorySheetModel.PropertyKey.VISIBLE); + assertThat(mModel.isVisible(), is(true)); + + // Calling show again does nothing. + mMediator.show(); + verify(mMockPropertyObserver) // Still the same call and no new one added. + .onPropertyChanged(mModel, AccessorySheetModel.PropertyKey.VISIBLE); + + // Calling hide on the mediator should make model propagate that it's invisible. + mMediator.hide(); + verify(mMockPropertyObserver, times(2)) + .onPropertyChanged(mModel, AccessorySheetModel.PropertyKey.VISIBLE); + assertThat(mModel.isVisible(), is(false)); + } +} \ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryControllerTest.java index 5ec66303..230d07a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryControllerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryControllerTest.java
@@ -74,7 +74,16 @@ } private static class FakeTab implements KeyboardAccessoryData.Tab {} - private static class FakeAction implements KeyboardAccessoryData.Action {} + private static class FakeAction implements KeyboardAccessoryData.Action { + @Override + public String getCaption() { + return null; + } + @Override + public Delegate getDelegate() { + return null; + } + } private KeyboardAccessoryCoordinator mCoordinator; private KeyboardAccessoryModel mModel;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingControllerTest.java new file mode 100644 index 0000000..db7001d --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingControllerTest.java
@@ -0,0 +1,73 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill.keyboard_accessory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.support.test.filters.SmallTest; +import android.view.ViewStub; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.chrome.browser.modelutil.ListObservable; +import org.chromium.ui.base.WindowAndroid; + +/** + * Controller tests for the root controller for interactions with the manual filling UI. + */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class ManualFillingControllerTest { + @Mock + private WindowAndroid mMockWindow; + @Mock + private ViewStub mMockViewStub; + @Mock + private KeyboardAccessoryView mMockView; + @Mock + private ListObservable.ListObserver mMockTabListObserver; + + private KeyboardAccessoryCoordinator mKeyboardAccessory; + private ManualFillingController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mMockViewStub.inflate()).thenReturn(mMockView); + mKeyboardAccessory = new KeyboardAccessoryCoordinator(mMockWindow, mMockViewStub); + mController = new ManualFillingController(mKeyboardAccessory); + } + + @Test + @SmallTest + public void testCreatesValidSubComponents() { + assertThat(mKeyboardAccessory, is(notNullValue())); + assertThat(mController, is(notNullValue())); + } + + @Test + @SmallTest + public void testAddingBottomSheetsAddsTabsToAccessory() { + KeyboardAccessoryModel keyboardAccessoryModel = + mKeyboardAccessory.getMediatorForTesting().getModelForTesting(); + keyboardAccessoryModel.addTabListObserver(mMockTabListObserver); + + assertThat(keyboardAccessoryModel.getTabList().getItemCount(), is(0)); + mController.addAccessorySheet(new AccessorySheetCoordinator(mMockViewStub)); + + verify(mMockTabListObserver).onItemRangeInserted(keyboardAccessoryModel.getTabList(), 0, 1); + assertThat(keyboardAccessoryModel.getTabList().getItemCount(), is(1)); + } +} \ No newline at end of file
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index d00ca44..db2bd6a 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS
@@ -209,6 +209,10 @@ ] specific_include_rules = { + "browser_process_platform_part_chromeos\.cc": [ + # AshService is necessary while Ash runs in process. + "+ash/ash_service.h", + ], # TODO(mash): see bugs 768439 and 768395. "exo_parts\.cc": [ "+ash/shell.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index c1ed29d..cfc2239 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1057,8 +1057,6 @@ const FeatureEntry::Choice kAsyncImageDecodingChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, - {flags_ui::kGenericExperimentChoiceEnabled, - cc::switches::kEnableCheckerImaging, ""}, {flags_ui::kGenericExperimentChoiceDisabled, cc::switches::kDisableCheckerImaging, ""}, };
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn index bbb0492..2343c80b 100644 --- a/chrome/browser/android/vr/BUILD.gn +++ b/chrome/browser/android/vr/BUILD.gn
@@ -41,8 +41,6 @@ "mailbox_to_surface_bridge.h", "metrics_util_android.cc", "metrics_util_android.h", - "scoped_gpu_trace.cc", - "scoped_gpu_trace.h", "vr_controller.cc", "vr_controller.h", "vr_core_info.cc",
diff --git a/chrome/browser/android/vr/scoped_gpu_trace.cc b/chrome/browser/android/vr/scoped_gpu_trace.cc deleted file mode 100644 index 8d09edb0..0000000 --- a/chrome/browser/android/vr/scoped_gpu_trace.cc +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/android/vr/scoped_gpu_trace.h" - -#include "base/threading/platform_thread.h" -#include "base/trace_event/trace_event.h" -#include "ui/gl/gl_fence_android_native_fence_sync.h" - -namespace vr { - -uint32_t ScopedGpuTrace::s_trace_id_ = 0; - -ScopedGpuTrace::ScopedGpuTrace(const char* categoray, const char* name) - : start_time_(base::TimeTicks::Now()), - fence_(gl::GLFenceAndroidNativeFenceSync::CreateForGpuFence()), - categoray_(categoray), - name_(name), - trace_id_(s_trace_id_++) {} - -ScopedGpuTrace::~ScopedGpuTrace() { - DCHECK(fence_->HasCompleted()); - base::TimeTicks end_time = fence_->GetStatusChangeTime(); - if (end_time.is_null()) - return; - - TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( - categoray_, name_, trace_id_, base::PlatformThread::CurrentId(), - start_time_); - TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0(categoray_, name_, trace_id_, - base::PlatformThread::CurrentId(), - end_time); -} - -} // namespace vr
diff --git a/chrome/browser/android/vr/scoped_gpu_trace.h b/chrome/browser/android/vr/scoped_gpu_trace.h deleted file mode 100644 index cd593fa..0000000 --- a/chrome/browser/android/vr/scoped_gpu_trace.h +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ANDROID_VR_SCOPED_GPU_TRACE_H_ -#define CHROME_BROWSER_ANDROID_VR_SCOPED_GPU_TRACE_H_ - -#include <memory> -#include <string> - -#include "base/macros.h" -#include "base/time/time.h" - -namespace gl { -class GLFenceAndroidNativeFenceSync; -} - -namespace vr { - -// Helper class to trace GPU work. -// It creates a fence in the constructor and extracts the time when the fence -// completed in the destructor. The duration is reported to trace. It assumes -// that fence has completed when destructor is triggered. If for some reason it -// failed to extract fence completion time, no trace event will be recorded. -// NB: This class is not thread safe due to static id generation. If you need to -// use it on different threads, consider a thread safe id generator. -class ScopedGpuTrace { - public: - ScopedGpuTrace(const char* categoray, const char* name); - - virtual ~ScopedGpuTrace(); - - private: - // Not thread safe. - static uint32_t s_trace_id_; - base::TimeTicks start_time_; - std::unique_ptr<gl::GLFenceAndroidNativeFenceSync> fence_; - const char* const categoray_; - const char* const name_; - uint32_t trace_id_; - - DISALLOW_COPY_AND_ASSIGN(ScopedGpuTrace); -}; - -} // namespace vr - -#endif // CHROME_BROWSER_ANDROID_VR_SCOPED_GPU_TRACE_H_
diff --git a/chrome/browser/android/vr/vr_shell_delegate.cc b/chrome/browser/android/vr/vr_shell_delegate.cc index 5d7cf5a..2f71c95 100644 --- a/chrome/browser/android/vr/vr_shell_delegate.cc +++ b/chrome/browser/android/vr/vr_shell_delegate.cc
@@ -351,12 +351,12 @@ JNIEnv* env, const JavaParamRef<jclass>& clazz) { device::GvrDelegateProviderFactory::Install( - new VrShellDelegateProviderFactory); + std::make_unique<VrShellDelegateProviderFactory>()); // TODO(https://crbug.com/837965): Move this to an ARCore-specific location // with similar timing (occurs before VRDeviceManager is initialized). device::ARCoreDeviceProviderFactory::Install( - new ARCoreDeviceProviderFactoryImpl); + std::make_unique<ARCoreDeviceProviderFactoryImpl>()); } static void JNI_VrShellDelegate_RegisterVrAssetsComponent(
diff --git a/chrome/browser/android/vr/vr_shell_gl.cc b/chrome/browser/android/vr/vr_shell_gl.cc index 78e12136..886476c 100644 --- a/chrome/browser/android/vr/vr_shell_gl.cc +++ b/chrome/browser/android/vr/vr_shell_gl.cc
@@ -25,7 +25,6 @@ #include "chrome/browser/android/vr/gvr_util.h" #include "chrome/browser/android/vr/mailbox_to_surface_bridge.h" #include "chrome/browser/android/vr/metrics_util_android.h" -#include "chrome/browser/android/vr/scoped_gpu_trace.h" #include "chrome/browser/android/vr/vr_controller.h" #include "chrome/browser/android/vr/vr_shell.h" #include "chrome/browser/vr/assets_loader.h" @@ -1874,7 +1873,6 @@ gvr::Mat4f mat; TransformToGvrMat(head_pose, &mat); - bool is_webvr_frame = frame_index >= 0; { TRACE_EVENT0("gpu", "VrShellGl::SubmitToGvr"); base::TimeTicks submit_start = base::TimeTicks::Now(); @@ -1882,14 +1880,6 @@ base::TimeTicks submit_done = base::TimeTicks::Now(); webvr_submit_time_.AddSample(submit_done - submit_start); CHECK(!acquired_frame_); - - if (gl::GLFence::IsGpuFenceSupported() && !is_webvr_frame) { - // This instance is created for the tracing side effect. Create a new - // instance here to replace previous instace will record trace for - // previous instance and start a new trace for the new instance. - gpu_trace_ = std::make_unique<ScopedGpuTrace>( - "gpu", "VrShellGl::PostSubmitDrawOnGpu"); - } } // No need to swap buffers for surfaceless rendering. @@ -1903,6 +1893,7 @@ // false for a WebVR frame. Ignore the ShouldDrawWebVr status to ensure we // send render notifications while paused for exclusive UI mode. Skip the // steps if we lost the processing state, that means presentation has ended. + bool is_webvr_frame = frame_index >= 0; if (is_webvr_frame && webxr_->HaveProcessingFrame()) { // Report rendering completion to the Renderer so that it's permitted to // submit a fresh frame. We could do this earlier, as soon as the frame
diff --git a/chrome/browser/android/vr/vr_shell_gl.h b/chrome/browser/android/vr/vr_shell_gl.h index 9059ded5..62e3331 100644 --- a/chrome/browser/android/vr/vr_shell_gl.h +++ b/chrome/browser/android/vr/vr_shell_gl.h
@@ -60,7 +60,6 @@ class FPSMeter; class GlBrowserInterface; class MailboxToSurfaceBridge; -class ScopedGpuTrace; class SlidingTimeDeltaAverage; class Ui; class VrController; @@ -481,7 +480,6 @@ // A fence used to avoid overstuffed GVR buffers in WebVR mode. std::unique_ptr<gl::GLFenceEGL> webvr_prev_frame_completion_fence_; - std::unique_ptr<ScopedGpuTrace> gpu_trace_; // The default size for the render buffers. gfx::Size render_size_default_;
diff --git a/chrome/browser/browser_process_platform_part_chromeos.cc b/chrome/browser/browser_process_platform_part_chromeos.cc index f131a5e..f09f5088 100644 --- a/chrome/browser/browser_process_platform_part_chromeos.cc +++ b/chrome/browser/browser_process_platform_part_chromeos.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/ash_service.h" #include "ash/public/interfaces/constants.mojom.h" #include "base/logging.h" #include "base/time/default_tick_clock.h" @@ -193,11 +194,9 @@ } if (!ash_util::IsRunningInMash()) { - service_manager::EmbeddedServiceInfo info; - info.factory = base::Bind(&ash_util::CreateEmbeddedAshService, - base::ThreadTaskRunnerHandle::Get()); - info.task_runner = base::ThreadTaskRunnerHandle::Get(); - services->insert(std::make_pair(ash::mojom::kServiceName, info)); + services->insert( + std::make_pair(ash::mojom::kServiceName, + ash::AshService::CreateEmbeddedServiceInfo())); } }
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 62a28a6c..af85ebe 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -240,8 +240,8 @@ "accessibility/magnification_manager.h", "accessibility/select_to_speak_event_handler.cc", "accessibility/select_to_speak_event_handler.h", - "accessibility/spoken_feedback_event_rewriter_delegate.cc", - "accessibility/spoken_feedback_event_rewriter_delegate.h", + "accessibility/spoken_feedback_event_rewriter.cc", + "accessibility/spoken_feedback_event_rewriter.h", "accessibility/switch_access_event_handler.cc", "accessibility/switch_access_event_handler.h", "app_mode/app_launch_utils.cc", @@ -1834,6 +1834,7 @@ "../policy/default_geolocation_policy_handler_unittest.cc", "../ui/browser_finder_chromeos_unittest.cc", "accessibility/select_to_speak_event_handler_unittest.cc", + "accessibility/spoken_feedback_event_rewriter_unittest.cc", "app_mode/startup_app_launcher_unittest.cc", "apps/intent_helper/apps_navigation_throttle_unittest.cc", "arc/accessibility/arc_accessibility_helper_bridge_unittest.cc",
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.cc new file mode 100644 index 0000000..6ac01750 --- /dev/null +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.cc
@@ -0,0 +1,111 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h" + +#include <string> +#include <utility> + +#include "ash/shell.h" +#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" +#include "chrome/browser/chromeos/accessibility/event_handler_common.h" +#include "chrome/common/extensions/extension_constants.h" +#include "content/public/browser/web_contents.h" +#include "extensions/browser/event_router.h" +#include "extensions/browser/extension_host.h" +#include "ui/aura/window_tree_host.h" +#include "ui/content_accelerators/accelerator_util.h" +#include "ui/events/event.h" +#include "ui/events/event_sink.h" + +SpokenFeedbackEventRewriterDelegate::SpokenFeedbackEventRewriterDelegate() {} + +bool SpokenFeedbackEventRewriterDelegate::IsSpokenFeedbackEnabled() const { + return chromeos::AccessibilityManager::Get()->IsSpokenFeedbackEnabled(); +} + +bool SpokenFeedbackEventRewriterDelegate::DispatchKeyEventToChromeVox( + const ui::KeyEvent& key_event, + bool capture) { + // Always capture the Search key. + capture |= key_event.IsCommandDown(); + + // Don't capture tab as it gets consumed by Blink so never comes back + // unhandled. In third_party/WebKit/Source/core/input/EventHandler.cpp, a + // default tab handler consumes tab even when no focusable nodes are found; it + // sets focus to Chrome and eats the event. + if (key_event.GetDomKey() == ui::DomKey::TAB) + capture = false; + + extensions::ExtensionHost* host = chromeos::GetAccessibilityExtensionHost( + extension_misc::kChromeVoxExtensionId); + if (!host) + return false; + + // Listen for any unhandled keyboard events from ChromeVox's background page + // when capturing keys to reinject. + if (capture) + host->host_contents()->SetDelegate(this); + else + host->host_contents()->SetDelegate(nullptr); + + // Forward all key events to ChromeVox's background page. + chromeos::ForwardKeyToExtension(key_event, host); + + return capture; +} + +void SpokenFeedbackEventRewriterDelegate::HandleKeyboardEvent( + content::WebContents* source, + const content::NativeWebKeyboardEvent& event) { + ui::KeyEvent key_event(*static_cast<ui::KeyEvent*>(event.os_event)); + + ui::EventSink* sink = + ash::Shell::GetPrimaryRootWindow()->GetHost()->event_sink(); + + if (sink->OnEventFromSource(&key_event).dispatcher_destroyed) { + VLOG(0) << "Undispatched key " << key_event.key_code() + << " due to destroyed dispatcher."; + } +} + +SpokenFeedbackEventRewriter::SpokenFeedbackEventRewriter() { + delegate_.reset(new SpokenFeedbackEventRewriterDelegate()); +} + +SpokenFeedbackEventRewriter::~SpokenFeedbackEventRewriter() {} + +void SpokenFeedbackEventRewriter::SetDelegateForTest( + std::unique_ptr<SpokenFeedbackEventRewriterDelegate> delegate) { + delegate_ = std::move(delegate); +} + +ui::EventRewriteStatus SpokenFeedbackEventRewriter::RewriteEvent( + const ui::Event& event, + std::unique_ptr<ui::Event>* new_event) { + if (!delegate_->IsSpokenFeedbackEnabled()) + return ui::EVENT_REWRITE_CONTINUE; + + if ((event.type() != ui::ET_KEY_PRESSED && + event.type() != ui::ET_KEY_RELEASED)) + return ui::EVENT_REWRITE_CONTINUE; + + std::string extension_id = + chromeos::AccessibilityManager::Get()->keyboard_listener_extension_id(); + if (extension_id.empty()) + return ui::EVENT_REWRITE_CONTINUE; + + bool capture = + chromeos::AccessibilityManager::Get()->keyboard_listener_capture(); + const ui::KeyEvent key_event = static_cast<const ui::KeyEvent&>(event); + if (delegate_->DispatchKeyEventToChromeVox(key_event, capture)) + return ui::EVENT_REWRITE_DISCARD; + return ui::EVENT_REWRITE_CONTINUE; +} + +ui::EventRewriteStatus SpokenFeedbackEventRewriter::NextDispatchEvent( + const ui::Event& last_event, + std::unique_ptr<ui::Event>* new_event) { + return ui::EVENT_REWRITE_CONTINUE; +}
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h new file mode 100644 index 0000000..1b2a4e0 --- /dev/null +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h
@@ -0,0 +1,68 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SPOKEN_FEEDBACK_EVENT_REWRITER_H_ +#define CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SPOKEN_FEEDBACK_EVENT_REWRITER_H_ + +#include <vector> + +#include "base/macros.h" +#include "content/public/browser/web_contents_delegate.h" +#include "ui/events/event_rewriter.h" + +namespace ui { +class KeyEvent; +} + +// Receives requests for spoken feedback enabled state and command dispatch. +class SpokenFeedbackEventRewriterDelegate + : public content::WebContentsDelegate { + public: + SpokenFeedbackEventRewriterDelegate(); + ~SpokenFeedbackEventRewriterDelegate() override {} + + // Returns true when ChromeVox is enabled. + virtual bool IsSpokenFeedbackEnabled() const; + + // Returns true when |key_event| is dispatched to ChromeVox. + virtual bool DispatchKeyEventToChromeVox(const ui::KeyEvent& key_event, + bool capture); + + // WebContentsDelegate: + void HandleKeyboardEvent( + content::WebContents* source, + const content::NativeWebKeyboardEvent& event) override; + + private: + DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriterDelegate); +}; + +// SpokenFeedbackEventRewriter discards all keyboard events mapped by the spoken +// feedback manifest commands block. It dispatches the associated command name +// directly to spoken feedback. This only occurs whenever spoken feedback is +// enabled. +class SpokenFeedbackEventRewriter : public ui::EventRewriter { + public: + SpokenFeedbackEventRewriter(); + ~SpokenFeedbackEventRewriter() override; + + void SetDelegateForTest( + std::unique_ptr<SpokenFeedbackEventRewriterDelegate> delegate); + + private: + // EventRewriter: + ui::EventRewriteStatus RewriteEvent( + const ui::Event& event, + std::unique_ptr<ui::Event>* new_event) override; + ui::EventRewriteStatus NextDispatchEvent( + const ui::Event& last_event, + std::unique_ptr<ui::Event>* new_event) override; + + // Active delegate (used for testing). + std::unique_ptr<SpokenFeedbackEventRewriterDelegate> delegate_; + + DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriter); +}; + +#endif // CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SPOKEN_FEEDBACK_EVENT_REWRITER_H_
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.cc deleted file mode 100644 index d1d46b6..0000000 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.cc +++ /dev/null
@@ -1,98 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.h" - -#include "ash/public/interfaces/constants.mojom.h" -#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" -#include "chrome/browser/chromeos/accessibility/event_handler_common.h" -#include "chrome/common/extensions/extension_constants.h" -#include "content/public/browser/native_web_keyboard_event.h" -#include "content/public/browser/web_contents.h" -#include "content/public/common/service_manager_connection.h" -#include "extensions/browser/extension_host.h" -#include "services/service_manager/public/cpp/connector.h" -#include "ui/events/event.h" - -SpokenFeedbackEventRewriterDelegate::SpokenFeedbackEventRewriterDelegate() - : binding_(this) { - content::ServiceManagerConnection* connection = - content::ServiceManagerConnection::GetForProcess(); - connection->GetConnector()->BindInterface(ash::mojom::kServiceName, - &event_rewriter_controller_ptr_); - // Set this object as the SpokenFeedbackEventRewriterDelegate. - ash::mojom::SpokenFeedbackEventRewriterDelegatePtr ptr; - binding_.Bind(mojo::MakeRequest(&ptr)); - event_rewriter_controller_ptr_->SetSpokenFeedbackEventRewriterDelegate( - std::move(ptr)); -} - -SpokenFeedbackEventRewriterDelegate::~SpokenFeedbackEventRewriterDelegate() {} - -void SpokenFeedbackEventRewriterDelegate::DispatchKeyEventToChromeVox( - std::unique_ptr<ui::Event> event) { - if (!ShouldDispatchKeyEventToChromeVox(event.get())) { - OnUnhandledSpokenFeedbackEvent(std::move(event)); - return; - } - - bool capture = - chromeos::AccessibilityManager::Get()->keyboard_listener_capture(); - const ui::KeyEvent* key_event = event->AsKeyEvent(); - - // Always capture the Search key. - capture |= key_event->IsCommandDown(); - - // Don't capture tab as it gets consumed by Blink so never comes back - // unhandled. In third_party/WebKit/Source/core/input/EventHandler.cpp, a - // default tab handler consumes tab even when no focusable nodes are found; it - // sets focus to Chrome and eats the event. - if (key_event->GetDomKey() == ui::DomKey::TAB) - capture = false; - - extensions::ExtensionHost* host = chromeos::GetAccessibilityExtensionHost( - extension_misc::kChromeVoxExtensionId); - // Listen for any unhandled keyboard events from ChromeVox's background page - // when capturing keys to reinject. - host->host_contents()->SetDelegate(capture ? this : nullptr); - - // Forward the event to ChromeVox's background page. - chromeos::ForwardKeyToExtension(*key_event, host); - - if (!capture) - OnUnhandledSpokenFeedbackEvent(std::move(event)); -} - -bool SpokenFeedbackEventRewriterDelegate::ShouldDispatchKeyEventToChromeVox( - const ui::Event* event) const { - chromeos::AccessibilityManager* accessibility_manager = - chromeos::AccessibilityManager::Get(); - if (!accessibility_manager->IsSpokenFeedbackEnabled() || - accessibility_manager->keyboard_listener_extension_id().empty() || - !chromeos::GetAccessibilityExtensionHost( - extension_misc::kChromeVoxExtensionId)) { - VLOG(1) << "Event sent to Spoken Feedback when disabled or unavailable"; - return false; - } - - if (!event || !event->IsKeyEvent()) { - NOTREACHED() << "Unexpected event sent to Spoken Feedback"; - return false; - } - - return true; -} - -void SpokenFeedbackEventRewriterDelegate::OnUnhandledSpokenFeedbackEvent( - std::unique_ptr<ui::Event> event) const { - event_rewriter_controller_ptr_->OnUnhandledSpokenFeedbackEvent( - std::move(event)); -} - -void SpokenFeedbackEventRewriterDelegate::HandleKeyboardEvent( - content::WebContents* source, - const content::NativeWebKeyboardEvent& event) { - OnUnhandledSpokenFeedbackEvent( - ui::Event::Clone(*static_cast<ui::Event*>(event.os_event))); -}
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.h b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.h deleted file mode 100644 index cb3246f..0000000 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.h +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SPOKEN_FEEDBACK_EVENT_REWRITER_DELEGATE_H_ -#define CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SPOKEN_FEEDBACK_EVENT_REWRITER_DELEGATE_H_ - -#include <memory> - -#include "ash/public/interfaces/event_rewriter_controller.mojom.h" -#include "base/macros.h" -#include "content/public/browser/web_contents_delegate.h" -#include "mojo/public/cpp/bindings/binding.h" - -// Passes key events from Ash's EventRewriter to the ChromeVox extension code. -// Reports ChromeVox's unhandled key events back to Ash for continued dispatch. -// TODO(http://crbug.com/839541): Avoid reposting unhandled events. -class SpokenFeedbackEventRewriterDelegate - : public ash::mojom::SpokenFeedbackEventRewriterDelegate, - public content::WebContentsDelegate { - public: - SpokenFeedbackEventRewriterDelegate(); - ~SpokenFeedbackEventRewriterDelegate() override; - - // ui::mojom::SpokenFeedbackEventRewriterDelegate: - void DispatchKeyEventToChromeVox(std::unique_ptr<ui::Event> event) override; - - private: - // Returns whether the event should be dispatched to the ChromeVox extension. - bool ShouldDispatchKeyEventToChromeVox(const ui::Event* event) const; - - // Reports unhandled key events to the EventRewriterController for dispatch. - void OnUnhandledSpokenFeedbackEvent(std::unique_ptr<ui::Event> event) const; - - // WebContentsDelegate: - void HandleKeyboardEvent( - content::WebContents* source, - const content::NativeWebKeyboardEvent& event) override; - - ash::mojom::EventRewriterControllerPtr event_rewriter_controller_ptr_; - - mojo::Binding<ash::mojom::SpokenFeedbackEventRewriterDelegate> binding_; - - DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriterDelegate); -}; - -#endif // CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SPOKEN_FEEDBACK_EVENT_REWRITER_DELEGATE_H_
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_unittest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_unittest.cc new file mode 100644 index 0000000..dab4e61c0 --- /dev/null +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_unittest.cc
@@ -0,0 +1,135 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h" + +#include <memory> +#include <vector> + +#include "ash/shell.h" +#include "ash/test/ash_test_base.h" +#include "base/macros.h" +#include "ui/aura/window.h" +#include "ui/aura/window_tree_host.h" +#include "ui/events/event.h" +#include "ui/events/event_constants.h" +#include "ui/events/keycodes/keyboard_codes.h" +#include "ui/events/test/event_generator.h" + +// Records all key events. +class EventCapturer : public ui::EventHandler { + public: + EventCapturer() {} + ~EventCapturer() override {} + + void Reset() { events_.clear(); } + + void OnEvent(ui::Event* event) override { + if (event->IsKeyEvent()) + events_.push_back(std::make_unique<ui::KeyEvent>(*event->AsKeyEvent())); + } + + const std::vector<std::unique_ptr<ui::KeyEvent>>& captured_events() const { + return events_; + } + + private: + std::vector<std::unique_ptr<ui::KeyEvent>> events_; + + DISALLOW_COPY_AND_ASSIGN(EventCapturer); +}; + +class TestDelegate : public SpokenFeedbackEventRewriterDelegate { + public: + TestDelegate() + : is_spoken_feedback_enabled_(false), dispatch_result_(false) {} + + ~TestDelegate() override {} + + void set_is_spoken_feedback_enabled(bool enabled) { + is_spoken_feedback_enabled_ = enabled; + } + + void set_dispatch_result(bool result) { dispatch_result_ = result; } + + private: + // SpokenFeedbackEventRewriterDelegate: + bool IsSpokenFeedbackEnabled() const override { + return is_spoken_feedback_enabled_; + } + + bool DispatchKeyEventToChromeVox(const ui::KeyEvent& key_event, + bool capture) override { + return dispatch_result_; + } + + bool is_spoken_feedback_enabled_; + bool dispatch_result_; + + DISALLOW_COPY_AND_ASSIGN(TestDelegate); +}; + +class SpokenFeedbackEventRewriterTest : public ash::AshTestBase { + public: + SpokenFeedbackEventRewriterTest() + : generator_(nullptr), + spoken_feedback_event_rewriter_(new SpokenFeedbackEventRewriter()) { + delegate_ = new TestDelegate(); + spoken_feedback_event_rewriter_->SetDelegateForTest( + std::unique_ptr<TestDelegate>(delegate_)); + } + + void SetUp() override { + ash::AshTestBase::SetUp(); + generator_ = &AshTestBase::GetEventGenerator(); + CurrentContext()->AddPreTargetHandler(&event_capturer_); + CurrentContext()->GetHost()->GetEventSource()->AddEventRewriter( + spoken_feedback_event_rewriter_.get()); + } + + void TearDown() override { + CurrentContext()->GetHost()->GetEventSource()->RemoveEventRewriter( + spoken_feedback_event_rewriter_.get()); + CurrentContext()->RemovePreTargetHandler(&event_capturer_); + generator_ = nullptr; + ash::AshTestBase::TearDown(); + } + + protected: + TestDelegate* delegate_; + ui::test::EventGenerator* generator_; + EventCapturer event_capturer_; + + private: + std::unique_ptr<SpokenFeedbackEventRewriter> spoken_feedback_event_rewriter_; + + DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriterTest); +}; + +TEST_F(SpokenFeedbackEventRewriterTest, KeysNotEatenWithChromeVoxDisabled) { + // Send Search+Shift+Right. + generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); + ASSERT_EQ(1U, event_capturer_.captured_events().size()); + generator_->PressKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN); + ASSERT_EQ(2U, event_capturer_.captured_events().size()); + + // Mock successful commands lookup and dispatch; shouldn't matter either way. + delegate_->set_dispatch_result(true); + generator_->PressKey(ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN); + ASSERT_EQ(3U, event_capturer_.captured_events().size()); + + // Released keys shouldn't get eaten. + delegate_->set_dispatch_result(false); + generator_->ReleaseKey(ui::VKEY_RIGHT, + ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN); + generator_->ReleaseKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN); + generator_->ReleaseKey(ui::VKEY_LWIN, 0); + ASSERT_EQ(6U, event_capturer_.captured_events().size()); + + // Try releasing more keys. + generator_->ReleaseKey(ui::VKEY_RIGHT, 0); + generator_->ReleaseKey(ui::VKEY_SHIFT, 0); + generator_->ReleaseKey(ui::VKEY_LWIN, 0); + ASSERT_EQ(9U, event_capturer_.captured_events().size()); +}
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 3bacb389..f62027c 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -37,7 +37,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/accessibility/magnification_manager.h" -#include "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_delegate.h" +#include "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h" #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" @@ -1028,14 +1028,12 @@ event_rewriter_controller_ptr->SetKeyboardDrivenEventRewriterEnabled(true); } - // Construct a delegate to connect ChromeVox and SpokenFeedbackEventRewriter. - spoken_feedback_event_rewriter_delegate_ = - std::make_unique<SpokenFeedbackEventRewriterDelegate>(); - if (chromeos::GetAshConfig() != ash::Config::MASH) { // TODO(mash): Support EventRewriterController; see crbug.com/647781 ash::EventRewriterController* event_rewriter_controller = ash::Shell::Get()->event_rewriter_controller(); + event_rewriter_controller->AddEventRewriter( + std::unique_ptr<ui::EventRewriter>(new SpokenFeedbackEventRewriter())); event_rewriter_delegate_ = std::make_unique<EventRewriterDelegateImpl>(); event_rewriter_controller->AddEventRewriter( std::make_unique<ui::EventRewriterChromeOS>(
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.h b/chrome/browser/chromeos/chrome_browser_main_chromeos.h index 6860dec..4bbb667 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.h +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.h
@@ -16,7 +16,6 @@ #include "chromeos/system/version_loader.h" class NotificationPlatformBridge; -class SpokenFeedbackEventRewriterDelegate; namespace lock_screen_apps { class StateController; @@ -108,10 +107,6 @@ std::unique_ptr<EventRewriterDelegateImpl> event_rewriter_delegate_; - // Handles event dispatch to the spoken feedback extension (ChromeVox). - std::unique_ptr<SpokenFeedbackEventRewriterDelegate> - spoken_feedback_event_rewriter_delegate_; - scoped_refptr<chromeos::ExternalMetrics> external_metrics_; std::unique_ptr<arc::ArcServiceLauncher> arc_service_launcher_;
diff --git a/chrome/browser/chromeos/printing/printer_configurer.cc b/chrome/browser/chromeos/printing/printer_configurer.cc index 51857ae..eaac664 100644 --- a/chrome/browser/chromeos/printing/printer_configurer.cc +++ b/chrome/browser/chromeos/printing/printer_configurer.cc
@@ -26,6 +26,7 @@ #include "chromeos/dbus/debug_daemon_client.h" #include "chromeos/printing/ppd_provider.h" #include "chromeos/printing/printer_configuration.h" +#include "components/device_event_log/device_event_log.h" #include "content/public/browser/browser_thread.h" #include "net/base/host_port_pair.h" #include "net/base/ip_endpoint.h" @@ -66,12 +67,14 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK(!printer.id().empty()); DCHECK(!printer.uri().empty()); + PRINTER_LOG(USER) << printer.make_and_model() << " Printer setup requested"; if (!printer.RequiresIpResolution()) { StartConfiguration(printer, std::move(callback)); return; } + PRINTER_LOG(DEBUG) << printer.make_and_model() << " Resolving IP"; // Resolve the uri to an ip with a mutable copy of the printer. endpoint_resolver_->Start( printer.GetHostAndPort(), @@ -86,6 +89,7 @@ void StartConfiguration(const Printer& printer, PrinterSetupCallback callback) { if (!printer.IsIppEverywhere()) { + PRINTER_LOG(DEBUG) << printer.make_and_model() << " Lookup PPD"; ppd_provider_->ResolvePpd( printer.ppd_reference(), base::BindOnce(&PrinterConfigurerImpl::ResolvePpdDone, @@ -94,6 +98,8 @@ return; } + PRINTER_LOG(DEBUG) << printer.make_and_model() + << " Attempting autoconf setup"; auto* client = DBusThreadManager::Get()->GetDebugDaemonClient(); client->CupsAddAutoConfiguredPrinter( printer.id(), printer.UriForCups(), @@ -110,11 +116,15 @@ PrinterSetupCallback cb, const net::IPEndPoint& endpoint) { if (!endpoint.address().IsValid()) { + PRINTER_LOG(ERROR) << printer->make_and_model() + << " IP Resolution failed"; // |endpoint| does not have a valid address. Address was not resolved. std::move(cb).Run(kPrinterUnreachable); return; } + PRINTER_LOG(EVENT) << printer->make_and_model() + << " IP Resolution succeeded"; std::string effective_uri = printer->ReplaceHostAndPort(endpoint); printer->set_effective_uri(effective_uri); @@ -128,7 +138,8 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (!result_code.has_value()) { - LOG(WARNING) << "Could not contact debugd"; + PRINTER_LOG(ERROR) << printer.make_and_model() + << " Could not contact debugd"; std::move(cb).Run(PrinterSetupResult::kDbusError); return; } @@ -136,12 +147,16 @@ PrinterSetupResult result; switch (result_code.value()) { case debugd::CupsResult::CUPS_SUCCESS: + PRINTER_LOG(DEBUG) << printer.make_and_model() + << " Printer setup successful"; result = PrinterSetupResult::kSuccess; break; case debugd::CupsResult::CUPS_INVALID_PPD: + PRINTER_LOG(EVENT) << printer.make_and_model() << " PPD Invalid"; result = PrinterSetupResult::kInvalidPpd; break; case debugd::CupsResult::CUPS_AUTOCONF_FAILURE: + PRINTER_LOG(EVENT) << printer.make_and_model() << " Autoconf failed"; // There are other reasons autoconf fails but this is the most likely. result = PrinterSetupResult::kPrinterUnreachable; break; @@ -153,8 +168,9 @@ case debugd::CupsResult::CUPS_FATAL: default: // We have no idea. It must be fatal. - LOG(ERROR) << "Unrecognized printer setup error: " - << result_code.value(); + PRINTER_LOG(ERROR) << printer.make_and_model() + << " Unrecognized printer setup error: " + << result_code.value(); result = PrinterSetupResult::kFatalError; break; } @@ -167,6 +183,7 @@ PrinterSetupCallback cb) { auto* client = DBusThreadManager::Get()->GetDebugDaemonClient(); + PRINTER_LOG(EVENT) << printer.make_and_model() << " Manual printer setup"; client->CupsAddManuallyConfiguredPrinter( printer.id(), printer.UriForCups(), ppd_contents, base::BindOnce(&PrinterConfigurerImpl::OnAddedPrinter, @@ -183,7 +200,8 @@ // Result is the component mount point, or empty // if the component couldn't be loaded if (result.empty()) { - LOG(ERROR) << "Filter component installation fails."; + PRINTER_LOG(ERROR) << printer.make_and_model() + << " Filter component installation fails."; std::move(cb).Run(PrinterSetupResult::kFatalError); } else { AddPrinter(printer, ppd_contents, std::move(cb)); @@ -215,7 +233,8 @@ return; } if (components_requested.size() > 1) { - LOG(ERROR) << "More than one filter component is requested."; + PRINTER_LOG(ERROR) << printer.make_and_model() + << " More than one filter component is requested."; std::move(cb).Run(PrinterSetupResult::kFatalError); return; } @@ -229,6 +248,8 @@ const std::string& ppd_contents, const std::vector<std::string>& ppd_filters) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + PRINTER_LOG(EVENT) << printer.make_and_model() + << " PPD Resolution Result: " << result; switch (result) { case PpdProvider::SUCCESS: DCHECK(!ppd_contents.empty());
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index 955f501d..d3ba685 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -73,6 +73,7 @@ #include "content/public/common/url_constants.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" +#include "content/public/test/url_loader_interceptor.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" #include "extensions/browser/extension_system.h" @@ -83,11 +84,8 @@ #include "extensions/test/test_extension_dir.h" #include "net/dns/mock_host_resolver.h" #include "net/test/spawned_test_server/spawned_test_server.h" -#include "net/test/url_request/url_request_mock_http_job.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_filter.h" -#include "net/url_request/url_request_http_job.h" #include "services/network/public/cpp/features.h" #include "third_party/blink/public/platform/web_input_event.h" #include "ui/compositor/compositor_switches.h" @@ -199,78 +197,6 @@ SwitchToPanel(window, (prefix + panel_name).c_str()); } -class PushTimesMockURLRequestJob : public net::URLRequestMockHTTPJob { - public: - PushTimesMockURLRequestJob(net::URLRequest* request, - net::NetworkDelegate* network_delegate, - base::FilePath file_path) - : net::URLRequestMockHTTPJob(request, network_delegate, file_path) {} - - void Start() override { - load_timing_info_.socket_reused = true; - load_timing_info_.request_start_time = base::Time::Now(); - load_timing_info_.request_start = base::TimeTicks::Now(); - load_timing_info_.send_start = base::TimeTicks::Now(); - load_timing_info_.send_end = base::TimeTicks::Now(); - load_timing_info_.receive_headers_end = base::TimeTicks::Now(); - - net::URLRequestMockHTTPJob::Start(); - } - - void GetLoadTimingInfo(net::LoadTimingInfo* load_timing_info) const override { - load_timing_info_.push_start = load_timing_info_.request_start - - base::TimeDelta::FromMilliseconds(100); - if (load_timing_info_.push_end.is_null() && - request()->url().query() != kPushUseNullEndTime) { - load_timing_info_.push_end = base::TimeTicks::Now(); - } - *load_timing_info = load_timing_info_; - } - - private: - mutable net::LoadTimingInfo load_timing_info_; - DISALLOW_COPY_AND_ASSIGN(PushTimesMockURLRequestJob); -}; - -class TestInterceptor : public net::URLRequestInterceptor { - public: - // Creates TestInterceptor and registers it with the URLRequestFilter, - // which takes ownership of it. - static void Register(const GURL& url, const base::FilePath& file_path) { - EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); - net::URLRequestFilter::GetInstance()->AddHostnameInterceptor( - url.scheme(), url.host(), - base::WrapUnique(new TestInterceptor(url, file_path))); - } - - // Unregisters previously created TestInterceptor, which should delete it. - static void Unregister(const GURL& url) { - EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); - net::URLRequestFilter::GetInstance()->RemoveHostnameHandler(url.scheme(), - url.host()); - } - - // net::URLRequestJobFactory::ProtocolHandler implementation: - net::URLRequestJob* MaybeInterceptRequest( - net::URLRequest* request, - net::NetworkDelegate* network_delegate) const override { - EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); - if (request->url().path() != url_.path()) - return nullptr; - return new PushTimesMockURLRequestJob(request, network_delegate, - file_path_); - } - - private: - TestInterceptor(const GURL& url, const base::FilePath& file_path) - : url_(url), file_path_(file_path) {} - - const GURL url_; - const base::FilePath file_path_; - - DISALLOW_COPY_AND_ASSIGN(TestInterceptor); -}; - } // namespace class DevToolsSanityTest : public InProcessBrowserTest { @@ -1605,22 +1531,53 @@ RunTest("testNetworkRawHeadersText", kChunkedTestPage); } +namespace { + +bool InterceptURLLoad(content::URLLoaderInterceptor::RequestParams* params) { + const GURL& url = params->url_request.url; + if (!base::EndsWith(url.path(), kPushTestResource, + base::CompareCase::SENSITIVE)) { + return false; + } + + network::ResourceResponseHead response; + + response.headers = new net::HttpResponseHeaders("200 OK\r\n\r\n"); + + auto start_time = + base::TimeTicks::Now() - base::TimeDelta::FromMilliseconds(10); + response.request_start = start_time; + response.response_start = base::TimeTicks::Now(); + response.request_time = + base::Time::Now() - base::TimeDelta::FromMilliseconds(10); + response.response_time = base::Time::Now(); + + auto& load_timing = response.load_timing; + load_timing.request_start = start_time; + load_timing.request_start_time = response.request_time; + load_timing.send_start = start_time; + load_timing.send_end = base::TimeTicks::Now(); + load_timing.receive_headers_end = base::TimeTicks::Now(); + load_timing.push_start = start_time - base::TimeDelta::FromMilliseconds(100); + if (url.query() != kPushUseNullEndTime) + load_timing.push_end = base::TimeTicks::Now(); + + params->client->OnReceiveResponse(response, /*downloaded_file=*/nullptr); + params->client->OnComplete(network::URLLoaderCompletionStatus()); + return true; +} + +} // namespace + IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestNetworkPushTime) { + content::URLLoaderInterceptor interceptor( + base::BindRepeating(InterceptURLLoad)); + OpenDevToolsWindow(kPushTestPage, false); GURL push_url = spawned_test_server()->GetURL(kPushTestResource); - base::FilePath file_path = - spawned_test_server()->document_root().AppendASCII(kPushTestResource); - - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&TestInterceptor::Register, push_url, file_path)); DispatchOnTestSuite(window_, "testPushTimes", push_url.spec().c_str()); - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&TestInterceptor::Unregister, push_url)); - CloseDevToolsWindow(); }
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc index f786b75c..c95c681 100644 --- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
@@ -109,6 +109,8 @@ network_bytes_proxied_(0), insecure_network_bytes_(0), secure_network_bytes_(0), + insecure_cached_bytes_(0), + secure_cached_bytes_(0), process_id_(base::kNullProcessId), renderer_memory_usage_kb_(0), render_process_host_id_(content::ChildProcessHost::kInvalidUniqueID), @@ -352,14 +354,35 @@ ExponentiallyBucketBytes(secure_original_network_bytes_); const int64_t network_bytes = insecure_network_bytes_ + ExponentiallyBucketBytes(secure_network_bytes_); + const int64_t total_page_size_bytes = + insecure_network_bytes_ + insecure_cached_bytes_ + + ExponentiallyBucketBytes(secure_network_bytes_ + secure_cached_bytes_); + + // Recording cached bytes can be done with raw data, but the end result must + // be bucketed in 50 linear buckets between 0% - 100%. + const int64_t cached_bytes = insecure_cached_bytes_ + secure_cached_bytes_; + const int64_t total_bytes = + cached_bytes + insecure_network_bytes_ + secure_network_bytes_; + int cached_percentage; + if (total_bytes <= 0) { + cached_percentage = 0; + } else { + cached_percentage = + static_cast<int>(std::lround(static_cast<float>(cached_bytes) / + static_cast<float>(total_bytes) * 100.0)); + } + DCHECK_GE(cached_percentage, 0); + DCHECK_LE(cached_percentage, 100); + cached_percentage = cached_percentage - (cached_percentage % 2); + const float cached_fraction = static_cast<float>(cached_percentage) / 100.0; DataReductionProxyPageLoadTiming data_reduction_proxy_timing( timing.navigation_start, response_start, load_event_start, first_image_paint, first_contentful_paint, experimental_first_meaningful_paint, parse_blocked_on_script_load_duration, parse_stop, network_bytes, - original_network_bytes, app_background_occurred, opted_out_, - renderer_memory_usage_kb_, host_id); + original_network_bytes, total_page_size_bytes, cached_fraction, + app_background_occurred, opted_out_, renderer_memory_usage_kb_, host_id); GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing); } @@ -476,11 +499,19 @@ extra_request_complete_info.data_reduction_proxy_data->lofi_received()) { data_->set_lofi_received(true); } - if (extra_request_complete_info.was_cached) - return; const bool is_secure = extra_request_complete_info.url.SchemeIsCryptographic(); + + if (extra_request_complete_info.was_cached) { + if (is_secure) { + secure_cached_bytes_ += extra_request_complete_info.raw_body_bytes; + } else { + insecure_cached_bytes_ += extra_request_complete_info.raw_body_bytes; + } + return; + } + if (is_secure) { secure_original_network_bytes_ += extra_request_complete_info.original_network_content_length;
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h index bf81fbb..65d5ff9a 100644 --- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h
@@ -160,6 +160,12 @@ // The total network bytes used for HTTPS resources. int64_t secure_network_bytes_; + // The total cached bytes used for HTTP resources. + int64_t insecure_cached_bytes_; + + // The total cached bytes used for HTTPS resources. + int64_t secure_cached_bytes_; + // The process ID of the main frame renderer during OnCommit. base::ProcessId process_id_;
diff --git a/chrome/browser/predictors/loading_predictor_config.cc b/chrome/browser/predictors/loading_predictor_config.cc index a793f92..c9253363 100644 --- a/chrome/browser/predictors/loading_predictor_config.cc +++ b/chrome/browser/predictors/loading_predictor_config.cc
@@ -39,7 +39,7 @@ const char kNoPreconnectMode[] = "no-preconnect"; const base::Feature kSpeculativePreconnectFeature{ - kSpeculativePreconnectFeatureName, base::FEATURE_ENABLED_BY_DEFAULT}; + kSpeculativePreconnectFeatureName, base::FEATURE_DISABLED_BY_DEFAULT}; bool MaybeEnableSpeculativePreconnect(LoadingPredictorConfig* config) { if (!base::FeatureList::IsEnabled(kSpeculativePreconnectFeature)) @@ -47,9 +47,6 @@ std::string mode_value = base::GetFieldTrialParamValueByFeature( kSpeculativePreconnectFeature, kModeParamName); - if (mode_value.empty()) - mode_value = kPreconnectMode; - if (mode_value == kLearningMode) { if (config) { config->mode |= LoadingPredictorConfig::LEARNING;
diff --git a/chrome/browser/predictors/loading_predictor_config_unittest.cc b/chrome/browser/predictors/loading_predictor_config_unittest.cc index 270cde05..bf9b5066 100644 --- a/chrome/browser/predictors/loading_predictor_config_unittest.cc +++ b/chrome/browser/predictors/loading_predictor_config_unittest.cc
@@ -66,14 +66,12 @@ LoadingPredictorConfigTest::LoadingPredictorConfigTest() : profile_(new TestingProfile()) {} -TEST_F(LoadingPredictorConfigTest, IsEnabledByDefault) { +TEST_F(LoadingPredictorConfigTest, IsDisabledByDefault) { LoadingPredictorConfig config; - EXPECT_TRUE(MaybeEnableSpeculativePreconnect(&config)); + EXPECT_FALSE(MaybeEnableSpeculativePreconnect(&config)); - EXPECT_TRUE(config.IsLearningEnabled()); - EXPECT_TRUE(config.should_disable_other_preconnects); - EXPECT_FALSE(IsNetPredictorEnabled()); - EXPECT_TRUE(config.IsPreconnectEnabledForSomeOrigin(profile_.get())); + EXPECT_FALSE(config.IsLearningEnabled()); + EXPECT_FALSE(config.IsPreconnectEnabledForSomeOrigin(profile_.get())); } TEST_F(LoadingPredictorConfigTest, EnablePreconnectLearning) {
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc index e08f806d..1065e80 100644 --- a/chrome/browser/printing/print_job_worker.cc +++ b/chrome/browser/printing/print_job_worker.cc
@@ -162,7 +162,7 @@ } void PrintJobWorker::SetPrintJob(PrintJob* print_job) { - DCHECK(page_number_ == PageNumber::npos()); + DCHECK_EQ(page_number_, PageNumber::npos()); print_job_ = print_job; // Release the Printer Query reference. It is no longer needed. @@ -318,12 +318,19 @@ void PrintJobWorker::StartPrinting(PrintedDocument* new_document) { DCHECK(task_runner_->RunsTasksInCurrentSequence()); - DCHECK_EQ(page_number_, PageNumber::npos()); - DCHECK_EQ(document_.get(), new_document); - DCHECK(document_.get()); - if (!document_.get() || page_number_ != PageNumber::npos() || - document_.get() != new_document) { + if (page_number_ != PageNumber::npos()) { + NOTREACHED(); + return; + } + + if (!document_) { + NOTREACHED(); + return; + } + + if (document_.get() != new_document) { + NOTREACHED(); return; } @@ -349,10 +356,11 @@ void PrintJobWorker::OnDocumentChanged(PrintedDocument* new_document) { DCHECK(task_runner_->RunsTasksInCurrentSequence()); - DCHECK_EQ(page_number_, PageNumber::npos()); - if (page_number_ != PageNumber::npos()) + if (page_number_ != PageNumber::npos()) { + NOTREACHED(); return; + } document_ = new_document; } @@ -365,63 +373,48 @@ base::TimeDelta::FromMilliseconds(500)); } -#if defined(OS_WIN) void PrintJobWorker::OnNewPage() { - if (!document_.get()) // Spurious message. - return; - - // message_loop() could return NULL when the print job is cancelled. DCHECK(task_runner_->RunsTasksInCurrentSequence()); + if (!document_) + return; + +#if defined(OS_WIN) if (page_number_ == PageNumber::npos()) { // Find first page to print. int page_count = document_->page_count(); if (!page_count) { - // We still don't know how many pages the document contains. We can't - // start to print the document yet since the header/footer may refer to - // the document's page count. + // We still don't know how many pages the document contains. return; } - // We have enough information to initialize page_number_. + // We have enough information to initialize |page_number_|. page_number_.Init(document_->settings(), page_count); } - DCHECK_NE(page_number_, PageNumber::npos()); while (true) { scoped_refptr<PrintedPage> page = document_->GetPage(page_number_.ToInt()); - if (!page.get()) { + if (!page) { PostWaitForPage(); - break; + return; } // The page is there, print it. SpoolPage(page.get()); ++page_number_; - if (page_number_ == PageNumber::npos()) { - OnDocumentDone(); - // Don't touch this anymore since the instance could be destroyed. + if (page_number_ == PageNumber::npos()) break; - } } -} #else -void PrintJobWorker::OnNewPage() { - if (!document_.get()) // Spurious message. - return; - - // message_loop() could return NULL when the print job is cancelled. - DCHECK(task_runner_->RunsTasksInCurrentSequence()); - - const MetafilePlayer* metafile = document_->GetMetafile(); - if (!metafile) { + if (!document_->GetMetafile()) { PostWaitForPage(); return; } SpoolJob(); - // Don't touch this anymore since the instance could be destroyed. - OnDocumentDone(); -} #endif // defined(OS_WIN) + OnDocumentDone(); + // Don't touch |this| anymore since the instance could be destroyed. +} + void PrintJobWorker::Cancel() { // This is the only function that can be called from any thread. printing_context_->Cancel(); @@ -435,9 +428,7 @@ bool PrintJobWorker::PostTask(const base::Location& from_here, base::OnceClosure task) { - if (task_runner_.get()) - return task_runner_->PostTask(from_here, std::move(task)); - return false; + return task_runner_ && task_runner_->PostTask(from_here, std::move(task)); } void PrintJobWorker::StopSoon() { @@ -457,7 +448,7 @@ void PrintJobWorker::OnDocumentDone() { DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK_EQ(page_number_, PageNumber::npos()); - DCHECK(document_.get()); + DCHECK(document_); // PrintJob must own this, because only PrintJob can send notifications. DCHECK(print_job_); @@ -474,7 +465,7 @@ base::RetainedRef(document_))); // Makes sure the variables are reinitialized. - document_ = NULL; + document_ = nullptr; } #if defined(OS_WIN) @@ -527,7 +518,7 @@ Cancel(); // Makes sure the variables are reinitialized. - document_ = NULL; + document_ = nullptr; page_number_ = PageNumber::npos(); }
diff --git a/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.cc b/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.cc index b93d2bb..5a9e7bc 100644 --- a/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.cc +++ b/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.cc
@@ -18,19 +18,20 @@ default; void DiscardMetricsLifecycleUnitObserver::OnLifecycleUnitStateChanged( - LifecycleUnit* lifecycle_unit) { - if (lifecycle_unit->GetState() == LifecycleUnit::State::DISCARDED) + LifecycleUnit* lifecycle_unit, + LifecycleState last_state) { + if (lifecycle_unit->GetState() == LifecycleState::DISCARDED) OnDiscard(lifecycle_unit); - else + else if (last_state == LifecycleState::DISCARDED) OnReload(); } void DiscardMetricsLifecycleUnitObserver::OnLifecycleUnitDestroyed( LifecycleUnit* lifecycle_unit) { - // If the browser is not shutting down and the tab is in a LOADED state after + // If the browser is not shutting down and the tab is loaded after // being discarded, record TabManager.Discarding.ReloadToCloseTime. if (g_browser_process && !g_browser_process->IsShuttingDown() && - lifecycle_unit->GetState() == LifecycleUnit::State::LOADED && + lifecycle_unit->GetState() != LifecycleState::DISCARDED && !reload_time_.is_null()) { auto reload_to_close_time = NowTicks() - reload_time_; UMA_HISTOGRAM_CUSTOM_TIMES(
diff --git a/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.h b/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.h index a8d5a6cb..1e364c0d 100644 --- a/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.h +++ b/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.h
@@ -9,6 +9,7 @@ #include "base/macros.h" #include "base/time/time.h" +#include "chrome/browser/resource_coordinator/lifecycle_state.h" namespace resource_coordinator { @@ -19,7 +20,8 @@ ~DiscardMetricsLifecycleUnitObserver() override; // LifecycleUnitObserver: - void OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit) override; + void OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit, + LifecycleState last_state) override; void OnLifecycleUnitDestroyed(LifecycleUnit* lifecycle_unit) override; private:
diff --git a/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc b/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc index f63be2a7..632da0c6 100644 --- a/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc +++ b/chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc
@@ -93,19 +93,19 @@ histograms_.ExpectTotalCount(kDiscardCountHistogram, 0); histograms_.ExpectTotalCount(kReloadCountHistogram, 0); - lifecycle_unit_->SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit_->SetState(LifecycleState::DISCARDED); histograms_.ExpectTotalCount(kDiscardCountHistogram, 1); histograms_.ExpectTotalCount(kReloadCountHistogram, 0); - lifecycle_unit_->SetState(LifecycleUnit::State::LOADED); + lifecycle_unit_->SetState(LifecycleState::ACTIVE); histograms_.ExpectTotalCount(kDiscardCountHistogram, 1); histograms_.ExpectTotalCount(kReloadCountHistogram, 1); - lifecycle_unit_->SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit_->SetState(LifecycleState::DISCARDED); histograms_.ExpectTotalCount(kDiscardCountHistogram, 2); histograms_.ExpectTotalCount(kReloadCountHistogram, 1); - lifecycle_unit_->SetState(LifecycleUnit::State::LOADED); + lifecycle_unit_->SetState(LifecycleState::ACTIVE); histograms_.ExpectTotalCount(kDiscardCountHistogram, 2); histograms_.ExpectTotalCount(kReloadCountHistogram, 2); } @@ -113,11 +113,11 @@ TEST_F(DiscardMetricsLifecycleUnitObserverTest, DiscardToReloadTime) { histograms_.ExpectTotalCount(kDiscardToReloadTimeHistogram, 0); - lifecycle_unit_->SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit_->SetState(LifecycleState::DISCARDED); test_clock_.Advance(kShortDelay); histograms_.ExpectTotalCount(kDiscardToReloadTimeHistogram, 0); - lifecycle_unit_->SetState(LifecycleUnit::State::LOADED); + lifecycle_unit_->SetState(LifecycleState::ACTIVE); histograms_.ExpectTimeBucketCount(kDiscardToReloadTimeHistogram, kShortDelay, 1); } @@ -128,11 +128,11 @@ const base::TimeTicks last_focused_time = NowTicks(); lifecycle_unit_->SetLastFocusedTime(last_focused_time); test_clock_.Advance(kShortDelay); - lifecycle_unit_->SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit_->SetState(LifecycleState::DISCARDED); test_clock_.Advance(kShortDelay); histograms_.ExpectTotalCount(kInactiveToReloadTimeHistogram, 0); - lifecycle_unit_->SetState(LifecycleUnit::State::LOADED); + lifecycle_unit_->SetState(LifecycleState::ACTIVE); histograms_.ExpectTimeBucketCount(kInactiveToReloadTimeHistogram, 2 * kShortDelay, 1); } @@ -148,7 +148,7 @@ ReloadToCloseTimeDiscardedButNotReloaded) { histograms_.ExpectTotalCount(kReloadToCloseTimeHistogram, 0); - lifecycle_unit_->SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit_->SetState(LifecycleState::DISCARDED); histograms_.ExpectTotalCount(kReloadToCloseTimeHistogram, 0); lifecycle_unit_.reset(); @@ -159,11 +159,11 @@ histograms_.ExpectTotalCount(kReloadToCloseTimeHistogram, 0); test_clock_.Advance(kShortDelay * 1); - lifecycle_unit_->SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit_->SetState(LifecycleState::DISCARDED); histograms_.ExpectTotalCount(kReloadToCloseTimeHistogram, 0); test_clock_.Advance(kShortDelay * 2); - lifecycle_unit_->SetState(LifecycleUnit::State::LOADED); + lifecycle_unit_->SetState(LifecycleState::ACTIVE); histograms_.ExpectTotalCount(kReloadToCloseTimeHistogram, 0); test_clock_.Advance(kShortDelay * 4);
diff --git a/chrome/browser/resource_coordinator/lifecycle_state.h b/chrome/browser/resource_coordinator/lifecycle_state.h new file mode 100644 index 0000000..59dfdae --- /dev/null +++ b/chrome/browser/resource_coordinator/lifecycle_state.h
@@ -0,0 +1,21 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_RESOURCE_COORDINATOR_LIFECYCLE_STATE_H_ +#define CHROME_BROWSER_RESOURCE_COORDINATOR_LIFECYCLE_STATE_H_ + +namespace resource_coordinator { + +enum class LifecycleState { + // The LifecycleUnit is alive and active. + ACTIVE, + // The LifecycleUnit is frozen. + FROZEN, + // The LifecycleUnit is discarded, and is consuming no system resources. + DISCARDED, +}; + +} // namespace resource_coordinator + +#endif // CHROME_BROWSER_RESOURCE_COORDINATOR_LIFECYCLE_STATE_H_
diff --git a/chrome/browser/resource_coordinator/lifecycle_unit.h b/chrome/browser/resource_coordinator/lifecycle_unit.h index 2dfb6e3..87c891d 100644 --- a/chrome/browser/resource_coordinator/lifecycle_unit.h +++ b/chrome/browser/resource_coordinator/lifecycle_unit.h
@@ -13,6 +13,7 @@ #include "base/strings/string16.h" #include "base/time/time.h" #include "chrome/browser/resource_coordinator/discard_reason.h" +#include "chrome/browser/resource_coordinator/lifecycle_state.h" #include "content/public/browser/visibility.h" namespace resource_coordinator { @@ -26,13 +27,6 @@ // use any system resource. class LifecycleUnit { public: - enum class State { - // The LifecycleUnit is using system resources. - LOADED, - // The LifecycleUnit is not using system resources. - DISCARDED, - }; - // Used to sort LifecycleUnit by importance. The most important LifecycleUnit // has the greatest SortKey. struct SortKey { @@ -78,7 +72,7 @@ virtual SortKey GetSortKey() const = 0; // Returns the current state of this LifecycleUnit. - virtual State GetState() const = 0; + virtual LifecycleState GetState() const = 0; // Returns the current visibility of this LifecycleUnit. virtual content::Visibility GetVisibility() const = 0; @@ -86,8 +80,8 @@ // Returns the last time that the visibility of the LifecycleUnit changed. virtual base::TimeTicks GetLastVisibilityChangeTime() const = 0; - // Freezes this LifecycleUnit, i.e. prevents it from using the CPU. Returns - // true on success. + // Request that the LifecycleUnit be frozen, return true if the request is + // successfuly sent. virtual bool Freeze() = 0; // Returns the estimated number of kilobytes that would be freed if this
diff --git a/chrome/browser/resource_coordinator/lifecycle_unit_base.cc b/chrome/browser/resource_coordinator/lifecycle_unit_base.cc index 5b31782..c6d70ea 100644 --- a/chrome/browser/resource_coordinator/lifecycle_unit_base.cc +++ b/chrome/browser/resource_coordinator/lifecycle_unit_base.cc
@@ -18,7 +18,7 @@ return id_; } -LifecycleUnit::State LifecycleUnitBase::GetState() const { +LifecycleState LifecycleUnitBase::GetState() const { return state_; } @@ -34,12 +34,13 @@ observers_.RemoveObserver(observer); } -void LifecycleUnitBase::SetState(State state) { +void LifecycleUnitBase::SetState(LifecycleState state) { if (state == state_) return; + LifecycleState last_state = state_; state_ = state; for (auto& observer : observers_) - observer.OnLifecycleUnitStateChanged(this); + observer.OnLifecycleUnitStateChanged(this, last_state); } void LifecycleUnitBase::OnLifecycleUnitVisibilityChanged(
diff --git a/chrome/browser/resource_coordinator/lifecycle_unit_base.h b/chrome/browser/resource_coordinator/lifecycle_unit_base.h index 659507b4..03a82e3d 100644 --- a/chrome/browser/resource_coordinator/lifecycle_unit_base.h +++ b/chrome/browser/resource_coordinator/lifecycle_unit_base.h
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "base/observer_list.h" +#include "chrome/browser/resource_coordinator/lifecycle_state.h" #include "chrome/browser/resource_coordinator/lifecycle_unit.h" #include "content/public/browser/visibility.h" @@ -20,14 +21,14 @@ // LifecycleUnit: int32_t GetID() const override; - State GetState() const override; + LifecycleState GetState() const override; base::TimeTicks GetLastVisibilityChangeTime() const override; void AddObserver(LifecycleUnitObserver* observer) override; void RemoveObserver(LifecycleUnitObserver* observer) override; protected: // Sets the state of this LifecycleUnit to |state| and notifies observers. - void SetState(State state); + void SetState(LifecycleState state); // Notifies observers that the visibility of the LifecycleUnit has changed. void OnLifecycleUnitVisibilityChanged(content::Visibility visibility); @@ -44,7 +45,7 @@ const int32_t id_ = ++next_id_; // Current state of this LifecycleUnit. - State state_ = State::LOADED; + LifecycleState state_ = LifecycleState::ACTIVE; base::TimeTicks last_visibility_change_time_;
diff --git a/chrome/browser/resource_coordinator/lifecycle_unit_base_unittest.cc b/chrome/browser/resource_coordinator/lifecycle_unit_base_unittest.cc index 73825ac1..6abc8e8 100644 --- a/chrome/browser/resource_coordinator/lifecycle_unit_base_unittest.cc +++ b/chrome/browser/resource_coordinator/lifecycle_unit_base_unittest.cc
@@ -20,7 +20,8 @@ public: MockLifecycleUnitObserver() = default; - MOCK_METHOD1(OnLifecycleUnitStateChanged, void(LifecycleUnit*)); + MOCK_METHOD2(OnLifecycleUnitStateChanged, + void(LifecycleUnit*, LifecycleState)); MOCK_METHOD2(OnLifecycleUnitVisibilityChanged, void(LifecycleUnit*, content::Visibility)); MOCK_METHOD1(OnLifecycleUnitDestroyed, void(LifecycleUnit*)); @@ -46,7 +47,6 @@ return base::ProcessHandle(); } SortKey GetSortKey() const override { return SortKey(); } - State GetState() const override { return State::LOADED; } content::Visibility GetVisibility() const override { return content::Visibility::VISIBLE; } @@ -86,12 +86,13 @@ lifecycle_unit.AddObserver(&observer); // Observer is notified when the state changes. - EXPECT_CALL(observer, OnLifecycleUnitStateChanged(&lifecycle_unit)); - lifecycle_unit.SetState(LifecycleUnit::State::DISCARDED); + EXPECT_CALL(observer, OnLifecycleUnitStateChanged(&lifecycle_unit, + lifecycle_unit.GetState())); + lifecycle_unit.SetState(LifecycleState::DISCARDED); testing::Mock::VerifyAndClear(&observer); // Observer isn't notified when the state stays the same. - lifecycle_unit.SetState(LifecycleUnit::State::DISCARDED); + lifecycle_unit.SetState(LifecycleState::DISCARDED); lifecycle_unit.RemoveObserver(&observer); }
diff --git a/chrome/browser/resource_coordinator/lifecycle_unit_observer.cc b/chrome/browser/resource_coordinator/lifecycle_unit_observer.cc index 1150ae5..10d2bfb 100644 --- a/chrome/browser/resource_coordinator/lifecycle_unit_observer.cc +++ b/chrome/browser/resource_coordinator/lifecycle_unit_observer.cc
@@ -9,7 +9,8 @@ LifecycleUnitObserver::~LifecycleUnitObserver() = default; void LifecycleUnitObserver::OnLifecycleUnitStateChanged( - LifecycleUnit* lifecycle_unit) {} + LifecycleUnit* lifecycle_unit, + LifecycleState last_state) {} void LifecycleUnitObserver::OnLifecycleUnitVisibilityChanged( LifecycleUnit* lifecycle_unit,
diff --git a/chrome/browser/resource_coordinator/lifecycle_unit_observer.h b/chrome/browser/resource_coordinator/lifecycle_unit_observer.h index b7d9ce3..ca80ef8e 100644 --- a/chrome/browser/resource_coordinator/lifecycle_unit_observer.h +++ b/chrome/browser/resource_coordinator/lifecycle_unit_observer.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_RESOURCE_COORDINATOR_LIFECYCLE_UNIT_OBSERVER_H_ #define CHROME_BROWSER_RESOURCE_COORDINATOR_LIFECYCLE_UNIT_OBSERVER_H_ +#include "chrome/browser/resource_coordinator/lifecycle_state.h" #include "content/public/browser/visibility.h" namespace resource_coordinator { @@ -17,7 +18,8 @@ virtual ~LifecycleUnitObserver(); // Invoked when the state of the observed LifecycleUnit changes. - virtual void OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit); + virtual void OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit, + LifecycleState last_state); // Invoked when the visibility of the observed LifecyleUnit changes. virtual void OnLifecycleUnitVisibilityChanged(LifecycleUnit* lifecycle_unit,
diff --git a/chrome/browser/resource_coordinator/page_signal_receiver.cc b/chrome/browser/resource_coordinator/page_signal_receiver.cc index 96514af8..22d083d 100644 --- a/chrome/browser/resource_coordinator/page_signal_receiver.cc +++ b/chrome/browser/resource_coordinator/page_signal_receiver.cc
@@ -56,6 +56,15 @@ duration); } +void PageSignalReceiver::SetLifecycleState(const CoordinationUnitID& cu_id, + mojom::LifecycleState state) { + auto web_contents_iter = cu_id_web_contents_map_.find(cu_id); + if (web_contents_iter == cu_id_web_contents_map_.end()) + return; + for (auto& observer : observers_) + observer.OnLifecycleStateChanged(web_contents_iter->second, state); +} + void PageSignalReceiver::AddObserver(PageSignalObserver* observer) { // When PageSignalReceiver starts to have observer, construct the mojo // channel.
diff --git a/chrome/browser/resource_coordinator/page_signal_receiver.h b/chrome/browser/resource_coordinator/page_signal_receiver.h index 54627d9..73baa7d 100644 --- a/chrome/browser/resource_coordinator/page_signal_receiver.h +++ b/chrome/browser/resource_coordinator/page_signal_receiver.h
@@ -28,6 +28,8 @@ virtual void OnExpectedTaskQueueingDurationSet( content::WebContents* web_contents, base::TimeDelta duration) {} + virtual void OnLifecycleStateChanged(content::WebContents* web_contents, + mojom::LifecycleState state) {} }; // Implementation of resource_coordinator::mojom::PageSignalReceiver. @@ -50,6 +52,8 @@ void NotifyPageAlmostIdle(const CoordinationUnitID& cu_id) override; void SetExpectedTaskQueueingDuration(const CoordinationUnitID& cu_id, base::TimeDelta duration) override; + void SetLifecycleState(const CoordinationUnitID& cu_id, + mojom::LifecycleState) override; void AddObserver(PageSignalObserver* observer); void RemoveObserver(PageSignalObserver* observer);
diff --git a/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc b/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc index 6f2e526..807c9be 100644 --- a/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc +++ b/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc
@@ -581,8 +581,14 @@ DISALLOW_COPY_AND_ASSIGN(ForegroundedOrClosedTest); }; +// TODO(michaelpg): test is flaky on ChromeOS. https://crbug.com/839886 +#if defined(OS_CHROMEOS) +#define MAYBE_SingleTab DISABLED_SingleTab +#else +#define MAYBE_SingleTab SingleTab +#endif // Tests TabManager.Backgrounded.ForegroundedOrClosed UKM logging. -TEST_F(ForegroundedOrClosedTest, SingleTab) { +TEST_F(ForegroundedOrClosedTest, MAYBE_SingleTab) { Browser::CreateParams params(profile(), true); std::unique_ptr<Browser> browser = CreateBrowserWithTestWindowForParams(¶ms);
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc index 6016241..9abe297 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/resource_coordinator/lifecycle_state.h" #include "chrome/browser/resource_coordinator/tab_lifecycle_observer.h" #include "chrome/browser/resource_coordinator/time.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -23,6 +24,22 @@ namespace resource_coordinator { +namespace { + +// Translates a mojom::LifecycleState to resource_coordinator::LifecycleState. +LifecycleState GetLifecycleStateFromMojoState(mojom::LifecycleState state) { + switch (state) { + case mojom::LifecycleState::kDiscarded: + return LifecycleState::DISCARDED; + case mojom::LifecycleState::kFrozen: + return LifecycleState::FROZEN; + case mojom::LifecycleState::kRunning: + return LifecycleState::ACTIVE; + } +} + +} // namespace + TabLifecycleUnitSource::TabLifecycleUnit::TabLifecycleUnit( base::ObserverList<TabLifecycleObserver>* observers, content::WebContents* web_contents, @@ -56,8 +73,8 @@ return; last_focused_time_ = focused ? base::TimeTicks::Max() : NowTicks(); - if (focused && GetState() == State::DISCARDED) { - SetState(State::LOADED); + if (focused && GetState() == LifecycleState::DISCARDED) { + SetState(LifecycleState::ACTIVE); // See comment in Discard() for an explanation of why "needs reload" is // false when a tab is discarded. // TODO(fdoray): Remove NavigationControllerImpl::needs_reload_ once session @@ -76,6 +93,12 @@ recently_audible_time_ = NowTicks(); } +void TabLifecycleUnitSource::TabLifecycleUnit::UpdateLifecycleState( + mojom::LifecycleState state) { + DCHECK_NE(mojom::LifecycleState::kDiscarded, state); + SetState(GetLifecycleStateFromMojoState(state)); +} + TabLifecycleUnitExternal* TabLifecycleUnitSource::TabLifecycleUnit::AsTabLifecycleUnitExternal() { return this; @@ -108,9 +131,10 @@ bool TabLifecycleUnitSource::TabLifecycleUnit::Freeze() { // Can't freeze tabs that are already discarded or frozen. - // TODO(fmeawad): Don't freeze already frozen tabs. - if (GetState() != State::LOADED) + if (GetState() == LifecycleState::DISCARDED || + GetState() == LifecycleState::FROZEN) { return false; + } GetWebContents()->FreezePage(); return true; @@ -203,7 +227,7 @@ bool TabLifecycleUnitSource::TabLifecycleUnit::Discard( DiscardReason discard_reason) { - if (!tab_strip_model_ || IsDiscarded()) + if (!tab_strip_model_ || GetState() == LifecycleState::DISCARDED) return false; UMA_HISTOGRAM_BOOLEAN( @@ -273,7 +297,7 @@ // RenderFrameProxyHosts. old_contents_deleter.reset(); - SetState(State::DISCARDED); + SetState(LifecycleState::DISCARDED); ++discard_count_; OnDiscardedStateChange(); @@ -329,7 +353,11 @@ } bool TabLifecycleUnitSource::TabLifecycleUnit::IsDiscarded() const { - return GetState() == State::DISCARDED; + return GetState() == LifecycleState::DISCARDED; +} + +bool TabLifecycleUnitSource::TabLifecycleUnit::IsFrozen() const { + return GetState() == LifecycleState::FROZEN; } int TabLifecycleUnitSource::TabLifecycleUnit::GetDiscardCount() const { @@ -347,8 +375,8 @@ } void TabLifecycleUnitSource::TabLifecycleUnit::DidStartLoading() { - if (GetState() == State::DISCARDED) { - SetState(State::LOADED); + if (IsDiscarded()) { + SetState(LifecycleState::ACTIVE); OnDiscardedStateChange(); } }
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.h b/chrome/browser/resource_coordinator/tab_lifecycle_unit.h index e54da2ff..e3c1aa9 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.h +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.h
@@ -86,8 +86,18 @@ bool FreezeTab() override; bool DiscardTab() override; bool IsDiscarded() const override; + bool IsFrozen() const override; int GetDiscardCount() const override; + protected: + FRIEND_TEST_ALL_PREFIXES(TabLifecycleUnitTest, CannotFreezeAFrozenTab); + // TabLifecycleUnitSource needs to update the state when a external lifecycle + // state change is observed. + friend class TabLifecycleUnitSource; + // Updates the tab's lifecycle state when changed outside the tab lifecycle + // unit. + void UpdateLifecycleState(mojom::LifecycleState state); + private: // Invoked when the state goes from DISCARDED to non-DISCARDED and vice-versa. void OnDiscardedStateChange();
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h b/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h index a824c5d..0bb312f 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h
@@ -51,6 +51,9 @@ // Returns true if the tab is discarded. virtual bool IsDiscarded() const = 0; + // Returns true if the tab is frozen. + virtual bool IsFrozen() const = 0; + // Returns the number of times that the tab was discarded. virtual int GetDiscardCount() const = 0; };
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc index 057479e..7c79962 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc
@@ -53,9 +53,15 @@ DCHECK(BrowserList::GetInstance()->empty()); browser_tab_strip_tracker_.Init(); instance_ = this; + // TODO(chrisha): Create a ScopedPageSignalObserver helper class to clean up + // this manual lifetime management. + if (auto* page_signal_receiver = PageSignalReceiver::GetInstance()) + page_signal_receiver->AddObserver(this); } TabLifecycleUnitSource::~TabLifecycleUnitSource() { + if (auto* page_signal_receiver = PageSignalReceiver::GetInstance()) + page_signal_receiver->RemoveObserver(this); DCHECK_EQ(instance_, this); instance_ = nullptr; } @@ -209,6 +215,17 @@ UpdateFocusedTab(); } +void TabLifecycleUnitSource::OnLifecycleStateChanged( + content::WebContents* web_contents, + mojom::LifecycleState state) { + TabLifecycleUnit* lifecycle_unit = GetTabLifecycleUnit(web_contents); + + // The lifecycle state is currently only maintained for tabs, and some + // WebContents aren't attached to a tab. + if (lifecycle_unit) + lifecycle_unit->UpdateLifecycleState(state); +} + } // namespace resource_coordinator DEFINE_WEB_CONTENTS_USER_DATA_KEY(
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h index 73ffb01..09c2305 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/observer_list.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_source_base.h" +#include "chrome/browser/resource_coordinator/page_signal_receiver.h" #include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/browser_tab_strip_tracker.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" @@ -28,6 +29,7 @@ // Creates and destroys LifecycleUnits as tabs are created and destroyed. class TabLifecycleUnitSource : public BrowserListObserver, public LifecycleUnitSourceBase, + public PageSignalObserver, public TabStripModelObserver { public: TabLifecycleUnitSource(); @@ -94,6 +96,10 @@ void OnBrowserSetLastActive(Browser* browser) override; void OnBrowserNoLongerActive(Browser* browser) override; + // PageSignalObserver: + void OnLifecycleStateChanged(content::WebContents* web_contents, + mojom::LifecycleState state) override; + // Tracks the BrowserList and all TabStripModels. BrowserTabStripTracker browser_tab_strip_tracker_;
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc index 7fe59b9..5cd35ab 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc
@@ -69,8 +69,8 @@ public: MockLifecycleUnitObserver() = default; - MOCK_METHOD1(OnLifecycleUnitStateChanged, - void(LifecycleUnit* lifecycle_unit)); + MOCK_METHOD2(OnLifecycleUnitStateChanged, + void(LifecycleUnit* lifecycle_unit, LifecycleState)); MOCK_METHOD2(OnLifecycleUnitVisibilityChanged, void(LifecycleUnit* lifecycle_unit, content::Visibility visibility)); @@ -359,11 +359,11 @@ other_tab_strip_model.AppendWebContents(std::move(owned_contents), false); EXPECT_FOR_ALL_DISCARD_REASONS(first_lifecycle_unit, CanDiscard, true); - EXPECT_EQ(LifecycleUnit::State::LOADED, first_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, first_lifecycle_unit->GetState()); EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, true)); first_lifecycle_unit->Discard(DiscardReason::kProactive); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::DISCARDED, first_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::DISCARDED, first_lifecycle_unit->GetState()); // Expect a notification when the tab is closed. CloseTabsAndExpectNotifications(&other_tab_strip_model, @@ -409,15 +409,13 @@ initial_web_contents->SetLastActiveTime(kDummyLastActiveTime); // Discard the tab. - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, true)); background_lifecycle_unit->Discard(DiscardReason::kProactive); testing::Mock::VerifyAndClear(&tab_observer_); // Expect the tab to be discarded and the last active time to be preserved. - EXPECT_EQ(LifecycleUnit::State::DISCARDED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::DISCARDED, background_lifecycle_unit->GetState()); EXPECT_NE(initial_web_contents, tab_strip_model_->GetWebContentsAt(0)); EXPECT_FALSE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); @@ -436,13 +434,11 @@ tab_strip_model_->GetWebContentsAt(0); // Discard the tab. - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, true)); background_lifecycle_unit->Discard(DiscardReason::kProactive); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::DISCARDED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::DISCARDED, background_lifecycle_unit->GetState()); EXPECT_NE(initial_web_contents, tab_strip_model_->GetWebContentsAt(0)); EXPECT_FALSE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); @@ -451,8 +447,7 @@ EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, false)); tab_strip_model_->ActivateTabAt(0, true); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_TRUE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); } @@ -466,13 +461,11 @@ tab_strip_model_->GetWebContentsAt(0); // Discard the tab. - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, true)); background_lifecycle_unit->Discard(DiscardReason::kProactive); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::DISCARDED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::DISCARDED, background_lifecycle_unit->GetState()); EXPECT_NE(initial_web_contents, tab_strip_model_->GetWebContentsAt(0)); EXPECT_FALSE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); @@ -482,8 +475,7 @@ tab_strip_model_->GetWebContentsAt(0)->GetController().Reload( content::ReloadType::NORMAL, false); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_TRUE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); } @@ -500,13 +492,11 @@ EXPECT_FOR_ALL_DISCARD_REASONS(background_lifecycle_unit, CanDiscard, true); // Discard the tab. - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, true)); background_lifecycle_unit->Discard(DiscardReason::kProactive); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::DISCARDED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::DISCARDED, background_lifecycle_unit->GetState()); EXPECT_NE(initial_web_contents, tab_strip_model_->GetWebContentsAt(0)); EXPECT_FALSE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); @@ -516,8 +506,7 @@ tab_strip_model_->GetWebContentsAt(0)->GetController().Reload( content::ReloadType::NORMAL, false); testing::Mock::VerifyAndClear(&tab_observer_); - EXPECT_EQ(LifecycleUnit::State::LOADED, - background_lifecycle_unit->GetState()); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); EXPECT_TRUE( tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); @@ -533,4 +522,41 @@ #endif } +TEST_F(TabLifecycleUnitSourceTest, CannotFreezeADiscardedTab) { + LifecycleUnit* background_lifecycle_unit = nullptr; + LifecycleUnit* foreground_lifecycle_unit = nullptr; + CreateTwoTabs(true /* focus_tab_strip */, &background_lifecycle_unit, + &foreground_lifecycle_unit); + content::WebContents* initial_web_contents = + tab_strip_model_->GetWebContentsAt(0); + test_clock_.Advance(kShortDelay); + + // It should be possible to discard the background tab. + EXPECT_FOR_ALL_DISCARD_REASONS(background_lifecycle_unit, CanDiscard, true); + + // Discard the tab. + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); + EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, true)); + background_lifecycle_unit->Discard(DiscardReason::kProactive); + testing::Mock::VerifyAndClear(&tab_observer_); + EXPECT_EQ(LifecycleState::DISCARDED, background_lifecycle_unit->GetState()); + EXPECT_NE(initial_web_contents, tab_strip_model_->GetWebContentsAt(0)); + EXPECT_FALSE( + tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); + + EXPECT_FALSE(background_lifecycle_unit->Freeze()); + + // Explicitly reload the tab. Expect the state to be LOADED. + EXPECT_CALL(tab_observer_, OnDiscardedStateChange(testing::_, false)); + tab_strip_model_->GetWebContentsAt(0)->GetController().Reload( + content::ReloadType::NORMAL, false); + testing::Mock::VerifyAndClear(&tab_observer_); + EXPECT_EQ(LifecycleState::ACTIVE, background_lifecycle_unit->GetState()); + EXPECT_TRUE( + tab_strip_model_->GetWebContentsAt(0)->GetController().GetPendingEntry()); + + // Should be able to freeze the reloaded tab. + EXPECT_TRUE(background_lifecycle_unit->Freeze()); +} + } // namespace resource_coordinator
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc index dea6ccc..3408620 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
@@ -52,7 +52,8 @@ public: MockLifecycleUnitObserver() = default; - MOCK_METHOD1(OnLifecycleUnitStateChanged, void(LifecycleUnit*)); + MOCK_METHOD2(OnLifecycleUnitStateChanged, + void(LifecycleUnit*, LifecycleState)); MOCK_METHOD1(OnLifecycleUnitDestroyed, void(LifecycleUnit*)); MOCK_METHOD2(OnLifecycleUnitVisibilityChanged, void(LifecycleUnit*, content::Visibility));
diff --git a/chrome/browser/resource_coordinator/tab_manager.cc b/chrome/browser/resource_coordinator/tab_manager.cc index a610ef5..dbce2c3 100644 --- a/chrome/browser/resource_coordinator/tab_manager.cc +++ b/chrome/browser/resource_coordinator/tab_manager.cc
@@ -118,9 +118,10 @@ int GetNumLoadedLifecycleUnits(LifecycleUnitSet lifecycle_unit_set) { int num_loaded_lifecycle_units = 0; - for (auto* lifecycle_unit : lifecycle_unit_set) - if (lifecycle_unit->GetState() == LifecycleUnit::State::LOADED) + for (auto* lifecycle_unit : lifecycle_unit_set) { + if (lifecycle_unit->GetState() != LifecycleState::DISCARDED) num_loaded_lifecycle_units++; + } return num_loaded_lifecycle_units; } @@ -1026,11 +1027,12 @@ next_to_discard, this)); } -void TabManager::OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit) { - if (lifecycle_unit->GetState() == LifecycleUnit::State::LOADED) - num_loaded_lifecycle_units_++; - else +void TabManager::OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit, + LifecycleState last_state) { + if (lifecycle_unit->GetState() == LifecycleState::DISCARDED) num_loaded_lifecycle_units_--; + else if (last_state == LifecycleState::DISCARDED) + num_loaded_lifecycle_units_++; DCHECK_EQ(num_loaded_lifecycle_units_, GetNumLoadedLifecycleUnits(lifecycle_units_)); @@ -1045,7 +1047,7 @@ } void TabManager::OnLifecycleUnitDestroyed(LifecycleUnit* lifecycle_unit) { - if (lifecycle_unit->GetState() == LifecycleUnit::State::LOADED) + if (lifecycle_unit->GetState() != LifecycleState::DISCARDED) num_loaded_lifecycle_units_--; lifecycle_units_.erase(lifecycle_unit); @@ -1057,8 +1059,7 @@ void TabManager::OnLifecycleUnitCreated(LifecycleUnit* lifecycle_unit) { lifecycle_units_.insert(lifecycle_unit); - - if (lifecycle_unit->GetState() == LifecycleUnit::State::LOADED) + if (lifecycle_unit->GetState() != LifecycleState::DISCARDED) num_loaded_lifecycle_units_++; // Add an observer to be notified of destruction.
diff --git a/chrome/browser/resource_coordinator/tab_manager.h b/chrome/browser/resource_coordinator/tab_manager.h index 1fbeecfd..be87524 100644 --- a/chrome/browser/resource_coordinator/tab_manager.h +++ b/chrome/browser/resource_coordinator/tab_manager.h
@@ -21,6 +21,7 @@ #include "base/timer/timer.h" #include "build/build_config.h" #include "chrome/browser/resource_coordinator/discard_reason.h" +#include "chrome/browser/resource_coordinator/lifecycle_state.h" #include "chrome/browser/resource_coordinator/lifecycle_unit.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_source_observer.h" @@ -427,7 +428,8 @@ LifecycleUnit* lifecycle_unit, content::Visibility visibility) override; void OnLifecycleUnitDestroyed(LifecycleUnit* lifecycle_unit) override; - void OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit) override; + void OnLifecycleUnitStateChanged(LifecycleUnit* lifecycle_unit, + LifecycleState last_state) override; // LifecycleUnitSourceObserver: void OnLifecycleUnitCreated(LifecycleUnit* lifecycle_unit) override;
diff --git a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos_unittest.cc b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos_unittest.cc index 75e7f64..24091f1 100644 --- a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos_unittest.cc +++ b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos_unittest.cc
@@ -48,7 +48,6 @@ return nullptr; } SortKey GetSortKey() const override { return SortKey(last_focused_time_); } - State GetState() const override { return State::LOADED; } content::Visibility GetVisibility() const override { return content::Visibility::VISIBLE; }
diff --git a/chrome/browser/resources/discards/discards.html b/chrome/browser/resources/discards/discards.html index f0519d1..ccaacefb 100644 --- a/chrome/browser/resources/discards/discards.html +++ b/chrome/browser/resources/discards/discards.html
@@ -37,6 +37,7 @@ <th data-sort-key="tabUrl">Tab URL</th> <th data-sort-key="visibility">Visibility</th> <th data-sort-key="isMedia">Media</th> + <th data-sort-key="isFrozen">Frozen</th> <th data-sort-key="isDiscarded">Discarded</th> <th data-sort-key="discardCount">Discard Count</th> <th data-sort-key="isAutoDiscardable">Auto Discardable</th> @@ -58,6 +59,7 @@ <td class="tab-url-cell"></td> <td class="visibility-cell"></td> <td class="is-media-cell boolean-cell"></td> + <td class="is-frozen-cell boolean-cell"></td> <td class="is-discarded-cell boolean-cell"></td> <td class="discard-count-cell"></td> <td class="is-auto-discardable-cell boolean-cell">
diff --git a/chrome/browser/resources/discards/discards.js b/chrome/browser/resources/discards/discards.js index 77bdb26..89aaf34 100644 --- a/chrome/browser/resources/discards/discards.js +++ b/chrome/browser/resources/discards/discards.js
@@ -64,7 +64,8 @@ } // Compares boolean fields. - if (['isMedia', 'isDiscarded', 'isAutoDiscardable'].includes(sortKey)) { + if (['isMedia', 'isFrozen', 'isDiscarded', 'isAutoDiscardable'].includes( + sortKey)) { if (val1 == val2) return 0; return val1 ? 1 : -1; @@ -254,8 +255,6 @@ let lifecycleListener = function(e) { // Get the info backing this row. let info = infos[getRowIndex(e.target)]; - // TODO(fmeawad): Disable the action, and let the update function - // re-enable it. Blocked on acquiring freeze status. // Perform the action. uiHandler.freezeById(info.id); }; @@ -282,6 +281,8 @@ visibilityToString(info.visibility); row.querySelector('.is-media-cell').textContent = boolToString(info.isMedia); + row.querySelector('.is-frozen-cell').textContent = + boolToString(info.isFrozen); row.querySelector('.is-discarded-cell').textContent = boolToString(info.isDiscarded); row.querySelector('.discard-count-cell').textContent = @@ -302,6 +303,12 @@ discardLink.removeAttribute('disabled'); discardUrgentLink.removeAttribute('disabled'); } + + let freezeLink = row.querySelector('.freeze-link'); + if (info.isFrozen) + freezeLink.setAttribute('disabled', ''); + else + freezeLink.removeAttribute('disabled', ''); } /**
diff --git a/chrome/browser/signin/account_consistency_mode_manager.cc b/chrome/browser/signin/account_consistency_mode_manager.cc index 73cca42..8f7d01eb 100644 --- a/chrome/browser/signin/account_consistency_mode_manager.cc +++ b/chrome/browser/signin/account_consistency_mode_manager.cc
@@ -15,6 +15,7 @@ #include "components/signin/core/browser/signin_pref_names.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" +#include "google_apis/google_api_keys.h" namespace { @@ -83,6 +84,8 @@ } // namespace +bool AccountConsistencyModeManager::ignore_missing_key_for_testing_ = false; + // static AccountConsistencyModeManager* AccountConsistencyModeManager::GetForProfile( Profile* profile) { @@ -179,6 +182,11 @@ signin::AccountConsistencyMethod::kMirror; } +// static +void AccountConsistencyModeManager::SetIgnoreMissingApiKeysForTesting() { + ignore_missing_key_for_testing_ = true; +} + signin::AccountConsistencyMethod AccountConsistencyModeManager::GetAccountConsistencyMethod() { if (profile_->GetProfileType() != Profile::ProfileType::REGULAR_PROFILE) { @@ -200,13 +208,26 @@ signin::AccountConsistencyMethod method = signin::GetAccountConsistencyMethod(); + if (method == signin::AccountConsistencyMethod::kMirror || + signin::DiceMethodGreaterOrEqual( + signin::AccountConsistencyMethod::kDiceFixAuthErrors, method)) { + return method; + } + + DCHECK(signin::DiceMethodGreaterOrEqual( + method, signin::AccountConsistencyMethod::kDicePrepareMigration)); + // Legacy supervised users cannot get Dice. // TODO(droger): remove this once legacy supervised users are no longer // supported. - if (profile_->IsLegacySupervised() && - (method != signin::AccountConsistencyMethod::kMirror) && - signin::DiceMethodGreaterOrEqual( - method, signin::AccountConsistencyMethod::kDiceFixAuthErrors)) { + if (profile_->IsLegacySupervised()) + return signin::AccountConsistencyMethod::kDiceFixAuthErrors; + + bool can_enable_dice_for_build = + ignore_missing_key_for_testing_ || google_apis::HasKeysConfigured(); + if (!can_enable_dice_for_build) { + LOG(WARNING) << "Desktop Identity Consistency cannot be enabled as no " + "API keys have been configured."; return signin::AccountConsistencyMethod::kDiceFixAuthErrors; }
diff --git a/chrome/browser/signin/account_consistency_mode_manager.h b/chrome/browser/signin/account_consistency_mode_manager.h index 918f41fa..e8b37fb2 100644 --- a/chrome/browser/signin/account_consistency_mode_manager.h +++ b/chrome/browser/signin/account_consistency_mode_manager.h
@@ -58,6 +58,10 @@ // behaviour enabled. static bool IsMirrorEnabledForProfile(Profile* profile); + // By default, Deskotp Identity Consistency (aka Dice) is not enabled in + // builds lacking an API key. For testing, set to have Dice enabled in tests. + static void SetIgnoreMissingApiKeysForTesting(); + private: FRIEND_TEST_ALL_PREFIXES(AccountConsistencyModeManagerTest, MigrateAtCreation); @@ -76,6 +80,10 @@ Profile* profile_; + // By default, DICE is not enabled in builds lacking an API key. Set to true + // for tests. + static bool ignore_missing_key_for_testing_; + DISALLOW_COPY_AND_ASSIGN(AccountConsistencyModeManager); };
diff --git a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc index 4b3671d..bafe409 100644 --- a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc +++ b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc
@@ -176,9 +176,7 @@ IdentityManagerFactory::GetForProfile(profile_); identity_manager->SetPrimaryAccountSynchronouslyForTests( gaia_id_, username_, GenerateFakeOAuth2RefreshTokenString()); - std::string account_id = - identity_manager->GetPrimaryAccountInfo().account_id; - service()->GoogleSigninSucceeded(account_id, username_); + service()->OnPrimaryAccountSet(identity_manager->GetPrimaryAccountInfo()); } else { LOG(ERROR) << "Unsupported profile signin type."; } @@ -284,8 +282,7 @@ void ProfileSyncServiceHarness::SignoutSyncService() { DCHECK(!username_.empty()); - service()->GoogleSignedOut( - service()->GetAuthenticatedAccountInfo().account_id, username_); + service()->OnPrimaryAccountCleared(service()->GetAuthenticatedAccountInfo()); } bool ProfileSyncServiceHarness::HasUnsyncedItems() {
diff --git a/chrome/browser/ui/app_list/app_context_menu_unittest.cc b/chrome/browser/ui/app_list/app_context_menu_unittest.cc index c8a84565..774fbd94 100644 --- a/chrome/browser/ui/app_list/app_context_menu_unittest.cc +++ b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
@@ -480,6 +480,11 @@ EXPECT_EQ(base::StringPrintf("ShortLabel %d", i), base::UTF16ToUTF8(menu->GetLabelAt(i + index))); } + + // Test launching app shortcut item. + EXPECT_EQ(0, arc_test.app_instance()->launch_app_shortcut_item_count()); + menu->ActivatedAt(menu->GetItemCount() - 1); + EXPECT_EQ(1, arc_test.app_instance()->launch_app_shortcut_item_count()); } // This makes all apps non-ready.
diff --git a/chrome/browser/ui/app_list/app_list_client_impl.cc b/chrome/browser/ui/app_list/app_list_client_impl.cc index 70943f5..22be7a81 100644 --- a/chrome/browser/ui/app_list/app_list_client_impl.cc +++ b/chrome/browser/ui/app_list/app_list_client_impl.cc
@@ -49,9 +49,13 @@ AppListServiceImpl::GetInstance()->SetAppListControllerAndClient( app_list_controller_.get(), this); + + user_manager::UserManager::Get()->AddSessionStateObserver(this); } -AppListClientImpl::~AppListClientImpl() = default; +AppListClientImpl::~AppListClientImpl() { + user_manager::UserManager::Get()->RemoveSessionStateObserver(this); +} void AppListClientImpl::StartSearch(const base::string16& raw_query) { if (search_controller_) { @@ -86,10 +90,10 @@ std::move(callback).Run(std::vector<ash::mojom::MenuItemPtr>()); return; } - model_updater_->GetContextMenuModel( + model_updater_->GetSearchResultContextMenuModel( result_id, base::BindOnce( - [](GetSearchResultContextMenuModelCallback callback, + [](GetContextMenuModelCallback callback, std::unique_ptr<ui::MenuModel> menu_model) { std::move(callback).Run( ash::menu_utils::GetMojoMenuItemsFromModel(menu_model.get())); @@ -188,6 +192,13 @@ model_updater_->OnItemUpdated(std::move(item)); } +void AppListClientImpl::ActiveUserChanged( + const user_manager::User* active_user) { + if (!active_user->is_profile_created()) + return; + UpdateProfile(); +} + void AppListClientImpl::UpdateProfile() { Profile* profile = ProfileManager::GetActiveUserProfile(); app_list::AppListSyncableService* syncable_service = @@ -223,12 +234,12 @@ DCHECK(!profile_->IsGuestSession() || profile_->IsOffTheRecord()) << "Guest mode must use incognito profile"; - TemplateURLService* template_url_service = - TemplateURLServiceFactory::GetForProfile(profile_); - template_url_service_observer_.Add(template_url_service); + template_url_service_observer_.Add( + TemplateURLServiceFactory::GetForProfile(profile_)); app_list::AppListSyncableService* syncable_service = app_list::AppListSyncableServiceFactory::GetForProfile(profile_); + model_updater_ = syncable_service->GetModelUpdater(); model_updater_->SetActive(true);
diff --git a/chrome/browser/ui/app_list/app_list_client_impl.h b/chrome/browser/ui/app_list/app_list_client_impl.h index a20d8cf..a6d3177a6 100644 --- a/chrome/browser/ui/app_list/app_list_client_impl.h +++ b/chrome/browser/ui/app_list/app_list_client_impl.h
@@ -17,6 +17,7 @@ #include "base/scoped_observer.h" #include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service_observer.h" +#include "components/user_manager/user_manager.h" #include "mojo/public/cpp/bindings/associated_binding.h" #include "mojo/public/cpp/bindings/binding.h" @@ -30,8 +31,10 @@ class AppSyncUIStateWatcher; class Profile; -class AppListClientImpl : public ash::mojom::AppListClient, - public TemplateURLServiceObserver { +class AppListClientImpl + : public ash::mojom::AppListClient, + public user_manager::UserManager::UserSessionStateObserver, + public TemplateURLServiceObserver { public: AppListClientImpl(); ~AppListClientImpl() override; @@ -63,8 +66,11 @@ void OnFolderDeleted(ash::mojom::AppListItemMetadataPtr item) override; void OnItemUpdated(ash::mojom::AppListItemMetadataPtr item) override; + // user_manager::UserManager::UserSessionStateObserver: + void ActiveUserChanged(const user_manager::User* active_user) override; + // Associates this client with the current active user, called when this - // client is accessed. + // client is accessed or active user is changed. void UpdateProfile(); void set_controller_delegate(AppListControllerDelegate* controller_delegate) {
diff --git a/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc b/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc index 4bf48b9..f27af8e 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
@@ -88,18 +88,17 @@ } void ArcAppContextMenu::ExecuteCommand(int command_id, int event_flags) { - switch (command_id) { - case LAUNCH_NEW: - delegate()->ExecuteLaunchCommand(event_flags); - break; - case UNINSTALL: - arc::ShowArcAppUninstallDialog(profile(), controller(), app_id()); - break; - case SHOW_APP_INFO: - ShowPackageInfo(); - break; - default: - app_list::AppContextMenu::ExecuteCommand(command_id, event_flags); + if (command_id == LAUNCH_NEW) { + delegate()->ExecuteLaunchCommand(event_flags); + } else if (command_id == UNINSTALL) { + arc::ShowArcAppUninstallDialog(profile(), controller(), app_id()); + } else if (command_id == SHOW_APP_INFO) { + ShowPackageInfo(); + } else if (command_id >= LAUNCH_APP_SHORTCUT_FIRST && + command_id <= LAUNCH_APP_SHORTCUT_LAST) { + ExecuteLaunchAppShortcutCommand(command_id); + } else { + app_list::AppContextMenu::ExecuteCommand(command_id, event_flags); } } @@ -132,17 +131,30 @@ void ArcAppContextMenu::OnGetAppShortcutItems( std::unique_ptr<ui::SimpleMenuModel> menu_model, GetMenuModelCallback callback, - std::unique_ptr<arc::ArcAppShortcutItems> shortcut_items) { - if (shortcut_items) { + std::unique_ptr<arc::ArcAppShortcutItems> app_shortcut_items) { + app_shortcut_items_ = std::move(app_shortcut_items); + if (app_shortcut_items_) { int command_id = LAUNCH_APP_SHORTCUT_FIRST; - DCHECK_LT(command_id + shortcut_items->size(), LAUNCH_APP_SHORTCUT_LAST); - for (const auto& item : *shortcut_items) + DCHECK_LT(command_id + app_shortcut_items_->size(), + LAUNCH_APP_SHORTCUT_LAST); + for (const auto& item : *app_shortcut_items_) menu_model->AddItemWithIcon(command_id++, item.short_label, item.icon); } std::move(callback).Run(std::move(menu_model)); arc_app_shortcuts_request_.reset(); } +void ArcAppContextMenu::ExecuteLaunchAppShortcutCommand(int command_id) { + DCHECK(command_id >= LAUNCH_APP_SHORTCUT_FIRST && + command_id <= LAUNCH_APP_SHORTCUT_LAST); + size_t index = command_id - LAUNCH_APP_SHORTCUT_FIRST; + DCHECK(app_shortcut_items_); + DCHECK_LT(index, app_shortcut_items_->size()); + arc::LaunchAppShortcutItem(profile(), app_id(), + app_shortcut_items_->at(index).shortcut_id, + controller()->GetAppListDisplayId()); +} + void ArcAppContextMenu::ShowPackageInfo() { const ArcAppListPrefs* arc_prefs = ArcAppListPrefs::Get(profile()); DCHECK(arc_prefs);
diff --git a/chrome/browser/ui/app_list/arc/arc_app_context_menu.h b/chrome/browser/ui/app_list/arc/arc_app_context_menu.h index 6658508..b60295e 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_context_menu.h +++ b/chrome/browser/ui/app_list/arc/arc_app_context_menu.h
@@ -45,10 +45,16 @@ void OnGetAppShortcutItems( std::unique_ptr<ui::SimpleMenuModel> menu_model, GetMenuModelCallback callback, - std::unique_ptr<arc::ArcAppShortcutItems> shortcut_items); + std::unique_ptr<arc::ArcAppShortcutItems> app_shortcut_items); + + // Executes launching app shortcut item. + void ExecuteLaunchAppShortcutCommand(int command_id); void ShowPackageInfo(); + // Caches the app shortcut items from OnGetAppShortcutItems(). + std::unique_ptr<arc::ArcAppShortcutItems> app_shortcut_items_; + // Handles requesting app shortcuts from Android. std::unique_ptr<arc::ArcAppShortcutsRequest> arc_app_shortcuts_request_;
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc index 3244e0f..bcb39dff 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -150,6 +150,15 @@ return true; } +// Returns primary display id if |display_id| is invalid. +int64_t GetValidDisplayId(int64_t display_id) { + if (display_id != display::kInvalidDisplayId) + return display_id; + if (auto* screen = display::Screen::GetScreen()) + return screen->GetPrimaryDisplay().id(); + return display::kInvalidDisplayId; +} + } // namespace const char kPlayStoreAppId[] = "cnbgggchhmkkdmeppjobngjoejnihlei"; @@ -184,7 +193,8 @@ arc::mojom::IntentHelperInstance* instance = GET_INTENT_HELPER_INSTANCE(HandleUrl); if (!instance) { - VLOG(1) << "Cannot find a mojo instance, ARC is unreachable"; + VLOG(1) << "Cannot find a mojo instance, ARC is unreachable or mojom" + << " version mismatch"; return false; } instance->HandleUrl(url, kPlayStorePackage); @@ -212,11 +222,6 @@ int64_t display_id) { DCHECK(!launch_intent.has_value() || !launch_intent->empty()); - if (display_id == display::kInvalidDisplayId) { - if (auto* screen = display::Screen::GetScreen()) - display_id = screen->GetPrimaryDisplay().id(); - } - Profile* const profile = Profile::FromBrowserContext(context); // Even when ARC is not allowed for the profile, ARC apps may still show up @@ -273,7 +278,7 @@ DCHECK(chrome_controller || !ash::Shell::HasInstance()); if (chrome_controller) { chrome_controller->GetArcDeferredLauncher()->RegisterDeferredLaunch( - app_id, event_flags, display_id); + app_id, event_flags, GetValidDisplayId(display_id)); // On some boards, ARC is booted with a restricted set of resources by // default to avoid slowing down Chrome's user session restoration. @@ -286,7 +291,37 @@ } arc::ArcBootPhaseMonitorBridge::RecordFirstAppLaunchDelayUMA(context); - return Launch(context, app_id, launch_intent, event_flags, display_id); + return Launch(context, app_id, launch_intent, event_flags, + GetValidDisplayId(display_id)); +} + +bool LaunchAppShortcutItem(content::BrowserContext* context, + const std::string& app_id, + const std::string& shortcut_id, + int64_t display_id) { + std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = + ArcAppListPrefs::Get(context)->GetApp(app_id); + if (!app_info) { + LOG(ERROR) << "App " << app_id << " is not available."; + return false; + } + + mojom::AppInstance* app_instance = + ArcServiceManager::Get() + ? ARC_GET_INSTANCE_FOR_METHOD( + ArcServiceManager::Get()->arc_bridge_service()->app(), + LaunchAppShortcutItem) + : nullptr; + + if (!app_instance) { + LOG(ERROR) << "Cannot find a mojo instance, ARC is unreachable or mojom" + << " version mismatch."; + return false; + } + + app_instance->LaunchAppShortcutItem(app_info->package_name, shortcut_id, + GetValidDisplayId(display_id)); + return true; } bool LaunchSettingsAppActivity(content::BrowserContext* context,
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.h b/chrome/browser/ui/app_list/arc/arc_app_utils.h index 89aa5974..9ec03a98 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_utils.h +++ b/chrome/browser/ui/app_list/arc/arc_app_utils.h
@@ -109,6 +109,12 @@ int event_flags, int64_t display_id); +// Launches App Shortcut that was published by Android's ShortcutManager. +bool LaunchAppShortcutItem(content::BrowserContext* context, + const std::string& app_id, + const std::string& shortcut_id, + int64_t display_id); + // Launches a specific activity within Settings app on ARC. bool LaunchSettingsAppActivity(content::BrowserContext* context, const std::string& activity,
diff --git a/chrome/browser/ui/ash/ash_util.cc b/chrome/browser/ui/ash/ash_util.cc index 88a1b9fb..5b6bf89 100644 --- a/chrome/browser/ui/ash/ash_util.cc +++ b/chrome/browser/ui/ash/ash_util.cc
@@ -5,7 +5,6 @@ #include "chrome/browser/ui/ash/ash_util.h" #include "ash/accelerators/accelerator_controller.h" -#include "ash/mojo_interface_factory.h" #include "ash/public/cpp/config.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/public/interfaces/event_properties.mojom.h" @@ -13,9 +12,6 @@ #include "base/macros.h" #include "chrome/browser/chromeos/ash_config.h" #include "mojo/public/cpp/bindings/type_converter.h" -#include "services/service_manager/public/cpp/binder_registry.h" -#include "services/service_manager/public/cpp/service.h" -#include "services/service_manager/public/mojom/interface_provider_spec.mojom.h" #include "services/ui/public/cpp/property_type_converters.h" #include "services/ui/public/interfaces/window_manager.mojom.h" #include "ui/aura/window_event_dispatcher.h" @@ -24,40 +20,6 @@ namespace ash_util { -namespace { - -class EmbeddedAshService : public service_manager::Service { - public: - explicit EmbeddedAshService( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) - : task_runner_(task_runner) {} - ~EmbeddedAshService() override {} - - // service_manager::Service: - void OnStart() override { - ash::mojo_interface_factory::RegisterInterfaces(&interfaces_, task_runner_); - } - - void OnBindInterface(const service_manager::BindSourceInfo& remote_info, - const std::string& interface_name, - mojo::ScopedMessagePipeHandle handle) override { - interfaces_.BindInterface(interface_name, std::move(handle)); - } - - private: - const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - service_manager::BinderRegistry interfaces_; - - DISALLOW_COPY_AND_ASSIGN(EmbeddedAshService); -}; - -} // namespace - -std::unique_ptr<service_manager::Service> CreateEmbeddedAshService( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { - return std::make_unique<EmbeddedAshService>(task_runner); -} - bool ShouldOpenAshOnStartup() { return !IsRunningInMash(); }
diff --git a/chrome/browser/ui/ash/ash_util.h b/chrome/browser/ui/ash/ash_util.h index 5fbd9a3..c6eeed5 100644 --- a/chrome/browser/ui/ash/ash_util.h +++ b/chrome/browser/ui/ash/ash_util.h
@@ -8,14 +8,8 @@ #include <memory> #include "ash/public/cpp/config.h" -#include "base/memory/ref_counted.h" -#include "base/single_thread_task_runner.h" #include "ui/views/widget/widget.h" -namespace service_manager { -class Service; -} - namespace ui { class Accelerator; class KeyEvent; @@ -23,11 +17,6 @@ namespace ash_util { -// Creates an in-process Service instance of which can host common ash -// interfaces. -std::unique_ptr<service_manager::Service> CreateEmbeddedAshService( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); - // Returns true if Ash should be run at startup. bool ShouldOpenAshOnStartup();
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc index 024bb20e5..a45f78f 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -3789,7 +3789,8 @@ EXPECT_EQ(1, app_icon_loader2->clear_count()); } -TEST_P(ChromeLauncherControllerWithArcTest, ArcAppPinPolicy) { +// Test is flaking. https://crbug.com/839916 +TEST_P(ChromeLauncherControllerWithArcTest, DISABLED_ArcAppPinPolicy) { InitLauncherControllerWithBrowser(); arc::mojom::AppInfo appinfo = CreateAppInfo("Some App", "SomeActivity", "com.example.app");
diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm index afbfa9f0..9e398ed 100644 --- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm +++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
@@ -901,8 +901,7 @@ // Copy the URL. GURL url; bool write_url = false; - model()->AdjustTextForCopy(selection.location, IsSelectAll(), &text, &url, - &write_url); + model()->AdjustTextForCopy(selection.location, &text, &url, &write_url); if (IsSelectAll()) UMA_HISTOGRAM_COUNTS(OmniboxEditModel::kCutOrCopyAllTextHistogram, 1);
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm index 38339f0..722b757 100644 --- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm +++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
@@ -354,11 +354,8 @@ base::FeatureList::IsEnabled(features::kEnableEmojiContextMenu)) { // The "Emoji" item is available near the top of the context menu, after // any "Look Up" of selected text. - menu_model_.InsertItemWithStringIdAt(index, IDC_CONTENT_CONTEXT_EMOJI, + menu_model_.InsertItemWithStringIdAt(index++, IDC_CONTENT_CONTEXT_EMOJI, IDS_CONTENT_CONTEXT_EMOJI); - menu_model_.SetIcon(index++, - ui::ResourceBundle::GetSharedInstance().GetImageNamed( - IDR_EMOJI_FAVICON)); menu_model_.InsertSeparatorAt(index++, ui::NORMAL_SEPARATOR); }
diff --git a/chrome/browser/ui/layout_constants.cc b/chrome/browser/ui/layout_constants.cc index d2acc921..f3d522d 100644 --- a/chrome/browser/ui/layout_constants.cc +++ b/chrome/browser/ui/layout_constants.cc
@@ -83,7 +83,7 @@ case TAB_STACK_DISTANCE: return touch_optimized_material ? 4 : 6; case TAB_STACK_TAB_WIDTH: - return touch_optimized_material ? 68 : 120; + return touch_optimized_material ? 160 : 120; case TAB_STANDARD_WIDTH: return touch_optimized_material ? 245 : 193; case TOOLBAR_ELEMENT_PADDING: {
diff --git a/chrome/browser/ui/libgtkui/print_dialog_gtk.cc b/chrome/browser/ui/libgtkui/print_dialog_gtk.cc index d1cd45a..ab15c73 100644 --- a/chrome/browser/ui/libgtkui/print_dialog_gtk.cc +++ b/chrome/browser/ui/libgtkui/print_dialog_gtk.cc
@@ -8,7 +8,9 @@ #include <algorithm> #include <cmath> +#include <memory> #include <string> +#include <utility> #include <vector> #include "base/bind.h" @@ -221,13 +223,13 @@ InitPrintSettings(&settings); } -bool PrintDialogGtk2::UpdateSettings(printing::PrintSettings* settings) { +void PrintDialogGtk2::UpdateSettings(printing::PrintSettings* settings) { if (!gtk_settings_) { gtk_settings_ = gtk_print_settings_copy(g_last_used_settings.Get().settings()); } - std::unique_ptr<GtkPrinterList> printer_list(new GtkPrinterList); + auto printer_list = std::make_unique<GtkPrinterList>(); printer_ = printer_list->GetPrinterWithName( base::UTF16ToUTF8(settings->device_name())); if (printer_) { @@ -269,6 +271,7 @@ gtk_print_settings_set(gtk_settings_, kCUPSDuplex, cups_duplex_mode); } #endif + if (!page_setup_) page_setup_ = gtk_page_setup_new(); @@ -317,7 +320,6 @@ : GTK_PAGE_ORIENTATION_PORTRAIT); InitPrintSettings(settings); - return true; } void PrintDialogGtk2::ShowDialog(
diff --git a/chrome/browser/ui/libgtkui/print_dialog_gtk.h b/chrome/browser/ui/libgtkui/print_dialog_gtk.h index 03d318b5..1bda606 100644 --- a/chrome/browser/ui/libgtkui/print_dialog_gtk.h +++ b/chrome/browser/ui/libgtkui/print_dialog_gtk.h
@@ -39,7 +39,7 @@ // printing::PrintDialogGtkInterface implementation. void UseDefaultSettings() override; - bool UpdateSettings(printing::PrintSettings* settings) override; + void UpdateSettings(printing::PrintSettings* settings) override; void ShowDialog( gfx::NativeView parent_view, bool has_selection,
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index a056dbe..2f24225 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -373,20 +373,6 @@ DCHECK(profile); profile_ = profile; -#if defined(OS_WIN) - // If the command line has the kNotificationLaunchId switch, then this - // Launch() call is from notification_helper.exe to process toast activation. - // Delegate to the notification system; do not open a browser window here. - if (command_line_.HasSwitch(switches::kNotificationLaunchId)) { - DCHECK(!command_line_.HasSwitch(switches::kAppId)); - if (NotificationPlatformBridgeWin::HandleActivation(command_line_)) { - RecordLaunchModeHistogram(LM_WIN_PLATFORM_NOTIFICATION); - return true; - } - return false; - } -#endif // defined(OS_WIN) - if (command_line_.HasSwitch(switches::kAppId)) { std::string app_id = command_line_.GetSwitchValueASCII(switches::kAppId); const Extension* extension = GetPlatformApp(profile, app_id); @@ -404,6 +390,19 @@ } } +#if defined(OS_WIN) + // If the command line has the kNotificationLaunchId switch, then this + // Launch() call is from notification_helper.exe to process toast activation. + // Delegate to the notification system; do not open a browser window here. + if (command_line_.HasSwitch(switches::kNotificationLaunchId)) { + if (NotificationPlatformBridgeWin::HandleActivation(command_line_)) { + RecordLaunchModeHistogram(LM_WIN_PLATFORM_NOTIFICATION); + return true; + } + return false; + } +#endif // defined(OS_WIN) + // Open the required browser windows and tabs. First, see if // we're being run as an application window. If so, the user // opened an app shortcut. Don't restore tabs or open initial
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index f16ad64c..233fd16c 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -1257,8 +1257,8 @@ cb->ReadText(clipboard_type, &selected_text); GURL url; bool write_url; - model()->AdjustTextForCopy(GetSelectedRange().GetMin(), IsSelectAll(), - &selected_text, &url, &write_url); + model()->AdjustTextForCopy(GetSelectedRange().GetMin(), &selected_text, &url, + &write_url); if (IsSelectAll()) UMA_HISTOGRAM_COUNTS(OmniboxEditModel::kCutOrCopyAllTextHistogram, 1); @@ -1269,15 +1269,14 @@ void OmniboxViewViews::OnWriteDragData(ui::OSExchangeData* data) { GURL url; bool write_url; - bool is_all_selected = IsSelectAll(); base::string16 selected_text = GetSelectedText(); - model()->AdjustTextForCopy(GetSelectedRange().GetMin(), is_all_selected, - &selected_text, &url, &write_url); + model()->AdjustTextForCopy(GetSelectedRange().GetMin(), &selected_text, &url, + &write_url); data->SetString(selected_text); if (write_url) { gfx::Image favicon; base::string16 title = selected_text; - if (is_all_selected) + if (IsSelectAll()) model()->GetDataForURLExport(&url, &title, &favicon); button_drag_utils::SetURLAndDragImage(url, title, favicon.AsImageSkia(), nullptr, *GetWidget(), data); @@ -1289,8 +1288,8 @@ base::string16 selected_text = GetSelectedText(); GURL url; bool write_url; - model()->AdjustTextForCopy(GetSelectedRange().GetMin(), IsSelectAll(), - &selected_text, &url, &write_url); + model()->AdjustTextForCopy(GetSelectedRange().GetMin(), &selected_text, &url, + &write_url); if (write_url) *drag_operations |= ui::DragDropTypes::DRAG_LINK; }
diff --git a/chrome/browser/ui/views/overlay/overlay_window_views.cc b/chrome/browser/ui/views/overlay/overlay_window_views.cc index 5230c576..7bc2dfd 100644 --- a/chrome/browser/ui/views/overlay/overlay_window_views.cc +++ b/chrome/browser/ui/views/overlay/overlay_window_views.cc
@@ -34,7 +34,7 @@ // TODO(apacible): Update sizes per UX feedback and when scaling is determined. // http://crbug.com/836389 const gfx::Size kCloseIconSize = gfx::Size(50, 50); -const gfx::Size kPlayPauseIconSize = gfx::Size(120, 120); +const gfx::Size kPlayPauseIconSize = gfx::Size(90, 90); } // namespace // OverlayWindow implementation of NonClientFrameView.
diff --git a/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc b/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc index f230b93..1d2c74c9 100644 --- a/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc
@@ -203,8 +203,10 @@ void PaymentHandlerWebFlowViewController::DidFinishNavigation( content::NavigationHandle* navigation_handle) { if (!OriginSecurityChecker::IsOriginSecure(navigation_handle->GetURL()) || - !OriginSecurityChecker::IsSchemeCryptographic( - navigation_handle->GetURL()) || + (!OriginSecurityChecker::IsSchemeCryptographic( + navigation_handle->GetURL()) && + !OriginSecurityChecker::IsOriginLocalhostOrFile( + navigation_handle->GetURL())) || !SslValidityChecker::IsSslCertificateValid( navigation_handle->GetWebContents())) { AbortPayment();
diff --git a/chrome/browser/ui/webui/discards/discards.mojom b/chrome/browser/ui/webui/discards/discards.mojom index b51e3b14..8dc372a 100644 --- a/chrome/browser/ui/webui/discards/discards.mojom +++ b/chrome/browser/ui/webui/discards/discards.mojom
@@ -25,6 +25,11 @@ bool is_media; // If the tab is currently discarded, this is true. bool is_discarded; + // If the tab is currently frozen, this is true. + // TODO(fmeawad): is_discarded and is_frozen are mutually exclusive, instead + // of representing each individually, we should add a "lifecycle_state" field + // instead. + bool is_frozen; // The number of times this tab has been discarded in the current browser // session. int32 discard_count;
diff --git a/chrome/browser/ui/webui/discards/discards_ui.cc b/chrome/browser/ui/webui/discards/discards_ui.cc index 64f8077..163fbf7 100644 --- a/chrome/browser/ui/webui/discards/discards_ui.cc +++ b/chrome/browser/ui/webui/discards/discards_ui.cc
@@ -87,6 +87,7 @@ info->visibility = GetLifecycleUnitVisibility(lifecycle_unit->GetVisibility()); info->is_media = tab_lifecycle_unit_external->IsMediaTab(); + info->is_frozen = tab_lifecycle_unit_external->IsFrozen(); info->is_discarded = tab_lifecycle_unit_external->IsDiscarded(); info->discard_count = tab_lifecycle_unit_external->GetDiscardCount(); info->utility_rank = rank++;
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc b/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc index 80fe9579..78b67d2 100644 --- a/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc +++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
@@ -97,6 +97,11 @@ return true; } +extensions::PrinterProviderAPI* GetPrinterProviderAPI(Profile* profile) { + return extensions::PrinterProviderAPIFactory::GetInstance() + ->GetForBrowserContext(profile); +} + } // namespace ExtensionPrinterHandler::ExtensionPrinterHandler(Profile* profile) @@ -138,22 +143,18 @@ weak_ptr_factory_.GetWeakPtr(), callback)); } - extensions::PrinterProviderAPIFactory::GetInstance() - ->GetForBrowserContext(profile_) - ->DispatchGetPrintersRequested( - base::Bind(&ExtensionPrinterHandler::WrapGetPrintersCallback, - weak_ptr_factory_.GetWeakPtr(), callback)); + GetPrinterProviderAPI(profile_)->DispatchGetPrintersRequested( + base::BindRepeating(&ExtensionPrinterHandler::WrapGetPrintersCallback, + weak_ptr_factory_.GetWeakPtr(), callback)); } void ExtensionPrinterHandler::StartGetCapability( const std::string& destination_id, GetCapabilityCallback callback) { - extensions::PrinterProviderAPIFactory::GetInstance() - ->GetForBrowserContext(profile_) - ->DispatchGetCapabilityRequested( - destination_id, - base::BindOnce(&ExtensionPrinterHandler::WrapGetCapabilityCallback, - weak_ptr_factory_.GetWeakPtr(), std::move(callback))); + GetPrinterProviderAPI(profile_)->DispatchGetCapabilityRequested( + destination_id, + base::BindOnce(&ExtensionPrinterHandler::WrapGetCapabilityCallback, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } void ExtensionPrinterHandler::StartPrint( @@ -175,12 +176,9 @@ cloud_devices::printer::ContentTypesCapability content_types; content_types.LoadFrom(printer_description); - const bool kUsePdf = content_types.Contains(kContentTypePdf) || + const bool use_pdf = content_types.Contains(kContentTypePdf) || content_types.Contains(kContentTypeAll); - - if (kUsePdf) { - // TODO(tbarzic): Consider writing larger PDF to disk and provide the data - // the same way as it's done with PWG raster. + if (use_pdf) { print_job->content_type = kContentTypePdf; print_job->document_bytes = print_data; DispatchPrintJob(std::move(callback), std::move(print_job)); @@ -222,12 +220,10 @@ DevicePermissionsManager::Get(profile_); permissions_manager->AllowUsbDevice(extension_id, device); - extensions::PrinterProviderAPIFactory::GetInstance() - ->GetForBrowserContext(profile_) - ->DispatchGetUsbPrinterInfoRequested( - extension_id, device, - base::BindOnce(&ExtensionPrinterHandler::WrapGetPrinterInfoCallback, - weak_ptr_factory_.GetWeakPtr(), std::move(callback))); + GetPrinterProviderAPI(profile_)->DispatchGetUsbPrinterInfoRequested( + extension_id, device, + base::BindOnce(&ExtensionPrinterHandler::WrapGetPrinterInfoCallback, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } void ExtensionPrinterHandler::SetPwgRasterConverterForTesting(
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler.h b/chrome/browser/ui/webui/print_preview/extension_printer_handler.h index ce7ab8f..6259a19 100644 --- a/chrome/browser/ui/webui/print_preview/extension_printer_handler.h +++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler.h
@@ -56,7 +56,6 @@ GetPrintersDoneCallback done_callback) override; void StartGetCapability(const std::string& destination_id, GetCapabilityCallback callback) override; - // TODO(tbarzic): It might make sense to have the strings in a single struct. void StartPrint(const std::string& destination_id, const std::string& capability, const base::string16& job_title,
diff --git a/chrome/browser/ui/webui/print_preview/printer_handler.h b/chrome/browser/ui/webui/print_preview/printer_handler.h index ec72a59..66f5f29d 100644 --- a/chrome/browser/ui/webui/print_preview/printer_handler.h +++ b/chrome/browser/ui/webui/print_preview/printer_handler.h
@@ -120,7 +120,6 @@ // |page_size|: The document page size. // |print_data|: The document bytes to print. // |callback| should be called in the response to the request. - // TODO(tbarzic): Page size should be extracted from print data. virtual void StartPrint( const std::string& destination_id, const std::string& capability,
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc index f9c8f31..8332032 100644 --- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
@@ -42,6 +42,7 @@ #include "chromeos/printing/printer_translator.h" #include "chromeos/printing/printing_constants.h" #include "chromeos/printing/uri_components.h" +#include "components/device_event_log/device_event_log.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_ui.h" @@ -66,6 +67,12 @@ } void OnRemovedPrinter(const Printer::PrinterProtocol& protocol, bool success) { + if (success) { + PRINTER_LOG(DEBUG) << "Printer removal succeeded."; + } else { + PRINTER_LOG(DEBUG) << "Printer removal failed."; + } + UMA_HISTOGRAM_ENUMERATION("Printing.CUPS.PrinterRemoved", protocol, Printer::PrinterProtocol::kProtocolMax); } @@ -95,7 +102,7 @@ auto optional = ParseUri(printer_uri); // Behavior for querying a non-IPP uri is undefined and disallowed. if (!IsIppUri(printer_uri) || !optional.has_value()) { - LOG(WARNING) << "Printer uri is invalid: " << printer_uri; + PRINTER_LOG(ERROR) << "Printer uri is invalid: " << printer_uri; callback.Run(false, "", "", "", false); return; } @@ -290,8 +297,8 @@ printer.set_display_name(printer_name); if (!profile_->GetPrefs()->GetBoolean(prefs::kUserNativePrintersAllowed)) { - LOG(WARNING) << "HandleAddCupsPrinter() called when " - "kUserNativePrintersAllowed is set to false"; + PRINTER_LOG(DEBUG) << "HandleAddCupsPrinter() called when " + "kUserNativePrintersAllowed is set to false"; // Used to log UMA metrics. OnAddedPrinterCommon(printer, PrinterSetupResult::kNativePrintersNotAllowed); @@ -300,6 +307,7 @@ return; } + PRINTER_LOG(USER) << "Comitting printer update"; printers_manager_->UpdateConfiguredPrinter(printer); // TODO(xdai): Replace "on-add-cups-printer" callback with Promise resolve @@ -309,6 +317,7 @@ } void CupsPrintersHandler::HandleRemoveCupsPrinter(const base::ListValue* args) { + PRINTER_LOG(USER) << "Removing printer"; std::string printer_id; std::string printer_name; CHECK(args->GetString(0, &printer_id)); @@ -368,6 +377,7 @@ DCHECK(printer_protocol == kIppScheme || printer_protocol == kIppsScheme) << "Printer info requests only supported for IPP and IPPS printers"; + PRINTER_LOG(DEBUG) << "Querying printer info"; std::string printer_uri = base::StringPrintf("%s://%s/%s", printer_protocol.c_str(), printer_address.c_str(), printer_queue.c_str()); @@ -396,10 +406,13 @@ printer->set_manufacturer(make); printer->set_model(model); printer->set_make_and_model(make_and_model); + PRINTER_LOG(DEBUG) << "Printer queried for make and model " + << make_and_model; } // Autoconfig available, use it. if (ipp_everywhere) { + PRINTER_LOG(DEBUG) << "Performing autoconf setup"; printer->mutable_ppd_reference()->autoconf = true; printer_configurer_->SetUpPrinter( *printer, base::Bind(&CupsPrintersHandler::OnAddedDiscoveredPrinter, @@ -411,6 +424,7 @@ // We don't have enough from discovery to configure the printer. Fill in as // much information as we can about the printer, and ask the user to supply // the rest. + PRINTER_LOG(EVENT) << "Could not query printer. Fallback to asking the user"; FireManuallyAddDiscoveredPrinter(*printer); } @@ -423,12 +437,16 @@ RecordIppQuerySuccess(success); if (!success) { + PRINTER_LOG(DEBUG) << "Could not query printer"; base::DictionaryValue reject; reject.SetString("message", "Querying printer failed"); RejectJavascriptCallback(base::Value(callback_id), reject); return; } + PRINTER_LOG(DEBUG) << "Resolved printer information: make_and_model(" + << make_and_model << ") autoconf(" << ipp_everywhere + << ")"; base::DictionaryValue info; info.SetString("manufacturer", make); info.SetString("model", model); @@ -445,14 +463,14 @@ std::unique_ptr<Printer> printer = DictToPrinter(*printer_dict); if (!printer) { - LOG(ERROR) << "Failed to parse printer URI"; + PRINTER_LOG(ERROR) << "Failed to parse printer URI"; OnAddPrinterError(PrinterSetupResult::kFatalError); return; } if (!profile_->GetPrefs()->GetBoolean(prefs::kUserNativePrintersAllowed)) { - LOG(WARNING) << "HandleAddCupsPrinter() called when " - "kUserNativePrintersAllowed is set to false"; + PRINTER_LOG(DEBUG) << "HandleAddCupsPrinter() called when " + "kUserNativePrintersAllowed is set to false"; // Used to log UMA metrics. OnAddedPrinterCommon(*printer, PrinterSetupResult::kNativePrintersNotAllowed); @@ -522,8 +540,8 @@ printer->set_make_and_model(ppd_model); } } else { - // TODO(crbug.com/738514): Support PPD guessing for non-autoconf printers. - // i.e. !autoconf && !manufacturer.empty() && !model.empty() + // TODO(https://crbug.com/738514): Support PPD guessing for non-autoconf + // printers. i.e. !autoconf && !manufacturer.empty() && !model.empty() NOTREACHED() << "A configuration option must have been selected to add a printer"; } @@ -541,30 +559,32 @@ case PrinterSetupResult::kSuccess: UMA_HISTOGRAM_ENUMERATION("Printing.CUPS.PrinterAdded", printer.GetProtocol(), Printer::kProtocolMax); + PRINTER_LOG(USER) << "Performing printer setup"; printers_manager_->PrinterInstalled(printer); printers_manager_->UpdateConfiguredPrinter(printer); return; case PrinterSetupResult::kPpdNotFound: - LOG(WARNING) << "Could not locate requested PPD"; + PRINTER_LOG(ERROR) << "Could not locate requested PPD"; break; case PrinterSetupResult::kPpdTooLarge: - LOG(WARNING) << "PPD is too large"; + PRINTER_LOG(ERROR) << "PPD is too large"; break; case PrinterSetupResult::kPpdUnretrievable: - LOG(WARNING) << "Could not retrieve PPD from server"; + PRINTER_LOG(ERROR) << "Could not retrieve PPD from server"; break; case PrinterSetupResult::kInvalidPpd: - LOG(WARNING) << "Provided PPD is invalid."; + PRINTER_LOG(ERROR) << "Provided PPD is invalid."; break; case PrinterSetupResult::kPrinterUnreachable: - LOG(WARNING) << "Could not contact printer for configuration"; + PRINTER_LOG(ERROR) << "Could not contact printer for configuration"; break; case PrinterSetupResult::kDbusError: case PrinterSetupResult::kFatalError: - LOG(ERROR) << "Unrecoverable error. Reboot required."; + PRINTER_LOG(ERROR) << "Unrecoverable error. Reboot required."; break; case PrinterSetupResult::kNativePrintersNotAllowed: - LOG(ERROR) << "Unable to add or edit printer due to enterprise policy."; + PRINTER_LOG(ERROR) + << "Unable to add or edit printer due to enterprise policy."; break; case PrinterSetupResult::kMaxValue: NOTREACHED() << "This is not an expected value"; @@ -583,7 +603,8 @@ FireWebUIListener("on-add-cups-printer", base::Value(result_code), base::Value(printer.display_name())); } else { - // TODO(crubg.com/836434): Log in printer log. + PRINTER_LOG(EVENT) << "Automatic setup failed for discovered printer. " + "Fall back to manual."; // Could not set up printer. Asking user for manufacturer data. FireManuallyAddDiscoveredPrinter(printer); } @@ -592,12 +613,14 @@ void CupsPrintersHandler::OnAddedSpecifiedPrinter( const Printer& printer, PrinterSetupResult result_code) { + PRINTER_LOG(EVENT) << "Add manual printer: " << result_code; OnAddedPrinterCommon(printer, result_code); FireWebUIListener("on-add-cups-printer", base::Value(result_code), base::Value(printer.display_name())); } void CupsPrintersHandler::OnAddPrinterError(PrinterSetupResult result_code) { + PRINTER_LOG(EVENT) << "Add printer error: " << result_code; FireWebUIListener("on-add-cups-printer", base::Value(result_code), base::Value("")); } @@ -719,6 +742,7 @@ } void CupsPrintersHandler::HandleStartDiscovery(const base::ListValue* args) { + PRINTER_LOG(DEBUG) << "Start printer discovery"; discovery_active_ = true; OnPrintersChanged( CupsPrintersManager::kAutomatic, @@ -732,6 +756,7 @@ } void CupsPrintersHandler::HandleStopDiscovery(const base::ListValue* args) { + PRINTER_LOG(DEBUG) << "Stop printer discovery"; discovered_printers_.clear(); automatic_printers_.clear(); @@ -742,6 +767,7 @@ } void CupsPrintersHandler::HandleSetUpCancel(const base::ListValue* args) { + PRINTER_LOG(DEBUG) << "Printer setup cancelled"; const base::DictionaryValue* printer_dict; CHECK(args->GetDictionary(0, &printer_dict)); @@ -788,8 +814,10 @@ std::string printer_id; CHECK(args->GetString(0, &printer_id)); + PRINTER_LOG(USER) << "Adding discovered printer"; std::unique_ptr<Printer> printer = printers_manager_->GetPrinter(printer_id); if (printer == nullptr) { + PRINTER_LOG(ERROR) << "Discovered printer disappeared"; // Printer disappeared, so we don't have information about it anymore and // can't really do much. Fail the add. FireWebUIListener("on-add-cups-printer", base::Value(false), @@ -799,6 +827,7 @@ auto optional = printer->GetUriComponents(); if (!optional.has_value()) { + PRINTER_LOG(DEBUG) << "Could not parse uri"; // The printer uri was not parsed successfully. Fail the add. FireWebUIListener("on-add-cups-printer", base::Value(false), base::Value(printer_id)); @@ -808,6 +837,7 @@ if (printer->ppd_reference().autoconf || !printer->ppd_reference().effective_make_and_model.empty() || !printer->ppd_reference().user_supplied_ppd_url.empty()) { + PRINTER_LOG(EVENT) << "Start setup of discovered printer"; // If we have something that looks like a ppd reference for this printer, // try to configure it. printer_configurer_->SetUpPrinter( @@ -820,11 +850,13 @@ // see if we want to try IPP. const std::string printer_uri = printer->effective_uri(); if (IsIppUri(printer_uri)) { + PRINTER_LOG(EVENT) << "Query printer for IPP attributes"; QueryAutoconf( printer_uri, base::Bind(&CupsPrintersHandler::OnAutoconfQueriedDiscovered, weak_factory_.GetWeakPtr(), base::Passed(&printer))); } else { + PRINTER_LOG(EVENT) << "Request make and model from user"; // If it's not an IPP printer, the user must choose a PPD. FireManuallyAddDiscoveredPrinter(*printer); }
diff --git a/chrome/browser/ui/webui/welcome_ui.cc b/chrome/browser/ui/webui/welcome_ui.cc index 9b92675..16af715 100644 --- a/chrome/browser/ui/webui/welcome_ui.cc +++ b/chrome/browser/ui/webui/welcome_ui.cc
@@ -47,12 +47,6 @@ content::WebUIDataSource* html_source = content::WebUIDataSource::Create(url.host()); - // Check URL for variations. - std::string value; - bool is_everywhere_variant = - (net::GetValueForKeyInQuery(url, "variant", &value) && - value == "everywhere"); - bool is_dice = signin::IsDiceEnabledForProfile(profile->GetPrefs()); // There are multiple possible configurations that affects the layout, but @@ -61,9 +55,9 @@ html_source->AddResourcePath("logo.png", IDR_PRODUCT_LOGO_128); html_source->AddResourcePath("logo2x.png", IDR_PRODUCT_LOGO_256); - // Use special layout if it's branded, DICE is enabled, and it's the first - // run. otherwise use the default layout. - if (kIsBranded && is_dice && !is_everywhere_variant) { + // Use special layout if the application is branded and DICE is enabled. + // Otherwise use the default layout. + if (kIsBranded && is_dice) { html_source->AddLocalizedString("headerText", IDS_WELCOME_HEADER); html_source->AddLocalizedString("secondHeaderText", IDS_DICE_WELCOME_SECOND_HEADER); @@ -71,14 +65,21 @@ IDS_DICE_WELCOME_DESCRIPTION); html_source->AddLocalizedString("declineText", IDS_DICE_WELCOME_DECLINE_BUTTON); - html_source->AddResourcePath("welcome_browser_proxy.html", IDR_DICE_WELCOME_BROWSER_PROXY_HTML); - html_source->AddResourcePath("welcome_browser_proxy.js", IDR_DICE_WELCOME_BROWSER_PROXY_JS); + html_source->AddResourcePath("welcome_browser_proxy.html", + IDR_DICE_WELCOME_BROWSER_PROXY_HTML); + html_source->AddResourcePath("welcome_browser_proxy.js", + IDR_DICE_WELCOME_BROWSER_PROXY_JS); html_source->AddResourcePath("welcome_app.html", IDR_DICE_WELCOME_APP_HTML); html_source->AddResourcePath("welcome_app.js", IDR_DICE_WELCOME_APP_JS); html_source->AddResourcePath("welcome.css", IDR_DICE_WELCOME_CSS); html_source->SetDefaultResource(IDR_DICE_WELCOME_HTML); } else { - // Use default layout for non-DICE, non-first run, or unbranded build. + // Use default layout for non-DICE or unbranded build. + std::string value; + bool is_everywhere_variant = + (net::GetValueForKeyInQuery(url, "variant", &value) && + value == "everywhere"); + if (kIsBranded) { base::string16 subheader = is_everywhere_variant
diff --git a/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.html b/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.html index 1b28273..b46772d 100644 --- a/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.html +++ b/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.html
@@ -13,6 +13,9 @@ <body> <div id="buttonDiv"> </div> + <div> + <p>Choose a different background color!</p> + </div> </body> <script src="options.js"></script> </html>
diff --git a/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.js b/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.js index 43070b0..94f8e545b 100644 --- a/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.js +++ b/chrome/common/extensions/docs/examples/tutorials/get_started_complete/options.js
@@ -4,6 +4,7 @@ 'use strict'; +let page = document.getElementById('buttonDiv'); const kButtonColors = ['#3aa757', '#e8453c', '#f9bb2d', '#4688f1']; function constructOptions(kButtonColors) { for (let item of kButtonColors) {
diff --git a/chrome/common/extensions/docs/templates/articles/getstarted.html b/chrome/common/extensions/docs/templates/articles/getstarted.html index 026b36ec..2a5d16a 100644 --- a/chrome/common/extensions/docs/templates/articles/getstarted.html +++ b/chrome/common/extensions/docs/templates/articles/getstarted.html
@@ -392,7 +392,7 @@ <b>chrome.tabs.executeScript(</b> <b>tabs[0].id,</b> <b>{code: 'document.body.style.backgroundColor = "' + color + '";'});</b> - <b>}); + <b>});</b> <b>};</b> </pre> <p> @@ -453,6 +453,9 @@ <body> <div id="buttonDiv"> </div> + <div> + <p>Choose a different background color!</p> + </div> </body> <script src="options.js"></script> </html> @@ -492,6 +495,7 @@ download="options.js">here</a>. </p> <pre data-filename="options.js"> + let page = document.getElementById('buttonDiv'); const kButtonColors = ['#3aa757', '#e8453c', '#f9bb2d', '#4688f1']; function constructOptions(kButtonColors) { for (let item of kButtonColors) {
diff --git a/chrome/test/base/chrome_test_suite.cc b/chrome/test/base/chrome_test_suite.cc index 40750fb0..e969d301 100644 --- a/chrome/test/base/chrome_test_suite.cc +++ b/chrome/test/base/chrome_test_suite.cc
@@ -16,6 +16,7 @@ #include "build/build_config.h" #include "chrome/app/chrome_main_delegate.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/url_constants.h" @@ -86,6 +87,12 @@ ChromeMainDelegate::kNonWildcardDomainNonPortSchemes, ChromeMainDelegate::kNonWildcardDomainNonPortSchemesSize); + // Desktop Identity Consistency (a.k.a. DICE) requires API keys to be + // configured as they are needed for regular web sign-in flows to Google. + // Ignore this requiement for unit and browser tests to make sure that the + // DICE feature gets the right test coverage. + AccountConsistencyModeManager::SetIgnoreMissingApiKeysForTesting(); + #if defined(OS_MACOSX) // Look in the framework bundle for resources. base::FilePath path;
diff --git a/chrome/test/chromedriver/chrome/device_manager.cc b/chrome/test/chromedriver/chrome/device_manager.cc index f2224a35..d9f47ed 100644 --- a/chrome/test/chromedriver/chrome/device_manager.cc +++ b/chrome/test/chromedriver/chrome/device_manager.cc
@@ -18,8 +18,6 @@ #include "chrome/test/chromedriver/chrome/adb.h" #include "chrome/test/chromedriver/chrome/status.h" -// TODO(craigdh): Remove once Chromedriver no longer supports pre-m33 Chrome. -const char kChromeCmdLineFileBeforeM33[] = "/data/local/chrome-command-line"; const char kChromeCmdLineFile[] = "/data/local/tmp/chrome-command-line"; Device::Device( @@ -60,6 +58,7 @@ std::string command_line_file; std::string known_device_socket; std::string known_exec_name; + bool use_debug_flag = false; if (package.compare("org.chromium.content_shell_apk") == 0) { // Chromium content shell. known_activity = ".ContentShellActivity"; @@ -71,22 +70,35 @@ // Chrome. known_activity = "com.google.android.apps.chrome.Main"; known_device_socket = "chrome_devtools_remote"; - command_line_file = kChromeCmdLineFileBeforeM33; + command_line_file = kChromeCmdLineFile; known_exec_name = "chrome"; - status = adb_->SetDebugApp(serial_, package); - if (status.IsError()) - return status; + use_debug_flag = true; } else if (!exec_name.empty() && IsValidExecName(exec_name)) { + // Allow directly specifying executable file name -- uncommon scenario. known_exec_name = exec_name; known_device_socket = device_socket; command_line_file = base::StringPrintf("/data/local/tmp/%s_devtools_remote", exec_name.c_str()); - status = adb_->SetDebugApp(serial_, package); - if (status.IsError()) - return status; + use_debug_flag = true; } if (!use_running_app) { + if (use_debug_flag) { + // Some apps (such as Google Chrome) read command line from different + // locations depending on if the app debug flag is set. When the debug + // flag is not set, they use a location not writable by ChromeDriver + // (except on rooted devices). Setting the debug flag allows the apps to + // read command line from a location writable by ChromeDriver. + // + // This is needed only when use_running_app is false, for two reasons: + // * It's too late to set the command line if the app is already running. + // * Setting the debug flag has the side effect of shutting down the app, + // preventing use_running_app from working. + status = adb_->SetDebugApp(serial_, package); + if (status.IsError()) + return status; + } + status = adb_->ClearAppData(serial_, package); if (status.IsError()) return status; @@ -101,23 +113,13 @@ } if (!command_line_file.empty()) { - // If Chrome is set as the debug app it looks in /data/local/tmp/. - // There's no way to know if this is set, so write to both locations. - // This can be removed once support for pre-M33 is no longer needed. - if (command_line_file == kChromeCmdLineFileBeforeM33) { - status = adb_->SetCommandLineFile(serial_, kChromeCmdLineFileBeforeM33, - known_exec_name, args); - Status status2 = adb_->SetCommandLineFile(serial_, kChromeCmdLineFile, - known_exec_name, args); - if (status.IsError() && status2.IsError()) - return Status(kUnknownError, - "Failed to set Chrome's command line file on device " + serial_); - } else { - status = adb_->SetCommandLineFile(serial_, command_line_file, - known_exec_name, args); - if (status.IsError()) - return status; - } + status = adb_->SetCommandLineFile(serial_, command_line_file, + known_exec_name, args); + if (status.IsError()) + return Status( + kUnknownError, + "Failed to set Chrome's command line file on device " + serial_, + status); } status = adb_->Launch(serial_, package,
diff --git a/chrome/test/data/installer/zucchini_archive.diff b/chrome/test/data/installer/zucchini_archive.diff index 896be379..c7886de 100644 --- a/chrome/test/data/installer/zucchini_archive.diff +++ b/chrome/test/data/installer/zucchini_archive.diff Binary files differ
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 4b91557..962c5fd 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -2131,7 +2131,7 @@ }, "HideWebStoreIcon": { - "os": ["win", "linux", "mac"], + "os": ["win", "linux", "mac", "chromeos"], "test_policy": { "HideWebStoreIcon": true }, "pref_mappings": [ { "pref": "hide_web_store_icon" }
diff --git a/chrome/test/data/webui/discards/discards_browsertest.js b/chrome/test/data/webui/discards/discards_browsertest.js index 5e1308c..44162206 100644 --- a/chrome/test/data/webui/discards/discards_browsertest.js +++ b/chrome/test/data/webui/discards/discards_browsertest.js
@@ -22,6 +22,7 @@ tabUrl: 'http://urlone.com', visibility: 0, isMedia: false, + isFrozen: false, isDiscarded: false, isAutoDiscardable: false, discardCount: 0, @@ -33,6 +34,7 @@ tabUrl: 'http://urltwo.com', visibility: 1, isMedia: true, + isFrozen: true, isDiscarded: true, isAutoDiscardable: true, discardCount: 1, @@ -40,7 +42,7 @@ lastActiveSeconds: 1 }; - ['title', 'tabUrl', 'visibility', 'isMedia', 'isDiscarded', + ['title', 'tabUrl', 'visibility', 'isMedia', 'isFrozen', 'isDiscarded', 'isAutoDiscardable', 'discardCount', 'utilityRank', 'lastActiveSeconds'] .forEach((sortKey) => { assertTrue(
diff --git a/chromecast/media/cma/backend/stream_mixer_unittest.cc b/chromecast/media/cma/backend/stream_mixer_unittest.cc index b06a4d2..7d8bf3e 100644 --- a/chromecast/media/cma/backend/stream_mixer_unittest.cc +++ b/chromecast/media/cma/backend/stream_mixer_unittest.cc
@@ -443,13 +443,13 @@ mixer_ = std::make_unique<StreamMixer>(std::move(output), nullptr, base::ThreadTaskRunnerHandle::Get()); mixer_->SetVolume(AudioContentType::kMedia, 1.0f); - std::string test_pipeline_json = base::StringPrintf( kTestPipelineJsonTemplate, kDelayModuleSolib, kDefaultProcessorDelay, kDelayModuleSolib, kTtsProcessorDelay, kDelayModuleSolib, kMixProcessorDelay, kDelayModuleSolib, kLinearizeProcessorDelay); auto factory = std::make_unique<MockPostProcessorFactory>(); pp_factory_ = factory.get(); + mixer_->SetNumOutputChannelsForTest(2); mixer_->ResetPostProcessorsForTest(std::move(factory), test_pipeline_json); CHECK_EQ(pp_factory_->instances.size(), static_cast<size_t>(kNumPostProcessors));
diff --git a/components/arc/common/app.mojom b/components/arc/common/app.mojom index 2f64b9c9..639ea88 100644 --- a/components/arc/common/app.mojom +++ b/components/arc/common/app.mojom
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Next MinVersion: 30 +// Next MinVersion: 31 module arc.mojom; @@ -281,7 +281,7 @@ }; // TODO(lhchavez): Migrate all request/response messages to Mojo. -// Next method ID: 24 +// Next method ID: 25 interface AppInstance { // DEPRECATED: Please use Init@21 instead. InitDeprecated@0(AppHost host_ptr); @@ -311,6 +311,11 @@ [MinVersion=23] LaunchApp@18(string package_name, string activity, int64 display_id); + // Sends a request to ARC for the Android launcher to launch the specified app + // shortcut. + [MinVersion=30] LaunchAppShortcutItem@24( + string package_name, string shortcut_id, int64 display_id); + [MinVersion=9] LaunchIntentDeprecated@12(string intent_uri, Rect? dimension_on_screen);
diff --git a/components/arc/test/fake_app_instance.cc b/components/arc/test/fake_app_instance.cc index dea8d47..871820d4 100644 --- a/components/arc/test/fake_app_instance.cc +++ b/components/arc/test/fake_app_instance.cc
@@ -74,6 +74,12 @@ launch_requests_.push_back(std::make_unique<Request>(package_name, activity)); } +void FakeAppInstance::LaunchAppShortcutItem(const std::string& package_name, + const std::string& shortcut_id, + int64_t display_id) { + ++launch_app_shortcut_item_count_; +} + void FakeAppInstance::RequestAppIcon(const std::string& package_name, const std::string& activity, mojom::ScaleFactor scale_factor) {
diff --git a/components/arc/test/fake_app_instance.h b/components/arc/test/fake_app_instance.h index 3149c178..fd76878 100644 --- a/components/arc/test/fake_app_instance.h +++ b/components/arc/test/fake_app_instance.h
@@ -88,6 +88,9 @@ void LaunchApp(const std::string& package_name, const std::string& activity, int64_t display_id) override; + void LaunchAppShortcutItem(const std::string& package_name, + const std::string& shortcut_id, + int64_t display_id) override; void RequestAppIcon(const std::string& package_name, const std::string& activity, mojom::ScaleFactor scale_factor) override; @@ -170,6 +173,10 @@ int start_pai_request_count() const { return start_pai_request_count_; } + int launch_app_shortcut_item_count() const { + return launch_app_shortcut_item_count_; + } + const std::vector<std::unique_ptr<Request>>& launch_requests() const { return launch_requests_; } @@ -195,6 +202,8 @@ int refresh_app_list_count_ = 0; // Number of requests to start PAI flows. int start_pai_request_count_ = 0; + // Keeps information about launch app shortcut requests. + int launch_app_shortcut_item_count_ = 0; // Keeps information about launch requests. std::vector<std::unique_ptr<Request>> launch_requests_; // Keeps information about launch intents.
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc index 9ba54632..b9e5ff5 100644 --- a/components/autofill/core/browser/autofill_manager.cc +++ b/components/autofill/core/browser/autofill_manager.cc
@@ -229,9 +229,6 @@ registry->RegisterBooleanPref( prefs::kAutofillEnabled, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - registry->RegisterBooleanPref( - prefs::kAutofillProfileUseDatesFixed, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterIntegerPref( prefs::kAutofillLastVersionDeduped, 0, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); @@ -556,9 +553,11 @@ if (autofill_field->Type().group() == CREDIT_CARD) { is_filling_credit_card = true; driver()->DidInteractWithCreditCardForm(); - credit_card_form_event_logger_->OnDidInteractWithAutofillableForm(); + credit_card_form_event_logger_->OnDidInteractWithAutofillableForm( + form_structure->form_signature()); } else { - address_form_event_logger_->OnDidInteractWithAutofillableForm(); + address_form_event_logger_->OnDidInteractWithAutofillableForm( + form_structure->form_signature()); } }
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc index 10b4aa6..0ea4bbee 100644 --- a/components/autofill/core/browser/autofill_metrics.cc +++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -1236,6 +1236,7 @@ bool is_for_credit_card, const std::set<FormType>& form_types, const base::TimeTicks& form_parsed_timestamp, + FormSignature form_signature, AutofillMetrics::FormInteractionsUkmLogger* form_interactions_ukm_logger) { UMA_HISTOGRAM_ENUMERATION("Autofill.FormSubmittedState", state, AUTOFILL_FORM_SUBMITTED_STATE_ENUM_SIZE); @@ -1271,7 +1272,8 @@ break; } form_interactions_ukm_logger->LogFormSubmitted(is_for_credit_card, form_types, - state, form_parsed_timestamp); + state, form_parsed_timestamp, + form_signature); } // static @@ -1372,12 +1374,13 @@ logged_suggestion_filled_was_masked_server_card_(false), form_interactions_ukm_logger_(form_interactions_ukm_logger) {} -void AutofillMetrics::FormEventLogger::OnDidInteractWithAutofillableForm() { +void AutofillMetrics::FormEventLogger::OnDidInteractWithAutofillableForm( + FormSignature form_signature) { if (!has_logged_interacted_) { has_logged_interacted_ = true; form_interactions_ukm_logger_->LogInteractedWithForm( is_for_credit_card_, local_record_type_count_, - server_record_type_count_); + server_record_type_count_, form_signature); Log(AutofillMetrics::FORM_EVENT_INTERACTED_ONCE); } } @@ -1622,7 +1625,8 @@ void AutofillMetrics::FormInteractionsUkmLogger::LogInteractedWithForm( bool is_for_credit_card, size_t local_record_type_count, - size_t server_record_type_count) { + size_t server_record_type_count, + FormSignature form_signature) { if (!CanLog()) return; @@ -1633,6 +1637,7 @@ .SetIsForCreditCard(is_for_credit_card) .SetLocalRecordTypeCount(local_record_type_count) .SetServerRecordTypeCount(server_record_type_count) + .SetFormSignature(HashFormSignature(form_signature)) .Record(ukm_recorder_); } @@ -1770,7 +1775,8 @@ bool is_for_credit_card, const std::set<FormType>& form_types, AutofillFormSubmittedState state, - const base::TimeTicks& form_parsed_timestamp) { + const base::TimeTicks& form_parsed_timestamp, + FormSignature form_signature) { if (!CanLog()) return; @@ -1780,7 +1786,8 @@ ukm::builders::Autofill_FormSubmitted builder(source_id_); builder.SetAutofillFormSubmittedState(static_cast<int>(state)) .SetIsForCreditCard(is_for_credit_card) - .SetFormTypes(FormTypesToBitVector(form_types)); + .SetFormTypes(FormTypesToBitVector(form_types)) + .SetFormSignature(HashFormSignature(form_signature)); if (form_parsed_timestamp.is_null()) DCHECK(state == NON_FILLABLE_FORM_OR_NEW_DATA || state == FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS)
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h index 168541d..c55724f0 100644 --- a/components/autofill/core/browser/autofill_metrics.h +++ b/components/autofill/core/browser/autofill_metrics.h
@@ -665,7 +665,8 @@ void OnFormsParsed(const GURL& url); void LogInteractedWithForm(bool is_for_credit_card, size_t local_record_type_count, - size_t server_record_type_count); + size_t server_record_type_count, + FormSignature form_signature); void LogSuggestionsShown(const AutofillField& field, const base::TimeTicks& form_parsed_timestamp); void LogSelectedMaskedServerCard( @@ -687,7 +688,8 @@ void LogFormSubmitted(bool is_for_credit_card, const std::set<FormType>& form_types, AutofillFormSubmittedState state, - const base::TimeTicks& form_parsed_timestamp); + const base::TimeTicks& form_parsed_timestamp, + FormSignature form_signature); // We initialize |url_| with the form's URL when we log the first form // interaction. Later, we may update |url_| with the |source_url()| for the @@ -926,6 +928,7 @@ bool is_for_credit_card, const std::set<FormType>& form_types, const base::TimeTicks& form_parsed_timestamp, + FormSignature form_signature, FormInteractionsUkmLogger* form_interactions_ukm_logger); // This should be called when determining the heuristic types for a form's @@ -1004,7 +1007,7 @@ is_context_secure_ = is_context_secure; } - void OnDidInteractWithAutofillableForm(); + void OnDidInteractWithAutofillableForm(FormSignature form_signature); void OnDidPollSuggestions(const FormFieldData& field);
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc index fcbde8a..d6b497ea 100644 --- a/components/autofill/core/browser/autofill_metrics_unittest.cc +++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -145,7 +145,9 @@ {UkmSuggestionFilledType::kMillisecondsSinceFormParsedName, 0}, {UkmFormSubmittedType::kIsForCreditCardName, is_for_credit_card}, {UkmFormSubmittedType::kFormTypesName, - AutofillMetrics::FormTypesToBitVector(form_types)}}}); + AutofillMetrics::FormTypesToBitVector(form_types)}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}}); } void AppendFieldFillStatusUkm(const FormData& form, @@ -4155,15 +4157,17 @@ {UkmSuggestionFilledType::kMillisecondsSinceFormParsedName, 0}, {UkmFormSubmittedType::kIsForCreditCardName, true}, {UkmFormSubmittedType::kFormTypesName, - AutofillMetrics::FormTypesToBitVector( - {FormType::CREDIT_CARD_FORM})}}, + AutofillMetrics::FormTypesToBitVector({FormType::CREDIT_CARD_FORM})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}, {{UkmFormSubmittedType::kAutofillFormSubmittedStateName, AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, {UkmSuggestionFilledType::kMillisecondsSinceFormParsedName, 0}, {UkmFormSubmittedType::kIsForCreditCardName, true}, {UkmFormSubmittedType::kFormTypesName, - AutofillMetrics::FormTypesToBitVector( - {FormType::CREDIT_CARD_FORM})}}}); + AutofillMetrics::FormTypesToBitVector({FormType::CREDIT_CARD_FORM})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}}); histogram_tester.ExpectBucketCount( "Autofill.FormEvents.CreditCard", @@ -5332,7 +5336,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics); @@ -5366,7 +5372,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics); @@ -5404,7 +5412,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, @@ -5445,7 +5455,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics); @@ -5479,7 +5491,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics); @@ -5514,7 +5528,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics); @@ -5552,7 +5568,9 @@ {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, AutofillMetrics::FormTypesToBitVector( - {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}}); + {FormType::ADDRESS_FORM, FormType::UNKNOWN_FORM_TYPE})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics); @@ -5625,7 +5643,9 @@ {UkmSuggestionFilledType::kMillisecondsSinceFormParsedName, 0}, {UkmFormSubmittedType::kIsForCreditCardName, false}, {UkmFormSubmittedType::kFormTypesName, - AutofillMetrics::FormTypesToBitVector({FormType::ADDRESS_FORM})}}); + AutofillMetrics::FormTypesToBitVector({FormType::ADDRESS_FORM})}, + {UkmFormSubmittedType::kFormSignatureName, + Collapse(CalculateFormSignature(form))}}); VerifyFormInteractionUkm(test_ukm_recorder_, form, UkmFormSubmittedType::kEntryName, expected_form_submission_ukm_metrics);
diff --git a/components/autofill/core/browser/form_data_importer_unittest.cc b/components/autofill/core/browser/form_data_importer_unittest.cc index 6d558805..5047414 100644 --- a/components/autofill/core/browser/form_data_importer_unittest.cc +++ b/components/autofill/core/browser/form_data_importer_unittest.cc
@@ -254,8 +254,6 @@ // Reset the deduping pref to its default value. personal_data_manager_->pref_service_->SetInteger( prefs::kAutofillLastVersionDeduped, 0); - personal_data_manager_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, false); } void TearDown() override {
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc index 1e7239f..a3f8443 100644 --- a/components/autofill/core/browser/form_structure.cc +++ b/components/autofill/core/browser/form_structure.cc
@@ -845,7 +845,7 @@ main_frame_origin().GetURL()); AutofillMetrics::LogAutofillFormSubmittedState( state, is_for_credit_card, GetFormTypes(), form_parsed_timestamp_, - form_interactions_ukm_logger); + form_signature(), form_interactions_ukm_logger); } }
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index f775ea2..f6f95ddd 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -1688,29 +1688,6 @@ return suggestions; } -void PersonalDataManager::ApplyProfileUseDatesFix() { - // Don't run if the fix has already been applied. - if (pref_service_->GetBoolean(prefs::kAutofillProfileUseDatesFixed)) - return; - - std::vector<AutofillProfile> profiles; - bool has_changed_data = false; - for (AutofillProfile* profile : GetProfiles()) { - if (profile->use_date() == base::Time()) { - profile->set_use_date(AutofillClock::Now() - - base::TimeDelta::FromDays(14)); - has_changed_data = true; - } - profiles.push_back(*profile); - } - - // Set the pref so that this fix is never run again. - pref_service_->SetBoolean(prefs::kAutofillProfileUseDatesFixed, true); - - if (has_changed_data) - SetProfiles(&profiles); -} - void PersonalDataManager::RemoveOrphanAutofillTableRows() { // Don't run if the fix has already been applied. if (pref_service_->GetBoolean(prefs::kAutofillOrphanRowsRemoved)) @@ -2234,7 +2211,6 @@ } void PersonalDataManager::ApplyAddressFixesAndCleanups() { - ApplyProfileUseDatesFix(); // One-time fix, otherwise NOP. RemoveOrphanAutofillTableRows(); // One-time fix, otherwise NOP. ApplyDedupingRoutine(); // Once per major version, otherwise NOP. DeleteDisusedAddresses(); // Once per major version, otherwise NOP.
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h index 7f584776..038c3a3 100644 --- a/components/autofill/core/browser/personal_data_manager.h +++ b/components/autofill/core/browser/personal_data_manager.h
@@ -322,9 +322,6 @@ DedupeProfiles_GuidsMergeMap); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, UpdateCardsBillingAddressReference); - FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, ApplyProfileUseDatesFix); - FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, - ApplyProfileUseDatesFix_NotAppliedTwice); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, ApplyDedupingRoutine_CardsBillingAddressIdUpdated); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, @@ -500,10 +497,6 @@ // upgrade. The card will need to be local and disused, to be deletable. bool IsCreditCardDeletable(CreditCard* card); - // Runs the Autofill use date fix routine if it's never been done. Returns - // whether the routine was run. - void ApplyProfileUseDatesFix(); - // Runs the routine that removes the orphan rows in the autofill tables if // it's never been done. void RemoveOrphanAutofillTableRows();
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index 4e2dc34..acce1f30 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -322,8 +322,6 @@ // Reset the deduping pref to its default value. personal_data_->pref_service_->SetInteger( prefs::kAutofillLastVersionDeduped, 0); - personal_data_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, false); } void TearDown() override { @@ -2997,8 +2995,6 @@ // Reset the deduping pref to its default value. personal_data_->pref_service_->SetInteger( prefs::kAutofillLastVersionDeduped, 0); - personal_data_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, false); } void TearDown() override { @@ -4081,106 +4077,6 @@ EXPECT_EQ(profile3.use_date(), profiles[1]->use_date()); } -// Tests that ApplyProfileUseDatesFix sets the use date of profiles from an -// incorrect value of 0 to [two weeks from now]. Also tests that SetProfiles -// does not modify any other profiles. -TEST_F(PersonalDataManagerTest, ApplyProfileUseDatesFix) { - // Set the kAutofillProfileUseDatesFixed pref to true so that the fix is not - // applied just yet. - personal_data_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, true); - - // Create a profile. The use date will be set to now automatically. - AutofillProfile profile1(base::GenerateGUID(), "https://www.example.com"); - test::SetProfileInfo(&profile1, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "SNP", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile1.set_use_date(kArbitraryTime); - - // Create another profile and set its use date to the default value. - AutofillProfile profile2(base::GenerateGUID(), "https://www.example.com"); - test::SetProfileInfo(&profile2, "Marge", "", "Simpson", - "homer.simpson@abc.com", "SNP", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile2.set_use_date(base::Time()); - - personal_data_->AddProfile(profile1); - personal_data_->AddProfile(profile2); - - WaitForOnPersonalDataChanged(); - EXPECT_EQ(2U, personal_data_->GetProfiles().size()); - - // Get a sorted list of profiles. |profile1| will be first and |profile2| will - // be second. - std::vector<AutofillProfile*> saved_profiles = - personal_data_->GetProfilesToSuggest(); - - ASSERT_EQ(2U, saved_profiles.size()); - - // The use dates should not have been modified. - EXPECT_EQ(profile1.use_date(), saved_profiles[0]->use_date()); - EXPECT_EQ(profile2.use_date(), saved_profiles[1]->use_date()); - - // Set the pref to false to indicate the fix has never been run. - personal_data_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, false); - - // Create the test clock and set the time to a specific value. - TestAutofillClock test_clock; - test_clock.SetNow(kSomeLaterTime); - - personal_data_->ApplyProfileUseDatesFix(); - WaitForOnPersonalDataChanged(); - - // Get a sorted list of profiles. - saved_profiles = personal_data_->GetProfilesToSuggest(); - - ASSERT_EQ(2U, saved_profiles.size()); - - // |profile1|'s use date should not have been modified. - EXPECT_LE(profile1.use_date(), saved_profiles[0]->use_date()); - // |profile2|'s use date should have been set to two weeks before now. - EXPECT_EQ(kSomeLaterTime - base::TimeDelta::FromDays(14), - saved_profiles[1]->use_date()); -} - -// Tests that ApplyProfileUseDatesFix does apply the fix if it's already been -// applied. -TEST_F(PersonalDataManagerTest, ApplyProfileUseDatesFix_NotAppliedTwice) { - // Set the kAutofillProfileUseDatesFixed pref which means the fix has already - // been applied. - personal_data_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, true); - - // Create two profiles. - AutofillProfile profile1(base::GenerateGUID(), "https://www.example.com"); - test::SetProfileInfo(&profile1, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "SNP", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile1.set_use_date(kArbitraryTime); - AutofillProfile profile2(base::GenerateGUID(), "https://www.example.com"); - test::SetProfileInfo(&profile2, "Marge", "", "Simpson", - "homer.simpson@abc.com", "SNP", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile2.set_use_date(base::Time()); - - personal_data_->AddProfile(profile1); - personal_data_->AddProfile(profile2); - - WaitForOnPersonalDataChanged(); - EXPECT_EQ(2U, personal_data_->GetProfiles().size()); - - // Get a sorted list of profiles. |profile1| will be first and |profile2| will - // be second. - std::vector<AutofillProfile*> saved_profiles = - personal_data_->GetProfilesToSuggest(); - - ASSERT_EQ(2U, saved_profiles.size()); - // The use dates should not have been modified. - EXPECT_EQ(profile1.use_date(), saved_profiles[0]->use_date()); - EXPECT_EQ(base::Time(), saved_profiles[1]->use_date()); -} - // Tests that ApplyDedupingRoutine works as expected in a realistic scenario. // Tests that it merges the diffent set of similar profiles independently and // that the resulting profiles have the right values, has no effect on the other
diff --git a/components/autofill/core/common/autofill_pref_names.cc b/components/autofill/core/common/autofill_pref_names.cc index c24d617..cb9bf1d 100644 --- a/components/autofill/core/common/autofill_pref_names.cc +++ b/components/autofill/core/common/autofill_pref_names.cc
@@ -46,10 +46,6 @@ // Boolean that is true if the orphan rows in the autofill table were removed. const char kAutofillOrphanRowsRemoved[] = "autofill.orphan_rows_removed"; -// Boolean that is true if Autofill address profiles were fixed regarding their -// bad use dates. -const char kAutofillProfileUseDatesFixed[] = "autofill.profile_use_dates_fixed"; - // Boolean that's true when Wallet card and address import is enabled by the // user. const char kAutofillWalletImportEnabled[] = "autofill.wallet_import_enabled";
diff --git a/components/autofill/core/common/autofill_pref_names.h b/components/autofill/core/common/autofill_pref_names.h index 53fd353..43c2ba8 100644 --- a/components/autofill/core/common/autofill_pref_names.h +++ b/components/autofill/core/common/autofill_pref_names.h
@@ -20,7 +20,6 @@ extern const char kAutofillLastVersionDisusedAddressesDeleted[]; extern const char kAutofillLastVersionDisusedCreditCardsDeleted[]; extern const char kAutofillOrphanRowsRemoved[]; -extern const char kAutofillProfileUseDatesFixed[]; extern const char kAutofillWalletImportEnabled[]; extern const char kAutofillWalletImportStorageCheckboxState[];
diff --git a/components/browser_sync/profile_sync_service.cc b/components/browser_sync/profile_sync_service.cc index 85d6a8b..e9ef1f0 100644 --- a/components/browser_sync/profile_sync_service.cc +++ b/components/browser_sync/profile_sync_service.cc
@@ -345,13 +345,13 @@ DCHECK(thread_checker_.CalledOnValidThread()); oauth2_token_service_->AddObserver(this); if (signin_) - signin_->GetSigninManager()->AddObserver(this); + signin_->GetIdentityManager()->AddObserver(this); } void ProfileSyncService::UnregisterAuthNotifications() { DCHECK(thread_checker_.CalledOnValidThread()); if (signin_) - signin_->GetSigninManager()->RemoveObserver(this); + signin_->GetIdentityManager()->RemoveObserver(this); if (oauth2_token_service_) oauth2_token_service_->RemoveObserver(this); } @@ -1921,8 +1921,8 @@ } } -void ProfileSyncService::GoogleSigninSucceeded(const std::string& account_id, - const std::string& username) { +void ProfileSyncService::OnPrimaryAccountSet( + const AccountInfo& primary_account_info) { DCHECK(thread_checker_.CalledOnValidThread()); if (!IsEngineInitialized() || GetAuthError().state() != GoogleServiceAuthError::NONE) { @@ -1930,12 +1930,14 @@ is_auth_in_progress_ = true; } - if (oauth2_token_service_->RefreshTokenIsAvailable(account_id)) - OnRefreshTokenAvailable(account_id); + if (oauth2_token_service_->RefreshTokenIsAvailable( + primary_account_info.account_id)) { + OnRefreshTokenAvailable(primary_account_info.account_id); + } } -void ProfileSyncService::GoogleSignedOut(const std::string& account_id, - const std::string& username) { +void ProfileSyncService::OnPrimaryAccountCleared( + const AccountInfo& previous_primary_account_info) { DCHECK(thread_checker_.CalledOnValidThread()); sync_disabled_by_admin_ = false; UMA_HISTOGRAM_ENUMERATION("Sync.StopSource", syncer::SIGN_OUT,
diff --git a/components/browser_sync/profile_sync_service.h b/components/browser_sync/profile_sync_service.h index 6790516..6d08362 100644 --- a/components/browser_sync/profile_sync_service.h +++ b/components/browser_sync/profile_sync_service.h
@@ -20,7 +20,6 @@ #include "base/timer/timer.h" #include "build/build_config.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" -#include "components/signin/core/browser/signin_manager_base.h" #include "components/sync/base/experiments.h" #include "components/sync/base/model_type.h" #include "components/sync/base/sync_prefs.h" @@ -44,6 +43,7 @@ #include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/oauth2_token_service.h" #include "net/base/backoff_entry.h" +#include "services/identity/public/cpp/identity_manager.h" #include "url/gurl.h" class ProfileOAuth2TokenService; @@ -168,7 +168,7 @@ public syncer::DataTypeManagerObserver, public syncer::UnrecoverableErrorHandler, public OAuth2TokenService::Observer, - public SigninManagerBase::Observer, + public identity::IdentityManager::Observer, public GaiaCookieManagerService::Observer { public: using Status = syncer::SyncStatus; @@ -381,11 +381,10 @@ bool IsPassphraseRequired() const override; syncer::ModelTypeSet GetEncryptedDataTypes() const override; - // SigninManagerBase::Observer implementation. - void GoogleSigninSucceeded(const std::string& account_id, - const std::string& username) override; - void GoogleSignedOut(const std::string& account_id, - const std::string& username) override; + // identity::IdentityManager::Observer implementation. + void OnPrimaryAccountSet(const AccountInfo& primary_account_info) override; + void OnPrimaryAccountCleared( + const AccountInfo& previous_primary_account_info) override; // GaiaCookieManagerService::Observer implementation. void OnGaiaAccountsInCookieUpdated(
diff --git a/components/browser_sync/profile_sync_service_autofill_unittest.cc b/components/browser_sync/profile_sync_service_autofill_unittest.cc index 5ced147..cf8a351 100644 --- a/components/browser_sync/profile_sync_service_autofill_unittest.cc +++ b/components/browser_sync/profile_sync_service_autofill_unittest.cc
@@ -98,8 +98,6 @@ registry->RegisterBooleanPref(autofill::prefs::kAutofillEnabled, true); registry->RegisterBooleanPref(autofill::prefs::kAutofillWalletImportEnabled, true); - registry->RegisterBooleanPref(autofill::prefs::kAutofillProfileUseDatesFixed, - true); registry->RegisterIntegerPref(autofill::prefs::kAutofillLastVersionDeduped, atoi(version_info::GetVersionNumber().c_str())); registry->RegisterDoublePref(autofill::prefs::kAutofillBillingCustomerNumber,
diff --git a/components/browser_sync/profile_sync_service_unittest.cc b/components/browser_sync/profile_sync_service_unittest.cc index fe7fb17..22eacc3 100644 --- a/components/browser_sync/profile_sync_service_unittest.cc +++ b/components/browser_sync/profile_sync_service_unittest.cc
@@ -560,6 +560,8 @@ signin_manager()->SignOut(signin_metrics::SIGNOUT_TEST, signin_metrics::SignoutDelete::IGNORE_METRIC); + // Wait for PSS to be notified that the primary account has gone away. + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(service()->IsSyncActive()); } #endif // !defined(OS_CHROMEOS) @@ -727,8 +729,8 @@ std::string primary_account_id = signin_manager()->GetAuthenticatedAccountId(); auth_service()->LoadCredentials(primary_account_id); - // Wait for PSS to be notified of the loaded credentials and send an access - // token request. + // Wait for ProfileSyncService to be notified of the loaded credentials and + // send an access token request. base::RunLoop().RunUntilIdle(); auth_service()->IssueAllTokensForAccount(primary_account_id, "access token", base::Time::Max()); @@ -738,7 +740,7 @@ // Emulate Chrome receiving a new, invalid LST. This happens when the user // signs out of the content area. auth_service()->UpdateCredentials(primary_account_id, "not a valid token"); - // Again, wait for PSS to be notified. + // Again, wait for ProfileSyncService to be notified. base::RunLoop().RunUntilIdle(); auth_service()->IssueErrorForAllPendingRequests( GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); @@ -772,8 +774,8 @@ std::string primary_account_id = signin_manager()->GetAuthenticatedAccountId(); auth_service()->LoadCredentials(primary_account_id); - // Wait for PSS to be notified of the loaded credentials and send an access - // token request. + // Wait for ProfileSyncService to be notified of the loaded credentials and + // send an access token request. base::RunLoop().RunUntilIdle(); auth_service()->IssueAllTokensForAccount(primary_account_id, "access token", base::Time::Max()); @@ -783,8 +785,8 @@ // Emulate Chrome receiving a new, invalid LST. This happens when the user // signs out of the content area. auth_service()->UpdateCredentials(primary_account_id, "not a valid token"); - // Wait for PSS to be notified of the changed credentials and send a new - // access token request. + // Wait for ProfileSyncService to be notified of the changed credentials and + // send a new access token request. base::RunLoop().RunUntilIdle(); auth_service()->IssueErrorForAllPendingRequests( GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); @@ -795,7 +797,7 @@ // Now emulate Chrome receiving a new, valid LST. auth_service()->UpdateCredentials(primary_account_id, "totally valid token"); - // Again, wait for PSS to be notified. + // Again, wait for ProfileSyncService to be notified. base::RunLoop().RunUntilIdle(); auth_service()->IssueTokenForAllPendingRequests( "this one works", base::Time::Now() + base::TimeDelta::FromDays(10));
diff --git a/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl.cc b/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl.cc index 61044ce7..4d5fad5 100644 --- a/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl.cc +++ b/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl.cc
@@ -121,8 +121,13 @@ request->set_effective_connection_type( protobuf_parser::ProtoEffectiveConnectionTypeFromEffectiveConnectionType( request_data.effective_connection_type())); + request->set_connection_type( + protobuf_parser::ProtoConnectionTypeFromConnectionType( + request_data.connection_type())); request->set_compressed_page_size_bytes(timing.network_bytes); request->set_original_page_size_bytes(timing.original_network_bytes); + request->set_total_page_size_bytes(timing.total_page_size_bytes); + request->set_cached_fraction(timing.cached_fraction); request->set_renderer_memory_usage_kb(timing.renderer_memory_usage_kb); request->set_renderer_crash_type(crash_type);
diff --git a/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl_unittest.cc b/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl_unittest.cc index 2c07ef86..74aa338 100644 --- a/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl_unittest.cc +++ b/components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl_unittest.cc
@@ -28,6 +28,7 @@ #include "components/data_reduction_proxy/proto/pageload_metrics.pb.h" #include "content/public/common/child_process_host.h" #include "net/base/net_errors.h" +#include "net/base/network_change_notifier.h" #include "net/nqe/effective_connection_type.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_context_getter.h" @@ -47,6 +48,8 @@ static const char kFakeURL[] = "http://www.google.com/"; static const int64_t kBytes = 10000; static const int64_t kBytesOriginal = 1000000; +static const int64_t kTotalPageSizeBytes = 20000; +static const float kCachedFraction = 0.5; static const int kCrashProcessId = 1; static const int64_t kRendererMemory = 1024; @@ -138,7 +141,9 @@ base::Optional<base::TimeDelta>( base::TimeDelta::FromMilliseconds(2000)) /* parse_stop */, kBytes /* network_bytes */, kBytesOriginal /* original_network_bytes */, - app_background_occurred, opt_out_occurred, kRendererMemory, + kTotalPageSizeBytes /* total_page_size_bytes */, + kCachedFraction /* cached_fraction */, app_background_occurred, + opt_out_occurred, kRendererMemory, crash ? kCrashProcessId : content::ChildProcessHost::kInvalidUniqueID); DataReductionProxyData request_data; @@ -146,6 +151,8 @@ request_data.set_request_url(GURL(kFakeURL)); request_data.set_effective_connection_type( net::EFFECTIVE_CONNECTION_TYPE_OFFLINE); + request_data.set_connection_type( + net::NetworkChangeNotifier::CONNECTION_UNKNOWN); request_data.set_lofi_received(lofi_received); request_data.set_client_lofi_requested(client_lofi_requested); request_data.set_lite_page_received(lite_page_received); @@ -156,7 +163,7 @@ page_id_++; } - // Send a fake crash report frome breakpad. + // Send a fake crash report from breakpad. void ReportCrash(bool oom) { #if defined(OS_ANDROID) breakpad::CrashDumpManager::CrashDumpDetails details = { @@ -240,6 +247,8 @@ EXPECT_EQ(kFakeURL, pageload_metrics.first_request_url()); EXPECT_EQ(kBytes, pageload_metrics.compressed_page_size_bytes()); EXPECT_EQ(kBytesOriginal, pageload_metrics.original_page_size_bytes()); + EXPECT_EQ(kTotalPageSizeBytes, pageload_metrics.total_page_size_bytes()); + EXPECT_EQ(kCachedFraction, pageload_metrics.cached_fraction()); EXPECT_EQ(data_page_id, pageload_metrics.page_id()); EXPECT_EQ(PageloadMetrics_PreviewsType_NONE, @@ -250,6 +259,8 @@ EXPECT_EQ( PageloadMetrics_EffectiveConnectionType_EFFECTIVE_CONNECTION_TYPE_OFFLINE, pageload_metrics.effective_connection_type()); + EXPECT_EQ(PageloadMetrics_ConnectionType_CONNECTION_UNKNOWN, + pageload_metrics.connection_type()); EXPECT_EQ(kRendererMemory, pageload_metrics.renderer_memory_usage_kb()); EXPECT_EQ(std::string(), pageload_metrics.holdback_group()); EXPECT_EQ(PageloadMetrics_RendererCrashType_NO_CRASH, @@ -369,11 +380,15 @@ EXPECT_EQ(kFakeURL, pageload_metrics.first_request_url()); EXPECT_EQ(kBytes, pageload_metrics.compressed_page_size_bytes()); EXPECT_EQ(kBytesOriginal, pageload_metrics.original_page_size_bytes()); + EXPECT_EQ(kTotalPageSizeBytes, pageload_metrics.total_page_size_bytes()); + EXPECT_EQ(kCachedFraction, pageload_metrics.cached_fraction()); EXPECT_EQ(page_ids.front(), pageload_metrics.page_id()); page_ids.pop_front(); EXPECT_EQ( PageloadMetrics_EffectiveConnectionType_EFFECTIVE_CONNECTION_TYPE_OFFLINE, pageload_metrics.effective_connection_type()); + EXPECT_EQ(PageloadMetrics_ConnectionType_CONNECTION_UNKNOWN, + pageload_metrics.connection_type()); EXPECT_EQ(kRendererMemory, pageload_metrics.renderer_memory_usage_kb()); }
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc index 7947c30..1d489b6 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
@@ -19,7 +19,8 @@ lite_page_received_(false), lofi_policy_received_(false), lofi_received_(false), - effective_connection_type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) {} + effective_connection_type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN), + connection_type_(net::NetworkChangeNotifier::CONNECTION_UNKNOWN) {} DataReductionProxyData::~DataReductionProxyData() {}
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h index 36697b7..a87b465 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/optional.h" #include "base/supports_user_data.h" +#include "net/base/network_change_notifier.h" #include "net/nqe/effective_connection_type.h" #include "url/gurl.h" @@ -95,6 +96,16 @@ effective_connection_type_ = effective_connection_type; } + // The connection type (Wifi, 2G, 3G, 4G, None, etc) as reported by the + // NetworkChangeNotifier. Only set for main frame requests. + net::NetworkChangeNotifier::ConnectionType connection_type() const { + return connection_type_; + } + void set_connection_type( + const net::NetworkChangeNotifier::ConnectionType connection_type) { + connection_type_ = connection_type; + } + // An identifier that is guaranteed to be unique to each page load during a // data saver session. Only present on main frame requests. const base::Optional<uint64_t>& page_id() const { return page_id_; } @@ -153,6 +164,10 @@ // set for main frame requests only. net::EffectiveConnectionType effective_connection_type_; + // The connection type (Wifi, 2G, 3G, 4G, None, etc) as reported by the + // NetworkChangeNotifier. Only set for main frame requests. + net::NetworkChangeNotifier::ConnectionType connection_type_; + // An identifier that is guaranteed to be unique to each page load during a // data saver session. Only present on main frame requests. base::Optional<uint64_t> page_id_;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc index da23691..2aca3f16 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
@@ -26,6 +26,7 @@ #include "components/data_reduction_proxy/core/common/lofi_decider.h" #include "net/base/load_flags.h" #include "net/base/mime_util.h" +#include "net/base/network_change_notifier.h" #include "net/base/proxy_server.h" #include "net/http/http_request_headers.h" #include "net/http/http_response_headers.h" @@ -391,6 +392,8 @@ ->network_quality_estimator() ->GetEffectiveConnectionType()); } + data->set_connection_type( + net::NetworkChangeNotifier::GetConnectionType()); // Generate a page ID for main frame requests that don't already have one. // TODO(ryansturm): remove LOAD_MAIN_FRAME_DEPRECATED from d_r_p. // crbug.com/709621
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.cc index d4010a64..77dfa99 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.cc
@@ -310,6 +310,28 @@ } } +PageloadMetrics_ConnectionType ProtoConnectionTypeFromConnectionType( + net::NetworkChangeNotifier::ConnectionType connection_type) { + switch (connection_type) { + case net::NetworkChangeNotifier::CONNECTION_UNKNOWN: + return PageloadMetrics_ConnectionType_CONNECTION_UNKNOWN; + case net::NetworkChangeNotifier::CONNECTION_ETHERNET: + return PageloadMetrics_ConnectionType_CONNECTION_ETHERNET; + case net::NetworkChangeNotifier::CONNECTION_WIFI: + return PageloadMetrics_ConnectionType_CONNECTION_WIFI; + case net::NetworkChangeNotifier::CONNECTION_2G: + return PageloadMetrics_ConnectionType_CONNECTION_2G; + case net::NetworkChangeNotifier::CONNECTION_3G: + return PageloadMetrics_ConnectionType_CONNECTION_3G; + case net::NetworkChangeNotifier::CONNECTION_4G: + return PageloadMetrics_ConnectionType_CONNECTION_4G; + case net::NetworkChangeNotifier::CONNECTION_NONE: + return PageloadMetrics_ConnectionType_CONNECTION_NONE; + case net::NetworkChangeNotifier::CONNECTION_BLUETOOTH: + return PageloadMetrics_ConnectionType_CONNECTION_BLUETOOTH; + } +} + net::ProxyServer::Scheme SchemeFromProxyScheme( ProxyServer_ProxyScheme proxy_scheme) { switch (proxy_scheme) {
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.h index 98f4f52..8245d91 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.h +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_util.h
@@ -10,6 +10,7 @@ #include "components/data_reduction_proxy/proto/client_config.pb.h" #include "components/data_reduction_proxy/proto/pageload_metrics.pb.h" +#include "net/base/network_change_notifier.h" #include "net/base/proxy_server.h" #include "net/nqe/effective_connection_type.h" #include "net/proxy_resolution/proxy_retry_info.h" @@ -128,12 +129,17 @@ "If net::EFFECTIVE_CONNECTION_TYPE changes, " "PageloadMetrics_EffectiveConnectionType needs to be updated."); -// Returns the PageloadMetrics_EffectiveConnection equivalent of +// Returns the PageloadMetrics_EffectiveConnectionType equivalent of // |effective_connection_type|. PageloadMetrics_EffectiveConnectionType ProtoEffectiveConnectionTypeFromEffectiveConnectionType( net::EffectiveConnectionType effective_connection_type); +// Returns the PageloadMetrics_ConnectionType equivalent of +// |connection_type|. +PageloadMetrics_ConnectionType ProtoConnectionTypeFromConnectionType( + net::NetworkChangeNotifier::ConnectionType connection_type); + // Returns the |net::ProxyServer::Scheme| for a ProxyServer_ProxyScheme. net::ProxyServer::Scheme SchemeFromProxyScheme( ProxyServer_ProxyScheme proxy_scheme);
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.cc index 38b2efb..c05d640 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.cc
@@ -18,6 +18,8 @@ const base::Optional<base::TimeDelta>& parse_stop, int64_t network_bytes, int64_t original_network_bytes, + int64_t total_page_size_bytes, + float cached_fraction, bool app_background_occurred, bool opt_out_occurred, int64_t renderer_memory_usage_kb, @@ -33,6 +35,8 @@ parse_stop(parse_stop), network_bytes(network_bytes), original_network_bytes(original_network_bytes), + total_page_size_bytes(total_page_size_bytes), + cached_fraction(cached_fraction), app_background_occurred(app_background_occurred), opt_out_occurred(opt_out_occurred), renderer_memory_usage_kb(renderer_memory_usage_kb),
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h b/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h index 11ec6b0..6731441 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h
@@ -27,6 +27,8 @@ const base::Optional<base::TimeDelta>& parse_stop, int64_t network_bytes, int64_t original_network_bytes, + int64_t total_page_size_bytes, + float cached_fraction, bool app_background_occurred, bool opt_out_occurred, int64_t renderer_memory_usage_kb, @@ -61,6 +63,10 @@ // The number of bytes that would have been served over the network if the // user were not using data reduction proxy, not including headers. const int64_t original_network_bytes; + // The total number of bytes loaded for the page content, including cache. + const int64_t total_page_size_bytes; + // The fraction of bytes that were served from the cache for this page load. + const float cached_fraction; // True when android app background occurred during the page load lifetime. const bool app_background_occurred; // True when the user clicks "Show Original" on the Previews infobar.
diff --git a/components/data_reduction_proxy/proto/pageload_metrics.proto b/components/data_reduction_proxy/proto/pageload_metrics.proto index 976093e..1140c55 100644 --- a/components/data_reduction_proxy/proto/pageload_metrics.proto +++ b/components/data_reduction_proxy/proto/pageload_metrics.proto
@@ -44,6 +44,19 @@ EFFECTIVE_CONNECTION_TYPE_4G = 5; }; + // The possible conntion type values. See //net/base/network_change_notifier.h + // for a detailed description of the enum values. + enum ConnectionType { + CONNECTION_UNKNOWN = 0; + CONNECTION_ETHERNET = 1; + CONNECTION_WIFI = 2; + CONNECTION_2G = 3; + CONNECTION_3G = 4; + CONNECTION_4G = 5; + CONNECTION_NONE = 6; + CONNECTION_BLUETOOTH = 7; + }; + // The various opt out states seen by server previews. enum PreviewsOptOut { // Set for non-previews navigations and app background navigations. @@ -101,9 +114,11 @@ // The sum of original-content-length values, over resources that were not // loaded from browser cache. + // Secure resources (i.e., HTTPS) that go into this sum are bucketed. optional int64 original_page_size_bytes = 10; // The sum of (compressed) content-length, over resources that were not loaded // from browser cache. + // Secure resources (i.e., HTTPS) that go into this sum are bucketed. optional int64 compressed_page_size_bytes = 11; // The effective connection type at the start of the navigation. @@ -140,4 +155,17 @@ // The RendererCrashType for the page load. optional RendererCrashType renderer_crash_type = 21; + + // The percent of total_page_size_bytes that were loaded from the cache. This + // value is in the range [0.0, 1.0]. + optional float cached_fraction = 22; + + // The connection type (Wifi, 2G, 3G, 4G, None, etc) reported by the + // NetworkChangeNotifier. + optional ConnectionType connection_type = 23; + + // The sum of all bytes loaded on a page. This is compressed_page_size_bytes + // plus the sum of content-length for all resources loaded from the browser + // cache. Secure resources (i.e., HTTPS) that go into this sum are bucketed. + optional int64 total_page_size_bytes = 24; }
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc index b4c5d7d..e5a33ac2 100644 --- a/components/omnibox/browser/omnibox_edit_model.cc +++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -288,7 +288,6 @@ } void OmniboxEditModel::AdjustTextForCopy(int sel_min, - bool is_all_selected, base::string16* text, GURL* url_from_text, bool* write_url) { @@ -298,25 +297,9 @@ if (sel_min != 0) return; - // Check whether the user is trying to copy the current page's URL by - // selecting the whole thing without editing it. - // - // This is complicated by ZeroSuggest. When ZeroSuggest is active, the user - // may be selecting different items and thus changing the address bar text, - // even though !user_input_in_progress_; and the permanent URL may change - // without updating the visible text, just like when user input is in - // progress. In these cases, we don't want to copy the underlying URL, we - // want to copy what the user actually sees. However, if we simply never do - // this block when !PopupIsOpen(), then just clicking into the address bar and - // trying to copy will always bypass this block on pages that trigger - // ZeroSuggest, which is too conservative. Instead, in the ZeroSuggest case, - // we check that (a) the user hasn't selected one of the other suggestions, - // and (b) the selected text is still the same as the permanent text. ((b) - // probably implies (a), but it doesn't hurt to be sure.) If these hold, then - // it's safe to copy the underlying URL. - if (!user_input_in_progress_ && is_all_selected && - (!PopupIsOpen() || ((popup_model()->selected_line() == 0) && - (*text == url_for_editing_)))) { + // Check whether the user is trying to copy the current page's URL by checking + // if |text| is the whole permanent URL. + if (!user_input_in_progress_ && *text == GetCurrentPermanentUrlText()) { // It's safe to copy the underlying URL. These lines ensure that if the // scheme was stripped it's added back, and the URL is unescaped (we escape // parts of it for display).
diff --git a/components/omnibox/browser/omnibox_edit_model.h b/components/omnibox/browser/omnibox_edit_model.h index 424b934..557f888 100644 --- a/components/omnibox/browser/omnibox_edit_model.h +++ b/components/omnibox/browser/omnibox_edit_model.h
@@ -137,11 +137,9 @@ // Invoked to adjust the text before writting to the clipboard for a copy // (e.g. by adding 'http' to the front). |sel_min| gives the minimum position // of the selection e.g. min(selection_start, selection_end). |text| is the - // currently selected text. If |is_all_selected| is true all the text in the - // edit is selected. If the url should be copied to the clipboard |write_url| - // is set to true and |url_from_text| set to the url to write. + // currently selected text. If the url should be copied to the clipboard + // |write_url| is set to true and |url_from_text| set to the url to write. void AdjustTextForCopy(int sel_min, - bool is_all_selected, base::string16* text, GURL* url_from_text, bool* write_url);
diff --git a/components/omnibox/browser/omnibox_edit_model_unittest.cc b/components/omnibox/browser/omnibox_edit_model_unittest.cc index 509cba8..67db556 100644 --- a/components/omnibox/browser/omnibox_edit_model_unittest.cc +++ b/components/omnibox/browser/omnibox_edit_model_unittest.cc
@@ -8,8 +8,10 @@ #include <memory> +#include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" #include "components/omnibox/browser/autocomplete_match.h" +#include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/browser/omnibox_view.h" #include "components/omnibox/browser/search_provider.h" #include "components/omnibox/browser/test_omnibox_client.h" @@ -74,7 +76,6 @@ struct Data { const char* url_for_editing; const int sel_start; - const bool is_all_selected; const char* match_destination_url; const bool is_match_selected_in_popup; @@ -83,71 +84,82 @@ const char* expected_output; const bool write_url; const char* expected_url; + + bool steady_state_elisions_on = false; + const char* url_for_display = ""; } input[] = { - // Test that http:// and https:// are inserted if all text is selected. - {"a.de/b", 0, true, "", false, "a.de/b", "http://a.de/b", true, + // Test that http:// is inserted if all text is selected. + {"a.de/b", 0, "", false, "a.de/b", "http://a.de/b", true, "http://a.de/b"}, - {"https://a.de/b", 0, true, "", false, "a.de/b", "https://a.de/b", true, - "https://a.de/b"}, // Test that http:// and https:// are inserted if the host is selected. - {"a.de/b", 0, false, "", false, "a.de/", "http://a.de/", true, - "http://a.de/"}, - {"https://a.de/b", 0, false, "", false, "https://a.de/", "https://a.de/", - true, "https://a.de/"}, + {"a.de/b", 0, "", false, "a.de/", "http://a.de/", true, "http://a.de/"}, + {"https://a.de/b", 0, "", false, "https://a.de/", "https://a.de/", true, + "https://a.de/"}, // Tests that http:// is inserted if the path is modified. - {"a.de/b", 0, false, "", false, "a.de/c", "http://a.de/c", true, + {"a.de/b", 0, "", false, "a.de/c", "http://a.de/c", true, "http://a.de/c"}, // Tests that http:// isn't inserted if the host is modified. - {"a.de/b", 0, false, "", false, "a.com/b", "a.com/b", false, ""}, + {"a.de/b", 0, "", false, "a.com/b", "a.com/b", false, ""}, // Tests that http:// isn't inserted if the start of the selection is 1. - {"a.de/b", 1, false, "", false, "a.de/b", "a.de/b", false, ""}, + {"a.de/b", 1, "", false, "a.de/b", "a.de/b", false, ""}, // Tests that http:// isn't inserted if a portion of the host is selected. - {"a.de/", 0, false, "", false, "a.d", "a.d", false, ""}, + {"a.de/", 0, "", false, "a.d", "a.d", false, ""}, // Tests that http:// isn't inserted if the user adds to the host. - {"a.de/", 0, false, "", false, "a.de.com/", "a.de.com/", false, ""}, + {"a.de/", 0, "", false, "a.de.com/", "a.de.com/", false, ""}, // Tests that we don't get double schemes if the user manually inserts // a scheme. - {"a.de/", 0, false, "", false, "http://a.de/", "http://a.de/", true, + {"a.de/", 0, "", false, "http://a.de/", "http://a.de/", true, "http://a.de/"}, - {"a.de/", 0, false, "", false, "HTtp://a.de/", "HTtp://a.de/", true, + {"a.de/", 0, "", false, "HTtp://a.de/", "HTtp://a.de/", true, "http://a.de/"}, - {"https://a.de/", 0, false, "", false, "https://a.de/", "https://a.de/", - true, "https://a.de/"}, + {"https://a.de/", 0, "", false, "https://a.de/", "https://a.de/", true, + "https://a.de/"}, // Test that we don't get double schemes or revert the change if the user // manually changes the scheme from 'http://' to 'https://' or vice versa. - {"a.de/", 0, false, "", false, "https://a.de/", "https://a.de/", true, + {"a.de/", 0, "", false, "https://a.de/", "https://a.de/", true, "https://a.de/"}, - {"https://a.de/", 0, false, "", false, "http://a.de/", "http://a.de/", - true, "http://a.de/"}, + {"https://a.de/", 0, "", false, "http://a.de/", "http://a.de/", true, + "http://a.de/"}, // Makes sure intranet urls get 'http://' prefixed to them. - {"b/foo", 0, true, "", false, "b/foo", "http://b/foo", true, - "http://b/foo"}, + {"b/foo", 0, "", false, "b/foo", "http://b/foo", true, "http://b/foo"}, // Verifies a search term 'foo' doesn't end up with http. - {"www.google.com/search?", 0, false, "", false, "foo", "foo", false, ""}, + {"www.google.com/search?", 0, "", false, "foo", "foo", false, ""}, // Verifies that http:// and https:// are inserted for a match in a popup. - {"a.com", 0, true, "http://b.com/foo", true, "b.com/foo", - "http://b.com/foo", true, "http://b.com/foo"}, - {"a.com", 0, true, "https://b.com/foo", true, "b.com/foo", - "https://b.com/foo", true, "https://b.com/foo"}, + {"a.com", 0, "http://b.com/foo", true, "b.com/foo", "http://b.com/foo", + true, "http://b.com/foo"}, + {"a.com", 0, "https://b.com/foo", true, "b.com/foo", "https://b.com/foo", + true, "https://b.com/foo"}, // Verifies that no scheme is inserted if there is no valid match. - {"a.com", 0, true, "", true, "b.com/foo", "b.com/foo", false, ""}, + {"a.com", 0, "", true, "b.com/foo", "b.com/foo", false, ""}, + + // Steady State Elisions test for re-adding an elided 'https://'. + {"https://a.de/b", 0, "", false, "a.de/b", "https://a.de/b", true, + "https://a.de/b", true, "a.de/b"}, }; for (size_t i = 0; i < arraysize(input); ++i) { + base::test::ScopedFeatureList feature_list; + if (input[i].steady_state_elisions_on) { + feature_list.InitAndEnableFeature( + omnibox::kUIExperimentHideSteadyStateUrlSchemeAndSubdomains); + } + toolbar_model()->set_formatted_full_url( base::ASCIIToUTF16(input[i].url_for_editing)); + toolbar_model()->set_url_for_display( + base::ASCIIToUTF16(input[i].url_for_display)); model()->ResetDisplayUrls(); model()->SetInputInProgress(input[i].is_match_selected_in_popup); @@ -160,8 +172,7 @@ base::string16 result = base::ASCIIToUTF16(input[i].input); GURL url; bool write_url; - model()->AdjustTextForCopy(input[i].sel_start, input[i].is_all_selected, - &result, &url, &write_url); + model()->AdjustTextForCopy(input[i].sel_start, &result, &url, &write_url); EXPECT_EQ(base::ASCIIToUTF16(input[i].expected_output), result) << "@: " << i; EXPECT_EQ(input[i].write_url, write_url) << " @" << i;
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 927a01b..3ad8932 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -8126,7 +8126,7 @@ 'name': 'HideWebStoreIcon', 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:26-'], + 'supported_on': ['chrome.*:26-', 'chrome_os:68-'], 'features': { 'dynamic_refresh': True, 'per_profile': True,
diff --git a/components/sync/driver/signin_manager_wrapper.cc b/components/sync/driver/signin_manager_wrapper.cc index 2f7e8f80..7862741 100644 --- a/components/sync/driver/signin_manager_wrapper.cc +++ b/components/sync/driver/signin_manager_wrapper.cc
@@ -4,7 +4,7 @@ #include "components/sync/driver/signin_manager_wrapper.h" -#include "components/signin/core/browser/signin_manager_base.h" +#include "services/identity/public/cpp/identity_manager.h" SigninManagerWrapper::SigninManagerWrapper( identity::IdentityManager* identity_manager, @@ -22,9 +22,9 @@ } std::string SigninManagerWrapper::GetEffectiveUsername() const { - return signin_manager_->GetAuthenticatedAccountInfo().email; + return identity_manager_->GetPrimaryAccountInfo().email; } std::string SigninManagerWrapper::GetAccountIdToUse() const { - return signin_manager_->GetAuthenticatedAccountId(); + return identity_manager_->GetPrimaryAccountInfo().account_id; }
diff --git a/components/sync/driver/sync_service_base.cc b/components/sync/driver/sync_service_base.cc index 4636db18..f31158d3 100644 --- a/components/sync/driver/sync_service_base.cc +++ b/components/sync/driver/sync_service_base.cc
@@ -13,12 +13,12 @@ #include "base/syslog_logging.h" #include "components/invalidation/public/invalidation_service.h" #include "components/signin/core/browser/account_info.h" -#include "components/signin/core/browser/signin_manager_base.h" #include "components/sync/base/report_unrecoverable_error.h" #include "components/sync/device_info/local_device_info_provider.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/engine/engine_components_factory_impl.h" #include "components/sync/engine/polling_constants.h" +#include "services/identity/public/cpp/identity_manager.h" namespace syncer { @@ -86,7 +86,7 @@ AccountInfo SyncServiceBase::GetAuthenticatedAccountInfo() const { DCHECK(thread_checker_.CalledOnValidThread()); - return signin_ ? signin_->GetSigninManager()->GetAuthenticatedAccountInfo() + return signin_ ? signin_->GetIdentityManager()->GetPrimaryAccountInfo() : AccountInfo(); }
diff --git a/components/variations/service/variations_service.cc b/components/variations/service/variations_service.cc index 21ce2b8..d8ab78ad 100644 --- a/components/variations/service/variations_service.cc +++ b/components/variations/service/variations_service.cc
@@ -437,6 +437,10 @@ RecordSuccessfulFetch(); + // Now, do simulation to determine if there are any kill-switches that were + // activated by this seed. To do this, first get the Chrome version to do a + // simulation with, which must be done on a background thread, and then do the + // actual simulation on the UI thread. base::PostTaskWithTraitsAndReplyWithResult( FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, client_->GetVersionForSimulationCallback(),
diff --git a/components/variations/variations_seed_processor_unittest.cc b/components/variations/variations_seed_processor_unittest.cc index 376b3a1e..4c6d395 100644 --- a/components/variations/variations_seed_processor_unittest.cc +++ b/components/variations/variations_seed_processor_unittest.cc
@@ -936,6 +936,7 @@ auto* exp1 = AddExperiment("A", 1, &study); exp1->mutable_feature_association()->add_enable_feature(kFeature.name); + EXPECT_FALSE(study.has_default_experiment_name()); EXPECT_TRUE(CreateTrialFromStudy(study)); EXPECT_EQ("VariationsDefaultExperiment", base::FieldTrialList::FindFullName("Study1"));
diff --git a/components/variations/variations_seed_simulator.cc b/components/variations/variations_seed_simulator.cc index 7215644..f711c8d 100644 --- a/components/variations/variations_seed_simulator.cc +++ b/components/variations/variations_seed_simulator.cc
@@ -209,6 +209,9 @@ const std::string simulated_group = SimulateGroupAssignment(entropy_provider, processed_study); + + // Note: The current (i.e. old) group is checked for the type since that group + // is the one that should be annotated with the type when killing it. const Study_Experiment* experiment = FindExperiment(study, selected_group); if (simulated_group != selected_group) { if (experiment) @@ -216,10 +219,12 @@ return CHANGED; } - // Current group exists in the study - check whether its params changed. - DCHECK(experiment); - if (!VariationParamsAreEqual(study, *experiment)) + // If the group is unchanged, check whether its params may have changed. + if (experiment && !VariationParamsAreEqual(study, *experiment)) return ConvertExperimentTypeToChangeType(experiment->type()); + + // Since the group name has not changed and params are either equal or the + // experiment was not found (and thus there are none), return NO_CHANGE. return NO_CHANGE; }
diff --git a/components/variations/variations_seed_simulator_unittest.cc b/components/variations/variations_seed_simulator_unittest.cc index 3b7838a5..8a608907 100644 --- a/components/variations/variations_seed_simulator_unittest.cc +++ b/components/variations/variations_seed_simulator_unittest.cc
@@ -19,6 +19,12 @@ namespace variations { namespace { + +// Converts |time| to Study proto format. +int64_t TimeToProtoTime(const base::Time& time) { + return (time - base::Time::UnixEpoch()).InSeconds(); +} + // Creates and activates a single-group field trial with name |trial_name| and // group |group_name| and variations |params| (if not null). void CreateTrial(const std::string& trial_name, @@ -156,6 +162,9 @@ // Changing "C" group type should not affect the type of change. (Since the // type is evaluated for the "old" group.) + // + // Note: The current (i.e. old) group is checked for the type since that group + // is the one that should be annotated with the type when killing it. experiment->set_type(Study_Experiment_Type_NORMAL); EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study)); experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE); @@ -379,4 +388,28 @@ EXPECT_EQ("0 0 1", SimulateStudyDifferences(&study)); } +// Tests that simulating an expired trial without a default group doesn't crash. +// This is very much an edge case which should generally not be encountered due +// to server-side, but we should ensure that it still doesn't cause a client +// side crash. +TEST_F(VariationsSeedSimulatorTest, NoDefaultGroup) { + static struct base::Feature kFeature { + "FeatureName", base::FEATURE_ENABLED_BY_DEFAULT + }; + CreateTrial("Study1", "VariationsDefaultExperiment", nullptr); + + Study study; + study.set_consistency(Study::PERMANENT); + study.set_name("Study1"); + const base::Time year_ago = + base::Time::Now() - base::TimeDelta::FromDays(365); + study.set_expiry_date(TimeToProtoTime(year_ago)); + auto* exp1 = AddExperiment("A", 1, &study); + study.clear_default_experiment_name(); + exp1->mutable_feature_association()->add_enable_feature(kFeature.name); + + EXPECT_FALSE(study.has_default_experiment_name()); + EXPECT_EQ("0 0 0", SimulateStudyDifferencesExpired(&study)); +} + } // namespace variations
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc index b262c1c..e7c5d802 100644 --- a/components/viz/service/display/gl_renderer.cc +++ b/components/viz/service/display/gl_renderer.cc
@@ -221,10 +221,8 @@ bool use_aa = false; - // Some filters affect pixels outside the original contents bounds. This - // requires translation of the source when texturing, as well as a change in - // the bounds of the destination. - gfx::Point src_offset; + // Some filters affect pixels outside the original contents bounds, in which + // case ApplyImageFilter will modify this rect. gfx::RectF dst_rect; // A Skia image that should be sampled from instead of the original @@ -239,19 +237,6 @@ std::unique_ptr<cc::DisplayResourceProvider::ScopedSamplerGL> mask_resource_lock; - // Original background texture. - uint32_t background_texture = 0; - - // Backdrop bounding box. - gfx::Rect background_rect; - - // Filtered background texture. - sk_sp<SkImage> background_image; - GLuint background_image_id = 0; - - // Whether the original background texture is needed for the mask. - bool mask_for_background = false; - // Whether a color matrix needs to be applied by the shaders when drawing // the RPDQ. bool use_color_matrix = false; @@ -265,6 +250,17 @@ // The color space of the texture bound for sampling (from filter_image or // bypass_quad_resource_lock, depending on the path taken). gfx::ColorSpace contents_and_bypass_color_space; + + // Background filters block. + // Original background texture. + uint32_t background_texture = 0; + // Backdrop bounding box. + gfx::Rect background_rect; + // Filtered background texture. + sk_sp<SkImage> background_image; + GLuint background_image_id = 0; + // Whether the original background texture is needed for the mask. + bool mask_for_background = false; }; class GLRenderer::ScopedUseGrContext { @@ -1199,8 +1195,7 @@ params->dst_rect = gfx::RectF(src_rect.x() + offset.fX, src_rect.y() + offset.fY, subset.width(), subset.height()); - params->src_offset.SetPoint(subset.x(), subset.y()); - gfx::RectF tex_rect = gfx::RectF(gfx::PointF(params->src_offset), + gfx::RectF tex_rect = gfx::RectF(gfx::PointF(subset.x(), subset.y()), params->dst_rect.size()); params->tex_coord_rect = tex_rect; } @@ -1391,8 +1386,8 @@ gl_->Uniform4f(current_program_->backdrop_rect_location(), params->background_rect.x(), params->background_rect.y(), - params->background_rect.width(), - params->background_rect.height()); + 1.0f / params->background_rect.width(), + 1.0f / params->background_rect.height()); // Either |background_image_id| or |background_texture| will be the // |backdrop_location| in the shader.
diff --git a/components/viz/service/display/shader.cc b/components/viz/service/display/shader.cc index 7fb02db9..d7cd218 100644 --- a/components/viz/service/display/shader.cc +++ b/components/viz/service/display/shader.cc
@@ -535,11 +535,7 @@ } void FragmentShader::SetBlendModeFunctions(std::string* shader_string) const { - if (shader_string->find("ApplyBlendMode") == std::string::npos) - return; - if (!has_blend_mode()) { - shader_string->insert(0, "#define ApplyBlendMode(X, Y) (X)\n"); return; } @@ -549,48 +545,39 @@ uniform TexCoordPrecision vec4 backdropRect; }); - base::StringPiece mixFunction; + base::StringPiece function_apply_blend_mode; if (mask_for_background_) { - static constexpr base::StringPiece kMixFunctionWithMask = SHADER0([]() { - vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) { + static constexpr base::StringPiece kFunctionApplyBlendMode = SHADER0([]() { + vec4 ApplyBlendMode(vec4 src, float mask) { + TexCoordPrecision vec2 bgTexCoord = gl_FragCoord.xy - backdropRect.xy; + bgTexCoord *= backdropRect.zw; vec4 backdrop = texture2D(s_backdropTexture, bgTexCoord); vec4 original_backdrop = texture2D(s_originalBackdropTexture, bgTexCoord); - return mix(original_backdrop, backdrop, mask); + vec4 dst = mix(original_backdrop, backdrop, mask); + return Blend(src, dst); } }); - mixFunction = kMixFunctionWithMask; + function_apply_blend_mode = kFunctionApplyBlendMode; } else { - static constexpr base::StringPiece kMixFunctionWithoutMask = SHADER0([]() { - vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) { - return texture2D(s_backdropTexture, bgTexCoord); + static constexpr base::StringPiece kFunctionApplyBlendMode = SHADER0([]() { + vec4 ApplyBlendMode(vec4 src) { + TexCoordPrecision vec2 bgTexCoord = gl_FragCoord.xy - backdropRect.xy; + bgTexCoord *= backdropRect.zw; + vec4 dst = texture2D(s_backdropTexture, bgTexCoord); + return Blend(src, dst); } }); - mixFunction = kMixFunctionWithoutMask; + function_apply_blend_mode = kFunctionApplyBlendMode; } - static constexpr base::StringPiece kFunctionApplyBlendMode = SHADER0([]() { - vec4 GetBackdropColor(float mask) { - TexCoordPrecision vec2 bgTexCoord = gl_FragCoord.xy - backdropRect.xy; - bgTexCoord.x /= backdropRect.z; - bgTexCoord.y /= backdropRect.w; - return MixBackdrop(bgTexCoord, mask); - } - - vec4 ApplyBlendMode(vec4 src, float mask) { - vec4 dst = GetBackdropColor(mask); - return Blend(src, dst); - } - }); - std::string shader; shader.reserve(shader_string->size() + 1024); shader += "precision mediump float;"; AppendHelperFunctions(&shader); AppendBlendFunction(&shader); kUniforms.AppendToString(&shader); - mixFunction.AppendToString(&shader); - kFunctionApplyBlendMode.AppendToString(&shader); + function_apply_blend_mode.AppendToString(&shader); shader += *shader_string; *shader_string = std::move(shader); } @@ -1081,10 +1068,16 @@ SRC("gl_FragColor = vec4(texColor.rgb, 1.0);"); break; case FRAG_COLOR_MODE_APPLY_BLEND_MODE: - if (mask_mode_ != NO_MASK) - SRC("gl_FragColor = ApplyBlendMode(texColor, maskColor.w);"); - else - SRC("gl_FragColor = ApplyBlendMode(texColor, 0.0);"); + if (!has_blend_mode()) { + SRC("gl_FragColor = texColor;"); + } else if (mask_mode_ != NO_MASK) { + if (mask_for_background_) + SRC("gl_FragColor = ApplyBlendMode(texColor, maskColor.w);"); + else + SRC("gl_FragColor = ApplyBlendMode(texColor);"); + } else { + SRC("gl_FragColor = ApplyBlendMode(texColor);"); + } break; } source += "}\n";
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index e14c76d..62df999e 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -44,17 +44,6 @@ #include "ui/gfx/skia_util.h" #include "ui/gfx/transform.h" -#if BUILDFLAG(ENABLE_VULKAN) -#include "components/viz/common/gpu/vulkan_in_process_context_provider.h" -#include "gpu/vulkan/vulkan_device_queue.h" -#include "gpu/vulkan/vulkan_implementation.h" -#include "gpu/vulkan/vulkan_surface.h" -#include "gpu/vulkan/vulkan_swap_chain.h" -#include "third_party/skia/include/gpu/GrContext.h" -#include "third_party/skia/include/gpu/vk/GrVkBackendContext.h" -#include "third_party/skia/include/gpu/vk/GrVkTypes.h" -#endif - namespace viz { // Parameters needed to draw a RenderPassDrawQuad. struct SkiaRenderer::DrawRenderPassDrawQuadParams { @@ -194,9 +183,6 @@ : DirectRenderer(settings, output_surface, resource_provider), skia_output_surface_(skia_output_surface), lock_set_for_external_use_(resource_provider) { -#if BUILDFLAG(ENABLE_VULKAN) - use_swap_with_bounds_ = false; -#else const auto& context_caps = output_surface_->context_provider()->ContextCapabilities(); use_swap_with_bounds_ = context_caps.swap_buffers_with_bounds; @@ -204,19 +190,11 @@ sync_queries_ = base::Optional<SyncQueryCollection>( output_surface_->context_provider()->ContextGL()); } -#endif } -SkiaRenderer::~SkiaRenderer() { -#if BUILDFLAG(ENABLE_VULKAN) - return; -#endif -} +SkiaRenderer::~SkiaRenderer() = default; bool SkiaRenderer::CanPartialSwap() { -#if BUILDFLAG(ENABLE_VULKAN) - return false; -#endif if (use_swap_with_bounds_) return false; auto* context_provider = output_surface_->context_provider(); @@ -225,9 +203,6 @@ void SkiaRenderer::BeginDrawingFrame() { TRACE_EVENT0("viz", "SkiaRenderer::BeginDrawingFrame"); -#if BUILDFLAG(ENABLE_VULKAN) - return; -#else // Copied from GLRenderer. scoped_refptr<ResourceFence> read_lock_fence; if (sync_queries_) { @@ -250,7 +225,6 @@ } } } -#endif } void SkiaRenderer::FinishDrawingFrame() { @@ -333,30 +307,6 @@ SkSurfaceProps surface_props = SkSurfaceProps(0, SkSurfaceProps::kLegacyFontHost_InitType); -#if BUILDFLAG(ENABLE_VULKAN) - gpu::VulkanSurface* vulkan_surface = output_surface_->GetVulkanSurface(); - gpu::VulkanSwapChain* swap_chain = vulkan_surface->GetSwapChain(); - VkImage image = swap_chain->GetCurrentImage(swap_chain->current_image()); - - GrVkImageInfo info_; - info_.fImage = image; - info_.fAlloc = {VK_NULL_HANDLE, 0, 0, 0}; - info_.fImageLayout = VK_IMAGE_LAYOUT_UNDEFINED; - info_.fImageTiling = VK_IMAGE_TILING_OPTIMAL; - info_.fFormat = VK_FORMAT_B8G8R8A8_UNORM; - info_.fLevelCount = 1; - - GrBackendRenderTarget render_target( - current_frame()->device_viewport_size.width(), - current_frame()->device_viewport_size.height(), 0, 0, info_); - - GrContext* gr_context = - output_surface_->vulkan_context_provider()->GetGrContext(); - root_surface_ = SkSurface::MakeFromBackendRenderTarget( - gr_context, render_target, kTopLeft_GrSurfaceOrigin, - kBGRA_8888_SkColorType, nullptr, &surface_props); - root_canvas_ = root_surface_->getCanvas(); -#else // TODO(weiliangc): Set up correct can_use_lcd_text for SkSurfaceProps flags. // How to setup is in ResourceProvider. (http://crbug.com/644851) @@ -381,7 +331,6 @@ kRGB_888x_SkColorType, nullptr, &surface_props); root_canvas_ = root_surface_->getCanvas(); } -#endif if (settings_->show_overdraw_feedback) { const auto& size = current_frame()->device_viewport_size; @@ -1030,10 +979,6 @@ SkImageInfo::Make(rect.width(), rect.height(), src_image->colorType(), src_image->alphaType(), nullptr); -#if BUILDFLAG(ENABLE_VULKAN) - // TODO(xing.xu): Handle Vulkan related logic here. - return nullptr; -#else GrContext* gr_context = output_surface_->context_provider()->GrContext(); // TODO(weiliangc): Set up correct can_use_lcd_text for SkSurfaceProps flags. // How to setup is in ResourceProvider. (http://crbug.com/644851) @@ -1055,7 +1000,6 @@ surface->getCanvas()->drawImage(src_image, rect.x(), rect.y(), &paint); return surface->makeImageSnapshot(); -#endif } sk_sp<SkShader> SkiaRenderer::GetBackgroundFilterShader( @@ -1154,19 +1098,12 @@ gpu::Capabilities caps; caps.texture_format_bgra8888 = true; GrContext* gr_context = nullptr; -#if BUILDFLAG(ENABLE_VULKAN) - if (!skia_output_surface_) { - gr_context = output_surface_->vulkan_context_provider()->GetGrContext(); - caps.texture_format_bgra8888 = true; - } -#else if (!skia_output_surface_) { ContextProvider* context_provider = output_surface_->context_provider(); caps.texture_format_bgra8888 = context_provider->ContextCapabilities().texture_format_bgra8888; gr_context = context_provider->GrContext(); } -#endif render_pass_backings_.insert(std::pair<RenderPassId, RenderPassBacking>( render_pass_id, RenderPassBacking(gr_context, caps, requirements.size,
diff --git a/components/viz/service/display/skia_renderer.h b/components/viz/service/display/skia_renderer.h index e7505d8b..b1dc014f2 100644 --- a/components/viz/service/display/skia_renderer.h +++ b/components/viz/service/display/skia_renderer.h
@@ -12,7 +12,6 @@ #include "components/viz/service/display/direct_renderer.h" #include "components/viz/service/display/sync_query_collection.h" #include "components/viz/service/viz_service_export.h" -#include "gpu/vulkan/buildflags.h" #include "ui/latency/latency_info.h" class SkNWayCanvas;
diff --git a/components/viz/service/display_embedder/gpu_display_provider.cc b/components/viz/service/display_embedder/gpu_display_provider.cc index af4b33b2..bdd3ac6 100644 --- a/components/viz/service/display_embedder/gpu_display_provider.cc +++ b/components/viz/service/display_embedder/gpu_display_provider.cc
@@ -212,9 +212,8 @@ #if defined(OS_WIN) if (!output_device_backing_) output_device_backing_ = std::make_unique<OutputDeviceBacking>(); - return std::make_unique<SoftwareOutputDeviceWin>( - output_device_backing_.get(), widget, - /*force_disable_hwnd_composited=*/true); + return std::make_unique<SoftwareOutputDeviceWin>(output_device_backing_.get(), + widget); #elif defined(OS_MACOSX) // TODO(crbug.com/730660): What do we do to get something we can draw to? Can // we use an IO surface? Can we use CA layers and overlays like we do for gpu
diff --git a/components/viz/service/display_embedder/software_output_device_win.cc b/components/viz/service/display_embedder/software_output_device_win.cc index 349d08f..32c11a16 100644 --- a/components/viz/service/display_embedder/software_output_device_win.cc +++ b/components/viz/service/display_embedder/software_output_device_win.cc
@@ -4,8 +4,11 @@ #include "components/viz/service/display_embedder/software_output_device_win.h" +#include <algorithm> + #include "base/debug/alias.h" #include "base/memory/shared_memory.h" +#include "base/win/windows_version.h" #include "components/viz/common/resources/resource_sizes.h" #include "skia/ext/platform_canvas.h" #include "skia/ext/skia_utils_win.h" @@ -14,12 +17,25 @@ #include "ui/gfx/skia_util.h" namespace viz { +namespace { // If a window is larger than this in bytes, don't even try to create a // backing bitmap for it. -static const size_t kMaxBitmapSizeBytes = 4 * (16384 * 8192); +constexpr size_t kMaxBitmapSizeBytes = 4 * (16384 * 8192); -OutputDeviceBacking::OutputDeviceBacking() : created_byte_size_(0) {} +bool NeedsToUseLayerWindow(HWND hwnd) { + // Layered windows are a legacy way of supporting transparency for HWNDs. With + // Desktop Window Manager (DWM) HWNDs support transparency natively. DWM is + // always enabled on Windows 8 and later. However, for Windows 7 (and earlier) + // DWM might be disabled and layered windows are necessary for HWNDs with + // transparency. + return base::win::GetVersion() <= base::win::VERSION_WIN7 && + GetProp(hwnd, ui::kWindowTranslucent); +} + +} // namespace + +OutputDeviceBacking::OutputDeviceBacking() = default; OutputDeviceBacking::~OutputDeviceBacking() { DCHECK(devices_.empty()); @@ -62,7 +78,7 @@ created_byte_size_ = expected_byte_size; - backing_.reset(new base::SharedMemory); + backing_ = std::make_unique<base::SharedMemory>(); base::debug::Alias(&expected_byte_size); CHECK(backing_->CreateAnonymous(created_byte_size_)); return backing_.get(); @@ -83,20 +99,13 @@ return max_size; } -SoftwareOutputDeviceWin::SoftwareOutputDeviceWin( - OutputDeviceBacking* backing, - gfx::AcceleratedWidget widget, - bool force_disable_hwnd_composited) - : hwnd_(widget), - is_hwnd_composited_(false), - backing_(backing), - in_paint_(false) { - is_hwnd_composited_ = !force_disable_hwnd_composited && - !!::GetProp(hwnd_, ui::kWindowTranslucent); +SoftwareOutputDeviceWin::SoftwareOutputDeviceWin(OutputDeviceBacking* backing, + HWND hwnd) + : hwnd_(hwnd), + use_layered_window_(NeedsToUseLayerWindow(hwnd)), + backing_(use_layered_window_ ? nullptr : backing) { // Layered windows must be completely updated every time, so they can't // share contents with other windows. - if (is_hwnd_composited_) - backing_ = nullptr; if (backing_) backing_->RegisterOutputDevice(this); } @@ -166,7 +175,7 @@ HDC dib_dc = skia::GetNativeDrawingContext(contents_.get()); - if (is_hwnd_composited_) { + if (use_layered_window_) { RECT wr; GetWindowRect(hwnd_, &wr); SIZE size = {wr.right - wr.left, wr.bottom - wr.top}; @@ -176,8 +185,8 @@ DWORD style = GetWindowLong(hwnd_, GWL_EXSTYLE); DCHECK(!(style & WS_EX_COMPOSITED)); - style |= WS_EX_LAYERED; - SetWindowLong(hwnd_, GWL_EXSTYLE, style); + if (!(style & WS_EX_LAYERED)) + SetWindowLong(hwnd_, GWL_EXSTYLE, style | WS_EX_LAYERED); ::UpdateLayeredWindow(hwnd_, NULL, &position, &size, dib_dc, &zero, RGB(0xFF, 0xFF, 0xFF), &blend, ULW_ALPHA);
diff --git a/components/viz/service/display_embedder/software_output_device_win.h b/components/viz/service/display_embedder/software_output_device_win.h index 3378efed..0743d5c4 100644 --- a/components/viz/service/display_embedder/software_output_device_win.h +++ b/components/viz/service/display_embedder/software_output_device_win.h
@@ -41,20 +41,14 @@ std::vector<SoftwareOutputDeviceWin*> devices_; std::unique_ptr<base::SharedMemory> backing_; - size_t created_byte_size_; + size_t created_byte_size_ = 0; DISALLOW_COPY_AND_ASSIGN(OutputDeviceBacking); }; class VIZ_SERVICE_EXPORT SoftwareOutputDeviceWin : public SoftwareOutputDevice { public: - // TODO(crbug.com/826633): Investigating if the layered window drawing - // path is necessary then remove |force_disable_hwnd_composited|. This is only - // used with --enable-features=VizDisplayCompositor where - // UpdateLayeredWindow() call is blocked by GPU sandbox. - SoftwareOutputDeviceWin(OutputDeviceBacking* backing, - gfx::AcceleratedWidget widget, - bool force_disable_hwnd_composited = false); + SoftwareOutputDeviceWin(OutputDeviceBacking* backing, HWND hwnd); ~SoftwareOutputDeviceWin() override; void Resize(const gfx::Size& viewport_pixel_size, @@ -66,11 +60,12 @@ void ReleaseContents(); private: - HWND hwnd_; + const HWND hwnd_; + const bool use_layered_window_; + OutputDeviceBacking* const backing_; + std::unique_ptr<SkCanvas> contents_; - bool is_hwnd_composited_; - OutputDeviceBacking* backing_; - bool in_paint_; + bool in_paint_ = false; THREAD_CHECKER(thread_checker_); DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceWin);
diff --git a/components/viz/test/data/mask_of_background_filter_and_blend.png b/components/viz/test/data/mask_of_background_filter_and_blend.png new file mode 100644 index 0000000..1c6cdfa --- /dev/null +++ b/components/viz/test/data/mask_of_background_filter_and_blend.png Binary files differ
diff --git a/components/zucchini/README.md b/components/zucchini/README.md index 19f8cd6..42f3b3e 100644 --- a/components/zucchini/README.md +++ b/components/zucchini/README.md
@@ -209,8 +209,8 @@ Name | Format | Description --- | --- | --- old_offset | uint32 | Starting offset of the element in old file. -new_offset | uint32 | Starting offset of the element in new file. old_length | uint32 | Length of the element in old file. +new_offset | uint32 | Starting offset of the element in new file. new_length | uint32 | Length of the element in new file. exe_type | uint32 | Executable type for this unit, see `enum ExecutableType`.
diff --git a/components/zucchini/patch_read_write_unittest.cc b/components/zucchini/patch_read_write_unittest.cc index 681e3c2..627513c6 100644 --- a/components/zucchini/patch_read_write_unittest.cc +++ b/components/zucchini/patch_read_write_unittest.cc
@@ -57,47 +57,49 @@ ByteVector CreatePatchElement() { return { - 0x01, 0, 0, 0, // old_offset - 0x03, 0, 0, 0, // new_offset - 0x51, 0, 0, 0, // old_length - 0x13, 0, 0, 0, // new_length - 'P', 'x', '8', '6', // EXE_TYPE_WIN32_X86 - - 1, 0, 0, 0, // src_skip size - 0x10, // src_skip content - 1, 0, 0, 0, // dst_skip size - 0x00, // dst_skip content - 1, 0, 0, 0, // copy_count size - 0x12, // copy_count content - - 1, 0, 0, 0, // extra_data size - 0x13, // extra_data content - - 1, 0, 0, 0, // raw_delta_skip size - 0x14, // raw_delta_skip content - 1, 0, 0, 0, // raw_delta_diff size - 0x15, // raw_delta_diff content - - 1, 0, 0, 0, // reference_delta size - 0x16, // reference_delta content - - 2, 0, 0, 0, // pool count - 0, // pool_tag - 1, 0, 0, 0, // extra_targets size - 0x17, // extra_targets content - 2, // pool_tag - 1, 0, 0, 0, // extra_targets size - 0x18, // extra_targets content + // PatchElementHeader + 0x01, 0, 0, 0, // old_offset + 0x51, 0, 0, 0, // old_length + 0x03, 0, 0, 0, // new_offset + 0x13, 0, 0, 0, // new_length + 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86 + // EquivalenceSource + 1, 0, 0, 0, // src_skip size + 0x10, // src_skip content + 1, 0, 0, 0, // dst_skip size + 0x00, // dst_skip content + 1, 0, 0, 0, // copy_count size + 0x12, // copy_count content + // ExtraDataSource + 1, 0, 0, 0, // extra_data size + 0x13, // extra_data content + // RawDeltaSource + 1, 0, 0, 0, // raw_delta_skip size + 0x14, // raw_delta_skip content + 1, 0, 0, 0, // raw_delta_diff size + 0x15, // raw_delta_diff content + // ReferenceDeltaSource + 1, 0, 0, 0, // reference_delta size + 0x16, // reference_delta content + // PatchElementReader + 2, 0, 0, 0, // pool count + 0, // pool_tag + 1, 0, 0, 0, // extra_targets size + 0x17, // extra_targets content + 2, // pool_tag + 1, 0, 0, 0, // extra_targets size + 0x18, // extra_targets content }; } ByteVector CreateElementMatch() { return { + // PatchElementHeader 0x01, 0, 0, 0, // old_offset - 0x03, 0, 0, 0, // new_offset 0x02, 0, 0, 0, // old_length + 0x03, 0, 0, 0, // new_offset 0x04, 0, 0, 0, // new_length - 'D', 'E', 'X', ' ', // kExeTypeDex + 'D', 'E', 'X', ' ', // exe_type = kExeTypeDex }; } @@ -149,7 +151,8 @@ // Set old_length to 0 to trigger an error. { ByteVector data = CreateElementMatch(); - ModifyByte(8U, 0x02, 0x00, &data); // Make the old_length = 0. + // old_length := 0. + ModifyByte(offsetof(PatchElementHeader, old_length), 0x02, 0x00, &data); BufferSource buffer_source(data.data(), data.size()); ElementMatch element_match = {}; EXPECT_FALSE(patch::ParseElementMatch(&buffer_source, &element_match)); @@ -157,7 +160,8 @@ // Set new_length to 0 to trigger an error. { ByteVector data = CreateElementMatch(); - ModifyByte(12U, 0x04, 0x00, &data); // Make the new_length = 0. + // new_length := 0. + ModifyByte(offsetof(PatchElementHeader, new_length), 0x04, 0x00, &data); BufferSource buffer_source(data.data(), data.size()); ElementMatch element_match = {}; EXPECT_FALSE(patch::ParseElementMatch(&buffer_source, &element_match)); @@ -165,8 +169,10 @@ // Set both new_length and old_length to 0 to trigger an error. { ByteVector data = CreateElementMatch(); - ModifyByte(8U, 0x02, 0x00, &data); // Make the old_length = 0. - ModifyByte(12U, 0x04, 0x00, &data); // Make the new_length = 0. + // old_length := 0. + ModifyByte(offsetof(PatchElementHeader, old_length), 0x02, 0x00, &data); + // new_length := 0. + ModifyByte(offsetof(PatchElementHeader, new_length), 0x04, 0x00, &data); BufferSource buffer_source(data.data(), data.size()); ElementMatch element_match = {}; EXPECT_FALSE(patch::ParseElementMatch(&buffer_source, &element_match)); @@ -245,6 +251,7 @@ TEST(EquivalenceSinkSourceTest, Empty) { ByteVector data = { + // EquivalenceSource 0, 0, 0, 0, // src_skip size 0, 0, 0, 0, // dst_skip size 0, 0, 0, 0, // copy_count size @@ -260,6 +267,7 @@ TEST(EquivalenceSourceSinkTest, Normal) { ByteVector data = { + // EquivalenceSource 2, 0, 0, 0, // src_skip size 6, 7, // src_skip content 2, 0, 0, 0, // dst_skip size @@ -294,6 +302,7 @@ TEST(ExtraDataSourceSinkTest, Empty) { ByteVector data = { + // ExtraDataSource 0, 0, 0, 0, // extra_data size }; ExtraDataSource extra_data_source = TestInitialize<ExtraDataSource>(&data); @@ -306,6 +315,7 @@ TEST(ExtraDataSourceSinkTest, Normal) { ByteVector data = { + // ExtraDataSource 5, 0, 0, 0, // extra_data size 1, 2, 3, 4, 5, // extra_data content }; @@ -339,6 +349,7 @@ TEST(RawDeltaSourceSinkTest, Empty) { ByteVector data = { + // RawDeltaSource 0, 0, 0, 0, // raw_delta_skip size 0, 0, 0, 0, // raw_delta_diff size }; @@ -352,6 +363,7 @@ TEST(RawDeltaSinkSourceSinkTest, Normal) { ByteVector data = { + // RawDeltaSource 3, 0, 0, 0, // raw_delta_skip size 1, 3, 0, // raw_delta_skip content 3, 0, 0, 0, // raw_delta_diff size @@ -390,6 +402,7 @@ TEST(RawDeltaSourceSinkTest, InvalidContent) { ByteVector data = { + // RawDeltaSource 2, 0, 0, 0, // raw_delta_skip size 1, 3, // raw_delta_skip content 2, 0, 0, 0, // raw_delta_diff size @@ -402,6 +415,7 @@ TEST(ReferenceDeltaSourceSinkTest, Empty) { ByteVector data = { + // ReferenceDeltaSource 0, 0, 0, 0, // reference_delta size }; ReferenceDeltaSource reference_delta_source = @@ -415,6 +429,7 @@ TEST(ReferenceDeltaSourceSinkTest, Normal) { ByteVector data = { + // ReferenceDeltaSource 2, 0, 0, 0, // reference_delta size 84, 47, // reference_delta content }; @@ -443,6 +458,7 @@ TEST(TargetSourceSinkTest, Empty) { ByteVector data = { + // TargetSource 0, 0, 0, 0, // extra_targets size }; TargetSource target_source = TestInitialize<TargetSource>(&data); @@ -455,6 +471,7 @@ TEST(TargetSourceSinkTest, Normal) { ByteVector data = { + // TargetSource 2, 0, 0, 0, // extra_targets size 3, 1, // extra_targets content }; @@ -535,61 +552,71 @@ } TEST(PatchElementTest, BadEquivalence) { - // If the "old" element is too small the test should fail. + // If the "old" element is too small then the test should fail. { ByteVector data = CreatePatchElement(); - ModifyByte(8, 0x51, 0x04, &data); // old_length (too small) + // old_length := 0x4 (too small). + ModifyByte(offsetof(PatchElementHeader, old_length), 0x51, 0x04, &data); TestInvalidInitialize<PatchElementReader>(&data); } - // If the "new" element is too small the test should fail. + // If the "new" element is too small then the test should fail. { ByteVector data = CreatePatchElement(); - ModifyByte(12, 0x13, 0x05, &data); // new_length (too small) + // new_length := 0x5 (too small). + ModifyByte(offsetof(PatchElementHeader, new_length), 0x13, 0x05, &data); TestInvalidInitialize<PatchElementReader>(&data); } } TEST(PatchElementTest, WrongExtraData) { - // Make "new" too large so there is insufficient extra data to cover the - // image. + // Make "new" too large so insufficient extra data exists to cover the image. { ByteVector data = CreatePatchElement(); - ModifyByte(12, 0x13, 0x14, &data); // new_length (too large) + // new_length := 0x14 (too large). + ModifyByte(offsetof(PatchElementHeader, new_length), 0x13, 0x14, &data); TestInvalidInitialize<PatchElementReader>(&data); } // Make "new" too small so there is too much extra data. { ByteVector data = CreatePatchElement(); - ModifyByte(12, 0x13, 0x14, &data); // new_length (too small) + // new_length := 0x12 (too small). + ModifyByte(offsetof(PatchElementHeader, new_length), 0x13, 0x12, &data); TestInvalidInitialize<PatchElementReader>(&data); } } TEST(EnsemblePatchTest, RawPatch) { ByteVector data = { + // PatchHeader 0x5A, 0x75, 0x63, 0x00, // magic 0x10, 0x32, 0x54, 0x76, // old_size 0x00, 0x11, 0x22, 0x33, // old_crc - 0x01, 0, 0, 0, // new_size + 0x01, 0, 0, 0, // new_size 0x44, 0x55, 0x66, 0x77, // new_crc - 1, 0, 0, 0, // number of element + 1, 0, 0, 0, // number of element - 0x01, 0, 0, 0, // old_offset - 0x00, 0, 0, 0, // new_offset - 0x02, 0, 0, 0, // old_length - 0x01, 0, 0, 0, // new_length - 'P', 'x', '8', '6', // EXE_TYPE_WIN32_X86 - 0, 0, 0, 0, // src_skip size - 0, 0, 0, 0, // dst_skip size - 0, 0, 0, 0, // copy_count size - 0x01, 0, 0, 0, // extra_data size - 0x04, // extra_data content - 0, 0, 0, 0, // raw_delta_skip size - 0, 0, 0, 0, // raw_delta_diff size - 0, 0, 0, 0, // reference_delta size - 0, 0, 0, 0, // pool count + // PatchElementHeader + 0x01, 0, 0, 0, // old_offset + 0x02, 0, 0, 0, // old_length + 0x00, 0, 0, 0, // new_offset + 0x01, 0, 0, 0, // new_length + 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86 + // EquivalenceSource + 0, 0, 0, 0, // src_skip size + 0, 0, 0, 0, // dst_skip size + 0, 0, 0, 0, // copy_count size + // ExtraDataSource + 0x01, 0, 0, 0, // extra_data size + 0x04, // extra_data content + // RawDeltaSource + 0, 0, 0, 0, // raw_delta_skip size + 0, 0, 0, 0, // raw_delta_diff size + // ReferenceDeltaSource + 0, 0, 0, 0, // reference_delta size + // PatchElementReader + 0, 0, 0, 0, // pool count }; EnsemblePatchReader ensemble_patch_reader = @@ -619,28 +646,35 @@ TEST(EnsemblePatchTest, CheckFile) { ByteVector data = { + // PatchHeader 0x5A, 0x75, 0x63, 0x00, // magic 0x05, 0x00, 0x00, 0x00, // old_size 0xDF, 0x13, 0xE4, 0x10, // old_crc 0x03, 0x00, 0x00, 0x00, // new_size 0xDC, 0xF7, 0x00, 0x40, // new_crc - 1, 0, 0, 0, // number of element + 1, 0, 0, 0, // number of element - 0x01, 0, 0, 0, // old_offset - 0x00, 0, 0, 0, // new_offset - 0x02, 0, 0, 0, // old_length - 0x03, 0, 0, 0, // new_length - 'P', 'x', '8', '6', // EXE_TYPE_WIN32_X86 - 0, 0, 0, 0, // src_skip size - 0, 0, 0, 0, // dst_skip size - 0, 0, 0, 0, // copy_count size - 0x03, 0, 0, 0, // extra_data size - 'A', 'B', 'C', // extra_data content - 0, 0, 0, 0, // raw_delta_skip size - 0, 0, 0, 0, // raw_delta_diff size - 0, 0, 0, 0, // reference_delta size - 0, 0, 0, 0, // pool count + // PatchElementHeader + 0x01, 0, 0, 0, // old_offset + 0x02, 0, 0, 0, // old_length + 0x00, 0, 0, 0, // new_offset + 0x03, 0, 0, 0, // new_length + 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86 + // EquivalenceSource + 0, 0, 0, 0, // src_skip size + 0, 0, 0, 0, // dst_skip size + 0, 0, 0, 0, // copy_count size + // ExtraDataSource + 0x03, 0, 0, 0, // extra_data size + 'A', 'B', 'C', // extra_data content + // RawDeltaSource + 0, 0, 0, 0, // raw_delta_skip size + 0, 0, 0, 0, // raw_delta_diff size + // ReferenceDeltaSource + 0, 0, 0, 0, // reference_delta size + // PatchElementReader + 0, 0, 0, 0, // pool count }; EnsemblePatchReader ensemble_patch_reader = @@ -660,27 +694,34 @@ TEST(EnsemblePatchTest, InvalidMagic) { ByteVector data = { + // PatchHeader 0x42, 0x42, 0x42, 0x00, // magic 0x10, 0x32, 0x54, 0x76, // old_size 0x00, 0x11, 0x22, 0x33, // old_crc 0x03, 0x00, 0x00, 0x00, // new_size 0x44, 0x55, 0x66, 0x77, // new_crc - 1, 0, 0, 0, // number of element + 1, 0, 0, 0, // number of element - 0x01, 0, 0, 0, // old_offset - 0x00, 0, 0, 0, // new_offset - 0x02, 0, 0, 0, // old_length - 0x03, 0, 0, 0, // new_length - 'P', 'x', '8', '6', // EXE_TYPE_WIN32_X86 - 0, 0, 0, 0, // src_skip size - 0, 0, 0, 0, // dst_skip size - 0, 0, 0, 0, // copy_count size - 0, 0, 0, 0, // extra_data size - 0, 0, 0, 0, // raw_delta_skip size - 0, 0, 0, 0, // raw_delta_diff size - 0, 0, 0, 0, // reference_delta size - 0, 0, 0, 0, // pool count + // PatchElementHeader + 0x01, 0, 0, 0, // old_offset + 0x02, 0, 0, 0, // old_length + 0x00, 0, 0, 0, // new_offset + 0x03, 0, 0, 0, // new_length + 'P', 'x', '8', '6', // exe_type = EXE_TYPE_WIN32_X86 + // EquivalenceSource + 0, 0, 0, 0, // src_skip size + 0, 0, 0, 0, // dst_skip size + 0, 0, 0, 0, // copy_count size + // ExtraDataSource + 0, 0, 0, 0, // extra_data size + // RawDeltaSource + 0, 0, 0, 0, // raw_delta_skip size + 0, 0, 0, 0, // raw_delta_diff size + // ReferenceDeltaSource + 0, 0, 0, 0, // reference_delta size + // PatchElementReader + 0, 0, 0, 0, // pool count }; TestInvalidInitialize<EnsemblePatchReader>(&data);
diff --git a/components/zucchini/patch_reader.cc b/components/zucchini/patch_reader.cc index 0215bc8..3ec17e4 100644 --- a/components/zucchini/patch_reader.cc +++ b/components/zucchini/patch_reader.cc
@@ -38,8 +38,8 @@ // Caveat: Element offsets and lengths can still be invalid (e.g., exceeding // archive bounds), but this will be checked later. element_match->old_element.offset = element_header.old_offset; - element_match->new_element.offset = element_header.new_offset; element_match->old_element.size = element_header.old_length; + element_match->new_element.offset = element_header.new_offset; element_match->new_element.size = element_header.new_length; element_match->old_element.exe_type = exe_type; element_match->new_element.exe_type = exe_type;
diff --git a/components/zucchini/patch_utils.h b/components/zucchini/patch_utils.h index b904380..5f49195 100644 --- a/components/zucchini/patch_utils.h +++ b/components/zucchini/patch_utils.h
@@ -34,20 +34,20 @@ }; // Sanity check. -static_assert(sizeof(PatchHeader) == 20, "PatchHeader is 20 bytes"); +static_assert(sizeof(PatchHeader) == 20, "PatchHeader must be 20 bytes"); // Header for a patch element, found at the beginning of every patch element. struct PatchElementHeader { uint32_t old_offset; - uint32_t new_offset; uint32_t old_length; + uint32_t new_offset; uint32_t new_length; - uint32_t exe_type; + uint32_t exe_type; // ExecutableType. }; // Sanity check. static_assert(sizeof(PatchElementHeader) == 20, - "PatchElementHeader is 28 bytes"); + "PatchElementHeader must be 20 bytes"); #pragma pack(pop)
diff --git a/components/zucchini/patch_writer.cc b/components/zucchini/patch_writer.cc index 114bcd4..1206208 100644 --- a/components/zucchini/patch_writer.cc +++ b/components/zucchini/patch_writer.cc
@@ -23,10 +23,10 @@ PatchElementHeader element_header; element_header.old_offset = base::checked_cast<uint32_t>(element_match.old_element.offset); - element_header.new_offset = - base::checked_cast<uint32_t>(element_match.new_element.offset); element_header.old_length = base::checked_cast<uint32_t>(element_match.old_element.size); + element_header.new_offset = + base::checked_cast<uint32_t>(element_match.new_element.offset); element_header.new_length = base::checked_cast<uint32_t>(element_match.new_element.size); element_header.exe_type = element_match.exe_type();
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc index 58134949..7264de65 100644 --- a/content/browser/download/download_browsertest.cc +++ b/content/browser/download/download_browsertest.cc
@@ -2187,7 +2187,13 @@ test_response_handler()->WaitUntilCompletion(2u); } -IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelResumedDownload) { +// TODO(qinmin): Flaky crashes on ASAN Linux. https://crbug.com/836689 +#if defined(OS_LINUX) && defined(ADDRESS_SANITIZER) +#define MAYBE_CancelResumedDownload DISABLED_CancelResumedDownload +#else +#define MAYBE_CancelResumedDownload CancelResumedDownload +#endif +IN_PROC_BROWSER_TEST_F(DownloadContentTest, MAYBE_CancelResumedDownload) { SetupErrorInjectionDownloads(); TestDownloadHttpResponse::Parameters parameters = TestDownloadHttpResponse::Parameters::WithSingleInterruption(
diff --git a/content/browser/gpu/compositor_util.cc b/content/browser/gpu/compositor_util.cc index bad93da..aa25eeb 100644 --- a/content/browser/gpu/compositor_util.cc +++ b/content/browser/gpu/compositor_util.cc
@@ -180,10 +180,6 @@ !base::FeatureList::IsEnabled(features::kVizDisplayCompositor), "Viz service display compositor is not enabled by default.", false, false}, - {"checker_imaging", gpu::kGpuFeatureStatusEnabled, - !IsCheckerImagingEnabled(), - "Checker-imaging has been disabled via finch trial or the command line.", - false, true}, }; DCHECK(index < arraysize(kGpuFeatureData)); *eof = (index == arraysize(kGpuFeatureData) - 1); @@ -237,13 +233,6 @@ status += "_force"; status += "_on"; } - if (gpu_feature_data.name == "checker_imaging") { - const base::CommandLine& command_line = - *base::CommandLine::ForCurrentProcess(); - if (command_line.HasSwitch(cc::switches::kEnableCheckerImaging)) - status += "_force"; - status += "_on"; - } if (gpu_feature_data.name == "surface_synchronization") { if (features::IsSurfaceSynchronizationEnabled()) status += "_on"; @@ -438,21 +427,6 @@ return true; } -bool IsCheckerImagingEnabled() { - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - cc::switches::kDisableCheckerImaging)) - return false; - - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - cc::switches::kEnableCheckerImaging)) - return true; - - if (base::FeatureList::IsEnabled(features::kCheckerImaging)) - return true; - - return false; -} - std::unique_ptr<base::DictionaryValue> GetFeatureStatus() { return GetFeatureStatusImpl(GpuFeatureInfoType::kCurrent); }
diff --git a/content/browser/gpu/compositor_util.h b/content/browser/gpu/compositor_util.h index 43709ff..e9ed209 100644 --- a/content/browser/gpu/compositor_util.h +++ b/content/browser/gpu/compositor_util.h
@@ -37,9 +37,6 @@ // Returns true if main thread can be pipelined with activation. CONTENT_EXPORT bool IsMainFrameBeforeActivationEnabled(); -// Returns true if images can be decode asynchronously from rasterization. -CONTENT_EXPORT bool IsCheckerImagingEnabled(); - // Returns true if image animations should run in the compositor. CONTENT_EXPORT bool IsCompositorImageAnimationEnabled();
diff --git a/content/browser/renderer_host/input/fling_controller.cc b/content/browser/renderer_host/input/fling_controller.cc index 478b70e..5f88cce 100644 --- a/content/browser/renderer_host/input/fling_controller.cc +++ b/content/browser/renderer_host/input/fling_controller.cc
@@ -347,7 +347,6 @@ WebInputEvent::kGestureScrollUpdate)) { WebGestureEvent scroll_begin_event = last_fling_boost_event; scroll_begin_event.SetType(WebInputEvent::kGestureScrollBegin); - scroll_begin_event.SetTimeStamp(base::TimeTicks::Now()); bool is_update = last_fling_boost_event.GetType() == WebInputEvent::kGestureScrollUpdate; float delta_x_hint =
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc index 59faea3..5a72602 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -48,20 +48,22 @@ // TestBrowserContext has a URLRequestContextGetter which uses a NullTaskRunner. // This causes it to be destroyed on the wrong thread. This BrowserContext -// instead returns nullptr since it's not required by the test. -class TestBrowserContextWithoutURLRequestContextGetter +// instead uses the IO thread task runner for the URLRequestContextGetter. +class TestBrowserContextWithRealURLRequestContextGetter : public TestBrowserContext { public: - TestBrowserContextWithoutURLRequestContextGetter() { + TestBrowserContextWithRealURLRequestContextGetter() { + request_context_ = base::MakeRefCounted<net::TestURLRequestContextGetter>( + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)); salt_ = TestBrowserContext::GetMediaDeviceIDSalt(); } - ~TestBrowserContextWithoutURLRequestContextGetter() override {} + ~TestBrowserContextWithRealURLRequestContextGetter() override {} net::URLRequestContextGetter* CreateRequestContext( ProtocolHandlerMap* protocol_handlers, URLRequestInterceptorScopedVector request_interceptors) override { - return nullptr; + return request_context_.get(); } std::string GetMediaDeviceIDSalt() override { return salt_; } @@ -69,6 +71,7 @@ void set_media_device_id_salt(std::string salt) { salt_ = std::move(salt); } private: + scoped_refptr<net::TestURLRequestContextGetter> request_context_; std::string salt_; }; @@ -90,7 +93,7 @@ BrowserContext* CreateBrowserContext() override { // Caller takes ownership. - return new TestBrowserContextWithoutURLRequestContextGetter(); + return new TestBrowserContextWithRealURLRequestContextGetter(); } void SetUp() override { @@ -405,7 +408,7 @@ // Reset the salt and expect authorization of the device ID hashed with // the old salt to fail. auto* context = - static_cast<TestBrowserContextWithoutURLRequestContextGetter*>( + static_cast<TestBrowserContextWithRealURLRequestContextGetter*>( browser_context()); context->set_media_device_id_salt("new salt"); EXPECT_CALL(listener, Run(media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, _, _,
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.cc b/content/browser/renderer_host/media/media_devices_dispatcher_host.cc index c050afe3..6818c22 100644 --- a/content/browser/renderer_host/media/media_devices_dispatcher_host.cc +++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
@@ -196,7 +196,12 @@ MediaDeviceSaltAndOrigin salt_and_origin, const std::string& default_device_id) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - media_stream_manager_->video_capture_manager()->EnumerateDevices( + MediaDevicesManager::BoolDeviceTypes requested_types; + // Also request audio devices to make sure the heuristic to determine + // the video group ID works. + requested_types[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; + media_stream_manager_->media_devices_manager()->EnumerateDevices( + requested_types, base::Bind(&MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities, weak_factory_.GetWeakPtr(), base::Passed(&client_callback), std::move(salt_and_origin), std::move(default_device_id))); @@ -206,22 +211,26 @@ GetVideoInputCapabilitiesCallback client_callback, const MediaDeviceSaltAndOrigin& salt_and_origin, const std::string& default_device_id, - const media::VideoCaptureDeviceDescriptors& device_descriptors) { + const MediaDeviceEnumeration& enumeration) { DCHECK_CURRENTLY_ON(BrowserThread::IO); std::vector<blink::mojom::VideoInputDeviceCapabilitiesPtr> video_input_capabilities; - for (const auto& descriptor : device_descriptors) { + for (const auto& device_info : enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT]) { std::string hmac_device_id = GetHMACForMediaDeviceID(salt_and_origin.device_id_salt, - salt_and_origin.origin, descriptor.device_id); + salt_and_origin.origin, device_info.device_id); + std::string hmac_group_id = + GetHMACForMediaDeviceID(salt_and_origin.group_id_salt, + salt_and_origin.origin, device_info.group_id); blink::mojom::VideoInputDeviceCapabilitiesPtr capabilities = blink::mojom::VideoInputDeviceCapabilities::New(); capabilities->device_id = std::move(hmac_device_id); + capabilities->group_id = std::move(hmac_group_id); capabilities->formats = media_stream_manager_->media_devices_manager()->GetVideoInputFormats( - descriptor.device_id, true /* try_in_use_first */); - capabilities->facing_mode = descriptor.facing; - if (descriptor.device_id == default_device_id) { + device_info.device_id, true /* try_in_use_first */); + capabilities->facing_mode = device_info.video_facing; + if (device_info.device_id == default_device_id) { video_input_capabilities.insert(video_input_capabilities.begin(), std::move(capabilities)); } else {
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.h b/content/browser/renderer_host/media/media_devices_dispatcher_host.h index 1222cb1..f112b46 100644 --- a/content/browser/renderer_host/media/media_devices_dispatcher_host.h +++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.h
@@ -74,7 +74,7 @@ GetVideoInputCapabilitiesCallback client_callback, const MediaDeviceSaltAndOrigin& salt_and_origin, const std::string& default_device_id, - const media::VideoCaptureDeviceDescriptors& device_descriptors); + const MediaDeviceEnumeration& enumeration); void GetDefaultAudioInputDeviceID( GetAudioInputCapabilitiesCallback client_callback,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 07935be..c5864a7 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2580,9 +2580,6 @@ if (IsMainFrameBeforeActivationEnabled()) command_line->AppendSwitch(cc::switches::kEnableMainFrameBeforeActivation); - if (IsCheckerImagingEnabled()) - command_line->AppendSwitch(cc::switches::kEnableCheckerImaging); - // Slimming Paint v2 implies layer lists in the renderer. if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableSlimmingPaintV2) || @@ -2771,6 +2768,7 @@ // also be added to chrome/browser/chromeos/login/chrome_restart_request.cc. cc::switches::kAlwaysRequestPresentationTime, cc::switches::kCheckDamageEarly, + cc::switches::kDisableCheckerImaging, cc::switches::kDisableCompositedAntialiasing, cc::switches::kDisableThreadedAnimation, cc::switches::kEnableGpuBenchmarking,
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 1a68a39..5626c8d 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -95,6 +95,7 @@ #include "ui/aura/window_observer.h" #include "ui/base/clipboard/clipboard.h" #include "ui/base/ime/input_method.h" +#include "ui/base/ime/input_method_factory.h" #include "ui/base/ime/input_method_keyboard_controller.h" #include "ui/base/ime/mock_input_method.h" #include "ui/base/ui_base_features.h" @@ -7002,21 +7003,23 @@ RenderWidgetHostViewAuraKeyboardTest() = default; ~RenderWidgetHostViewAuraKeyboardTest() override{}; void SetUp() override { + input_method_ = new RenderWidgetHostViewAuraKeyboardMockInputMethod(); + // transfers ownership. + ui::SetUpInputMethodForTesting(input_method_); SetUpEnvironment(); - aura_test_helper_->host()->SetSharedInputMethod(&input_method_); } size_t keyboard_controller_observer_count() const { - return input_method_.keyboard_controller_observer_count(); + return input_method_->keyboard_controller_observer_count(); } private: - RenderWidgetHostViewAuraKeyboardMockInputMethod input_method_; + // Not owned. + RenderWidgetHostViewAuraKeyboardMockInputMethod* input_method_ = nullptr; DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraKeyboardTest); }; -TEST_F(RenderWidgetHostViewAuraKeyboardTest, - DISABLED_KeyboardObserverDestroyed) { +TEST_F(RenderWidgetHostViewAuraKeyboardTest, KeyboardObserverDestroyed) { parent_view_->FocusedNodeTouched(true); EXPECT_NE(parent_view_->keyboard_observer_.get(), nullptr); EXPECT_EQ(keyboard_controller_observer_count(), 1u);
diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resources/gpu/info_view.js index bb8498b7e..b38c7e3a 100644 --- a/content/browser/resources/gpu/info_view.js +++ b/content/browser/resources/gpu/info_view.js
@@ -235,7 +235,6 @@ 'surface_synchronization': 'Surface Synchronization', 'vpx_decode': 'VPx Video Decode', 'webgl2': 'WebGL2', - 'checker_imaging': 'CheckerImaging', 'viz_display_compositor': 'Viz Service Display Compositor', };
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc index 82f60b6..2f5875b 100644 --- a/content/browser/storage_partition_impl_map.cc +++ b/content/browser/storage_partition_impl_map.cc
@@ -442,11 +442,8 @@ // be initialized using |url_request_context_|, which is initialized by // SetURLRequestContext(). DCHECK(partition->url_loader_factory_getter()); - // TODO(crbug.com/826869): |url_request_context_| is not configured - // correctly in some unittests. We should fix those tests and turn this 'if' - // into a DCHECK. - if (partition->url_request_context_) - partition->url_loader_factory_getter()->HandleFactoryRequests(); + DCHECK(partition->url_request_context_); + partition->url_loader_factory_getter()->HandleFactoryRequests(); } PostCreateInitialization(partition, in_memory);
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc index 082b3cd..892865f 100644 --- a/content/child/blink_platform_impl.cc +++ b/content/child/blink_platform_impl.cc
@@ -742,10 +742,6 @@ return false; } -size_t BlinkPlatformImpl::NumberOfProcessors() { - return static_cast<size_t>(base::SysInfo::NumberOfProcessors()); -} - size_t BlinkPlatformImpl::MaxDecodedImageBytes() { const int kMB = 1024 * 1024; const int kMaxNumberOfBytesPerPixel = 4;
diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h index f2f0147..4185f76 100644 --- a/content/child/blink_platform_impl.h +++ b/content/child/blink_platform_impl.h
@@ -71,7 +71,6 @@ const blink::WebSecurityOrigin& origin) override; bool DatabaseSetFileSize(const blink::WebString& vfs_file_name, long long size) override; - size_t NumberOfProcessors() override; size_t MaxDecodedImageBytes() override; bool IsLowEndDevice() override;
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 573e9bd2..fe0941c 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -76,11 +76,6 @@ #endif }; -// Enabled decoding images asynchronously from raster in the renderer -// compositor. -const base::Feature kCheckerImaging{"CheckerImaging", - base::FEATURE_DISABLED_BY_DEFAULT}; - // Enables the compositing of fixed position content that is opaque and can // preserve LCD text. const base::Feature kCompositeOpaqueFixedPosition{
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index 1b95342b..e06a79f 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -27,7 +27,6 @@ CONTENT_EXPORT extern const base::Feature kBrotliEncoding; CONTENT_EXPORT extern const base::Feature kCacheInlineScriptCode; CONTENT_EXPORT extern const base::Feature kCanvas2DImageChromium; -CONTENT_EXPORT extern const base::Feature kCheckerImaging; CONTENT_EXPORT extern const base::Feature kCompositeOpaqueFixedPosition; CONTENT_EXPORT extern const base::Feature kCompositeOpaqueScrollers; CONTENT_EXPORT extern const base::Feature kCompositorTouchAction;
diff --git a/content/public/test/test_browser_context.cc b/content/public/test/test_browser_context.cc index 1b98904..1ff07fb 100644 --- a/content/public/test/test_browser_context.cc +++ b/content/public/test/test_browser_context.cc
@@ -173,7 +173,9 @@ ProtocolHandlerMap* protocol_handlers, URLRequestInterceptorScopedVector request_interceptors) { request_interceptors_ = std::move(request_interceptors); - return nullptr; + // Simply returns the same RequestContext since no tests is relying on the + // expected behavior. + return GetRequestContext(); } net::URLRequestContextGetter* TestBrowserContext::CreateMediaRequestContext() {
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc index c77ec98..2fe11a1 100644 --- a/content/renderer/gpu/gpu_benchmarking_extension.cc +++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
@@ -13,6 +13,7 @@ #include "base/base64.h" #include "base/command_line.h" +#include "base/debug/profiler.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/macros.h" @@ -550,7 +551,9 @@ .SetMethod("hasGpuChannel", &GpuBenchmarking::HasGpuChannel) .SetMethod("hasGpuProcess", &GpuBenchmarking::HasGpuProcess) .SetMethod("getGpuDriverBugWorkarounds", - &GpuBenchmarking::GetGpuDriverBugWorkarounds); + &GpuBenchmarking::GetGpuDriverBugWorkarounds) + .SetMethod("startProfiling", &GpuBenchmarking::StartProfiling) + .SetMethod("stopProfiling", &GpuBenchmarking::StopProfiling); } void GpuBenchmarking::SetNeedsDisplayOnAllLayers() { @@ -1075,4 +1078,21 @@ args->Return(result); } +void GpuBenchmarking::StartProfiling(gin::Arguments* args) { + if (base::debug::BeingProfiled()) + return; + std::string file_name; + if (!GetOptionalArg(args, &file_name)) + return; + if (!file_name.length()) + file_name = "profile.pb"; + base::debug::StartProfiling(file_name); + base::debug::RestartProfilingAfterFork(); +} + +void GpuBenchmarking::StopProfiling() { + if (base::debug::BeingProfiled()) + base::debug::StopProfiling(); +} + } // namespace content
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.h b/content/renderer/gpu/gpu_benchmarking_extension.h index 477f5ed..15b285c 100644 --- a/content/renderer/gpu/gpu_benchmarking_extension.h +++ b/content/renderer/gpu/gpu_benchmarking_extension.h
@@ -82,6 +82,15 @@ bool HasGpuProcess(); void GetGpuDriverBugWorkarounds(gin::Arguments* args); + // Starts/stops the sampling profiler. StartProfiling takes one optional + // argument, which is a file name for saving the data (relative to `pwd` + // or %USERDIR%); if omitted, it defaults to "profile.pb". + // + // DO NOT USE THIS IN CHROMIUM TESTS -- we don't want to fill up the bots' + // hard drives with profile data. + void StartProfiling(gin::Arguments* args); + void StopProfiling(); + RenderFrameImpl* render_frame_; mojom::InputInjectorPtr input_injector_; DISALLOW_COPY_AND_ASSIGN(GpuBenchmarking);
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index eacc393c..079a308 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -362,8 +362,11 @@ settings.main_frame_before_activation_enabled = cmd.HasSwitch(cc::switches::kEnableMainFrameBeforeActivation); + // Checkerimaging is not supported for synchronous single-threaded mode, which + // is what the renderer uses if its not threaded. settings.enable_checker_imaging = - cmd.HasSwitch(cc::switches::kEnableCheckerImaging); + !cmd.HasSwitch(cc::switches::kDisableCheckerImaging) && is_threaded; + #if defined(OS_ANDROID) // We can use a more aggressive limit on Android since decodes tend to take // longer on these devices.
diff --git a/content/renderer/input/main_thread_event_queue.cc b/content/renderer/input/main_thread_event_queue.cc index 60b53a5..7db4e91 100644 --- a/content/renderer/input/main_thread_event_queue.cc +++ b/content/renderer/input/main_thread_event_queue.cc
@@ -49,13 +49,15 @@ QueuedWebInputEvent(ui::WebScopedInputEvent event, const ui::LatencyInfo& latency, bool originally_cancelable, - HandledEventCallback callback) + HandledEventCallback callback, + bool known_by_scheduler) : ScopedWebInputEventWithLatencyInfo(std::move(event), latency), non_blocking_coalesced_count_(0), creation_timestamp_(base::TimeTicks::Now()), last_coalesced_timestamp_(creation_timestamp_), originally_cancelable_(originally_cancelable), - callback_(std::move(callback)) {} + callback_(std::move(callback)), + known_by_scheduler_count_(known_by_scheduler ? 1 : 0) {} ~QueuedWebInputEvent() override {} @@ -83,6 +85,7 @@ } else { non_blocking_coalesced_count_++; } + known_by_scheduler_count_ += other_event->known_by_scheduler_count_; ScopedWebInputEventWithLatencyInfo::CoalesceWith(*other_event); last_coalesced_timestamp_ = base::TimeTicks::Now(); @@ -123,11 +126,10 @@ } } - size_t num_events_handled = 1 + blocking_coalesced_callbacks_.size(); if (queue->main_thread_scheduler_) { // TODO(dtapuska): Change the scheduler API to take into account number of // events processed. - for (size_t i = 0; i < num_events_handled; ++i) { + for (size_t i = 0; i < known_by_scheduler_count_; ++i) { queue->main_thread_scheduler_->DidHandleInputEventOnMainThread( event(), ack_result == INPUT_EVENT_ACK_STATE_CONSUMED ? blink::WebInputEventResult::kHandledApplication @@ -195,6 +197,8 @@ bool originally_cancelable_; HandledEventCallback callback_; + + size_t known_by_scheduler_count_; }; MainThreadEventQueue::SharedState::SharedState() @@ -298,9 +302,9 @@ event_callback = std::move(callback); } - std::unique_ptr<QueuedWebInputEvent> queued_event( - new QueuedWebInputEvent(std::move(event), latency, originally_cancelable, - std::move(event_callback))); + std::unique_ptr<QueuedWebInputEvent> queued_event(new QueuedWebInputEvent( + std::move(event), latency, originally_cancelable, + std::move(event_callback), IsForwardedAndSchedulerKnown(ack_result))); QueueEvent(std::move(queued_event));
diff --git a/content/renderer/input/main_thread_event_queue.h b/content/renderer/input/main_thread_event_queue.h index c9c25b7a..cf767c6 100644 --- a/content/renderer/input/main_thread_event_queue.h +++ b/content/renderer/input/main_thread_event_queue.h
@@ -109,6 +109,11 @@ const std::unique_ptr<MainThreadEventQueueTask>& item, base::TimeTicks frame_time); + static bool IsForwardedAndSchedulerKnown(InputEventAckState ack_state) { + return ack_state == INPUT_EVENT_ACK_STATE_NOT_CONSUMED || + ack_state == INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING; + } + protected: friend class base::RefCountedThreadSafe<MainThreadEventQueue>; virtual ~MainThreadEventQueue();
diff --git a/content/renderer/input/main_thread_event_queue_unittest.cc b/content/renderer/input/main_thread_event_queue_unittest.cc index dc259c9..66d5750 100644 --- a/content/renderer/input/main_thread_event_queue_unittest.cc +++ b/content/renderer/input/main_thread_event_queue_unittest.cc
@@ -257,7 +257,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(2); + .Times(0); for (WebMouseWheelEvent& event : kEvents) HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); @@ -343,7 +343,7 @@ TEST_F(MainThreadEventQueueTest, NonBlockingTouch) { EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(3); + .Times(0); SyntheticWebTouchEvent kEvents[4]; kEvents[0].PressPoint(10, 10); @@ -448,7 +448,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(5); + .Times(3); { // Ensure that coalescing takes place. HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); @@ -502,7 +502,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(2); + .Times(0); EXPECT_FALSE(main_task_runner_->HasPendingTask()); EXPECT_EQ(0u, event_queue().size()); @@ -573,7 +573,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(11); + .Times(0); // Simulate enqueing a discrete event, followed by continuous events and // then a discrete event. The last discrete event should flush the @@ -645,7 +645,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(10); + .Times(3); // Simulate enqueing a discrete event, followed by continuous events and // then a discrete event. The last discrete event should flush the @@ -782,7 +782,7 @@ TEST_F(MainThreadEventQueueTest, RafAlignedTouchInputThrottlingMoves) { EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(2); + .Times(3); SyntheticWebTouchEvent kEvents[2]; kEvents[0].PressPoint(10, 10); @@ -837,7 +837,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(8); + .Times(0); for (SyntheticWebTouchEvent& event : kEvents) HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); @@ -1327,7 +1327,7 @@ EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_, testing::_)) - .Times(3); + .Times(0); HandleEvent(mouse_down, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); queue_->RequestUnbufferedInputEvents();
diff --git a/content/renderer/input/widget_input_handler_manager.cc b/content/renderer/input/widget_input_handler_manager.cc index 93bc21d6..30656d1 100644 --- a/content/renderer/input/widget_input_handler_manager.cc +++ b/content/renderer/input/widget_input_handler_manager.cc
@@ -455,21 +455,16 @@ const ui::LatencyInfo& latency_info, std::unique_ptr<ui::DidOverscrollParams> overscroll_params) { InputEventAckState ack_state = InputEventDispositionToAck(event_disposition); - switch (ack_state) { - case INPUT_EVENT_ACK_STATE_CONSUMED: - main_thread_scheduler_->DidHandleInputEventOnCompositorThread( - *input_event, blink::scheduler::WebMainThreadScheduler:: - InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); - break; - case INPUT_EVENT_ACK_STATE_NOT_CONSUMED: - case INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING: - main_thread_scheduler_->DidHandleInputEventOnCompositorThread( - *input_event, blink::scheduler::WebMainThreadScheduler:: - InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); - break; - default: - break; + if (ack_state == INPUT_EVENT_ACK_STATE_CONSUMED) { + main_thread_scheduler_->DidHandleInputEventOnCompositorThread( + *input_event, blink::scheduler::WebMainThreadScheduler:: + InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); + } else if (MainThreadEventQueue::IsForwardedAndSchedulerKnown(ack_state)) { + main_thread_scheduler_->DidHandleInputEventOnCompositorThread( + *input_event, blink::scheduler::WebMainThreadScheduler:: + InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); } + if (ack_state == INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING || ack_state == INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING || ack_state == INPUT_EVENT_ACK_STATE_NOT_CONSUMED) {
diff --git a/content/renderer/media/stream/apply_constraints_processor.cc b/content/renderer/media/stream/apply_constraints_processor.cc index 41adbb2..874d3bd9 100644 --- a/content/renderer/media/stream/apply_constraints_processor.cc +++ b/content/renderer/media/stream/apply_constraints_processor.cc
@@ -247,6 +247,8 @@ blink::mojom::VideoInputDeviceCapabilities::New(); device_capabilities->device_id = current_request_.Track().Source().Id().Ascii(); + device_capabilities->group_id = + current_request_.Track().Source().GroupId().Ascii(); device_capabilities->facing_mode = GetCurrentVideoSource() ? GetCurrentVideoSource()->device().video_facing : media::MEDIA_VIDEO_FACING_NONE;
diff --git a/content/renderer/media/stream/media_stream_constraints_util_video_device.cc b/content/renderer/media/stream/media_stream_constraints_util_video_device.cc index a4642cd..1e361d3d 100644 --- a/content/renderer/media/stream/media_stream_constraints_util_video_device.cc +++ b/content/renderer/media/stream/media_stream_constraints_util_video_device.cc
@@ -47,11 +47,13 @@ struct Candidate { public: Candidate(const std::string& device_id, + const std::string& group_id, const media::VideoCaptureFormat& format, media::VideoFacingMode facing_mode, media::PowerLineFrequency power_line_frequency, const base::Optional<bool>& noise_reduction) : device_id_(device_id), + group_id_(group_id), format_(format), facing_mode_(facing_mode), power_line_frequency_(power_line_frequency), @@ -66,6 +68,9 @@ blink::WebString GetDeviceId() const { return blink::WebString::FromASCII(device_id_.data()); } + blink::WebString GetGroupId() const { + return blink::WebString::FromASCII(group_id_.data()); + } blink::WebString GetVideoKind() const { return GetVideoKindForFormat(format_); } @@ -73,6 +78,7 @@ // Accessors. const media::VideoCaptureFormat& format() const { return format_; } const std::string& device_id() const { return device_id_; } + const std::string& group_id() const { return group_id_; } media::VideoFacingMode facing_mode() const { return facing_mode_; } media::PowerLineFrequency power_line_frequency() const { return power_line_frequency_; @@ -83,6 +89,7 @@ private: std::string device_id_; + std::string group_id_; media::VideoCaptureFormat format_; media::VideoFacingMode facing_mode_; media::PowerLineFrequency power_line_frequency_; @@ -429,12 +436,16 @@ // characteristics that have a fixed value. double DeviceSourceDistance( const std::string& device_id, + const std::string& group_id, media::VideoFacingMode facing_mode, const blink::WebMediaTrackConstraintSet& constraint_set, const char** failed_constraint_name) { return StringConstraintSourceDistance(blink::WebString::FromASCII(device_id), constraint_set.device_id, failed_constraint_name) + + StringConstraintSourceDistance(blink::WebString::FromASCII(group_id), + constraint_set.group_id, + failed_constraint_name) + StringConstraintSourceDistance(ToWebString(facing_mode), constraint_set.facing_mode, failed_constraint_name); @@ -483,8 +494,9 @@ const ConstrainedFormat& constrained_format, const blink::WebMediaTrackConstraintSet& constraint_set, const char** failed_constraint_name) { - return DeviceSourceDistance(candidate.device_id(), candidate.facing_mode(), - constraint_set, failed_constraint_name) + + return DeviceSourceDistance(candidate.device_id(), candidate.group_id(), + candidate.facing_mode(), constraint_set, + failed_constraint_name) + FormatSourceDistance(candidate.format(), constrained_format, constraint_set, failed_constraint_name) + PowerLineFrequencyConstraintSourceDistance( @@ -640,6 +652,8 @@ constraint_set.aspect_ratio); fitness += StringConstraintFitnessDistance(candidate.GetDeviceId(), constraint_set.device_id); + fitness += StringConstraintFitnessDistance(candidate.GetGroupId(), + constraint_set.group_id); fitness += StringConstraintFitnessDistance(candidate.GetFacingMode(), constraint_set.facing_mode); fitness += StringConstraintFitnessDistance(candidate.GetVideoKind(), @@ -799,9 +813,9 @@ const char* failed_constraint_name = result.failed_constraint_name(); for (auto& device : capabilities.device_capabilities) { - double basic_device_distance = - DeviceSourceDistance(device->device_id, device->facing_mode, - constraints.Basic(), &failed_constraint_name); + double basic_device_distance = DeviceSourceDistance( + device->device_id, device->group_id, device->facing_mode, + constraints.Basic(), &failed_constraint_name); if (!std::isfinite(basic_device_distance)) continue; @@ -843,8 +857,9 @@ // Custom distances must be added to the candidate distance vector // after all the spec-mandated values. DistanceVector advanced_custom_distance_vector; - Candidate candidate(device->device_id, format, device->facing_mode, - power_line_frequency, noise_reduction); + Candidate candidate(device->device_id, device->group_id, format, + device->facing_mode, power_line_frequency, + noise_reduction); DistanceVector candidate_distance_vector; // First criteria for valid candidates is satisfaction of advanced // constraint sets.
diff --git a/content/renderer/media/stream/media_stream_constraints_util_video_device_unittest.cc b/content/renderer/media/stream/media_stream_constraints_util_video_device_unittest.cc index 9ba2bc4f..dc0188d 100644 --- a/content/renderer/media/stream/media_stream_constraints_util_video_device_unittest.cc +++ b/content/renderer/media/stream/media_stream_constraints_util_video_device_unittest.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/optional.h" +#include "base/stl_util.h" #include "content/renderer/media/stream/media_stream_video_source.h" #include "content/renderer/media/stream/mock_constraint_factory.h" #include "media/base/limits.h" @@ -24,6 +25,12 @@ const char kDeviceID4[] = "fake_device_4"; const char kDeviceID5[] = "fake_device_5"; +const char kGroupID1[] = "fake_group_1"; +const char kGroupID2[] = "fake_group_2"; +const char kGroupID3[] = "fake_group_3"; +const char kGroupID4[] = "fake_group_4"; +const char kGroupID5[] = "fake_group_5"; + void CheckTrackAdapterSettingsEqualsResolution( const VideoCaptureSettings& settings) { EXPECT_EQ(settings.Format().frame_size.width(), @@ -73,6 +80,7 @@ blink::mojom::VideoInputDeviceCapabilitiesPtr device = blink::mojom::VideoInputDeviceCapabilities::New(); device->device_id = kDeviceID1; + device->group_id = kGroupID1; device->facing_mode = media::MEDIA_VIDEO_FACING_NONE; device->formats = { media::VideoCaptureFormat(gfx::Size(200, 200), 40.0f, @@ -88,6 +96,7 @@ // A low-resolution device. device = blink::mojom::VideoInputDeviceCapabilities::New(); device->device_id = kDeviceID2; + device->group_id = kGroupID2; device->facing_mode = media::MEDIA_VIDEO_FACING_ENVIRONMENT; device->formats = { media::VideoCaptureFormat(gfx::Size(40, 30), 20.0f, @@ -108,6 +117,7 @@ // A high-resolution device. device = blink::mojom::VideoInputDeviceCapabilities::New(); device->device_id = kDeviceID3; + device->group_id = kGroupID3; device->facing_mode = media::MEDIA_VIDEO_FACING_USER; device->formats = { media::VideoCaptureFormat(gfx::Size(600, 400), 10.0f, @@ -139,6 +149,7 @@ // A depth capture device. device = blink::mojom::VideoInputDeviceCapabilities::New(); device->device_id = kDeviceID4; + device->group_id = kGroupID4; device->facing_mode = media::MEDIA_VIDEO_FACING_ENVIRONMENT; device->formats = {media::VideoCaptureFormat(gfx::Size(640, 480), 30.0f, media::PIXEL_FORMAT_Y16)}; @@ -148,6 +159,7 @@ // be supported if no constraints are placed on the frame rate. device = blink::mojom::VideoInputDeviceCapabilities::New(); device->device_id = kDeviceID5; + device->group_id = kGroupID5; device->facing_mode = media::MEDIA_VIDEO_FACING_NONE; device->formats = { media::VideoCaptureFormat( @@ -227,6 +239,16 @@ result.failed_constraint_name()); } +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, OverconstrainedOnGroupID) { + constraint_factory_.Reset(); + constraint_factory_.basic().group_id.SetExact( + blink::WebString::FromASCII("NONEXISTING")); + auto result = SelectSettings(); + EXPECT_FALSE(result.HasValue()); + EXPECT_EQ(constraint_factory_.basic().group_id.GetName(), + result.failed_constraint_name()); +} + TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, OverconstrainedOnFacingMode) { constraint_factory_.Reset(); // No device in |capabilities_| has facing mode equal to LEFT. @@ -436,6 +458,37 @@ CheckTrackAdapterSettingsEqualsFormat(result); } +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryGroupID) { + constraint_factory_.Reset(); + constraint_factory_.basic().group_id.SetExact( + blink::WebString::FromASCII(default_device_->group_id)); + auto result = SelectSettings(); + EXPECT_TRUE(result.HasValue()); + EXPECT_EQ(default_device_->device_id, result.device_id()); + EXPECT_EQ(*default_closest_format_, result.Format()); + EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, + result.PowerLineFrequency()); + CheckTrackAdapterSettingsEqualsFormat(result); + + constraint_factory_.basic().group_id.SetExact( + blink::WebString::FromASCII(low_res_device_->group_id)); + result = SelectSettings(); + EXPECT_EQ(low_res_device_->device_id, result.device_id()); + EXPECT_EQ(*low_res_closest_format_, result.Format()); + EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, + result.PowerLineFrequency()); + CheckTrackAdapterSettingsEqualsFormat(result); + + constraint_factory_.basic().group_id.SetExact( + blink::WebString::FromASCII(high_res_device_->group_id)); + result = SelectSettings(); + EXPECT_EQ(high_res_device_->device_id, result.device_id()); + EXPECT_EQ(*high_res_closest_format_, result.Format()); + EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, + result.PowerLineFrequency()); + CheckTrackAdapterSettingsEqualsFormat(result); +} + TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFacingMode) { constraint_factory_.Reset(); constraint_factory_.basic().facing_mode.SetExact( @@ -2127,13 +2180,13 @@ blink::WebString id_vector1[] = {blink::WebString::FromASCII(kDeviceID1), blink::WebString::FromASCII(kDeviceID2)}; advanced1.device_id.SetExact( - blink::WebVector<blink::WebString>(id_vector1, arraysize(id_vector1))); + blink::WebVector<blink::WebString>(id_vector1, base::size(id_vector1))); blink::WebString id_vector2[] = {blink::WebString::FromASCII(kDeviceID2), blink::WebString::FromASCII(kDeviceID3)}; blink::WebMediaTrackConstraintSet& advanced2 = constraint_factory_.AddAdvanced(); advanced2.device_id.SetExact( - blink::WebVector<blink::WebString>(id_vector2, arraysize(id_vector2))); + blink::WebVector<blink::WebString>(id_vector2, base::size(id_vector2))); auto result = SelectSettings(); EXPECT_TRUE(result.HasValue()); // kDeviceID2 must be selected because it is the only one that satisfies both @@ -2142,6 +2195,28 @@ CheckTrackAdapterSettingsEqualsFormat(result); } +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedGroupID) { + constraint_factory_.Reset(); + blink::WebMediaTrackConstraintSet& advanced1 = + constraint_factory_.AddAdvanced(); + blink::WebString id_vector1[] = {blink::WebString::FromASCII(kGroupID1), + blink::WebString::FromASCII(kGroupID2)}; + advanced1.group_id.SetExact( + blink::WebVector<blink::WebString>(id_vector1, base::size(id_vector1))); + blink::WebString id_vector2[] = {blink::WebString::FromASCII(kGroupID2), + blink::WebString::FromASCII(kGroupID3)}; + blink::WebMediaTrackConstraintSet& advanced2 = + constraint_factory_.AddAdvanced(); + advanced2.group_id.SetExact( + blink::WebVector<blink::WebString>(id_vector2, base::size(id_vector2))); + auto result = SelectSettings(); + EXPECT_TRUE(result.HasValue()); + // The device with group_id kGroupID2 must be selected because it is the only + // one that satisfies both advanced sets. + EXPECT_EQ(std::string(kDeviceID2), result.device_id()); + CheckTrackAdapterSettingsEqualsFormat(result); +} + TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedContradictoryDeviceID) { constraint_factory_.Reset(); @@ -2150,13 +2225,36 @@ blink::WebString id_vector1[] = {blink::WebString::FromASCII(kDeviceID1), blink::WebString::FromASCII(kDeviceID2)}; advanced1.device_id.SetExact( - blink::WebVector<blink::WebString>(id_vector1, arraysize(id_vector1))); + blink::WebVector<blink::WebString>(id_vector1, base::size(id_vector1))); blink::WebString id_vector2[] = {blink::WebString::FromASCII(kDeviceID3), blink::WebString::FromASCII(kDeviceID4)}; blink::WebMediaTrackConstraintSet& advanced2 = constraint_factory_.AddAdvanced(); advanced2.device_id.SetExact( - blink::WebVector<blink::WebString>(id_vector2, arraysize(id_vector2))); + blink::WebVector<blink::WebString>(id_vector2, base::size(id_vector2))); + auto result = SelectSettings(); + EXPECT_TRUE(result.HasValue()); + // The second advanced set must be ignored because it contradicts the first + // set. + EXPECT_EQ(std::string(kDeviceID1), result.device_id()); + CheckTrackAdapterSettingsEqualsFormat(result); +} + +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, + AdvancedContradictoryGroupID) { + constraint_factory_.Reset(); + blink::WebMediaTrackConstraintSet& advanced1 = + constraint_factory_.AddAdvanced(); + blink::WebString id_vector1[] = {blink::WebString::FromASCII(kGroupID1), + blink::WebString::FromASCII(kGroupID2)}; + advanced1.group_id.SetExact( + blink::WebVector<blink::WebString>(id_vector1, base::size(id_vector1))); + blink::WebString id_vector2[] = {blink::WebString::FromASCII(kGroupID3), + blink::WebString::FromASCII(kGroupID4)}; + blink::WebMediaTrackConstraintSet& advanced2 = + constraint_factory_.AddAdvanced(); + advanced2.group_id.SetExact( + blink::WebVector<blink::WebString>(id_vector2, base::size(id_vector2))); auto result = SelectSettings(); EXPECT_TRUE(result.HasValue()); // The second advanced set must be ignored because it contradicts the first
diff --git a/content/renderer/media/webrtc/audio_codec_factory.cc b/content/renderer/media/webrtc/audio_codec_factory.cc index 62b96aac..be2d15a 100644 --- a/content/renderer/media/webrtc/audio_codec_factory.cc +++ b/content/renderer/media/webrtc/audio_codec_factory.cc
@@ -41,8 +41,9 @@ } static std::unique_ptr<webrtc::AudioEncoder> MakeAudioEncoder( const Config& config, - int payload_type) { - return T::MakeAudioEncoder(config, payload_type); + int payload_type, + rtc::Optional<webrtc::AudioCodecPairId> codec_pair_id) { + return T::MakeAudioEncoder(config, payload_type, codec_pair_id); } }; @@ -59,8 +60,9 @@ // Don't advertise support for anything. } static std::unique_ptr<webrtc::AudioDecoder> MakeAudioDecoder( - const Config& config) { - return T::MakeAudioDecoder(config); + const Config& config, + rtc::Optional<webrtc::AudioCodecPairId> codec_pair_id) { + return T::MakeAudioDecoder(config, codec_pair_id); } };
diff --git a/content/shell/android/java/src/org/chromium/content_shell/Shell.java b/content/shell/android/java/src/org/chromium/content_shell/Shell.java index fe0558c..59ea235 100644 --- a/content/shell/android/java/src/org/chromium/content_shell/Shell.java +++ b/content/shell/android/java/src/org/chromium/content_shell/Shell.java
@@ -306,8 +306,8 @@ mContentViewCore = (ContentViewCoreImpl) ContentViewCore.create( context, "", webContents, mViewAndroidDelegate, cv, mWindow); mWebContents = webContents; - SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); - controller.setActionModeCallback(defaultActionCallback()); + SelectionPopupController.fromWebContents(webContents) + .setActionModeCallback(defaultActionCallback()); mNavigationController = mWebContents.getNavigationController(); if (getParent() != null) mWebContents.onShow(); if (mWebContents.getVisibleUrl() != null) {
diff --git a/device/vr/android/arcore/arcore_device_provider_factory.cc b/device/vr/android/arcore/arcore_device_provider_factory.cc index 34163b9..16da7db 100644 --- a/device/vr/android/arcore/arcore_device_provider_factory.cc +++ b/device/vr/android/arcore/arcore_device_provider_factory.cc
@@ -4,6 +4,7 @@ #include "device/vr/android/arcore/arcore_device_provider_factory.h" +#include "base/logging.h" #include "device/vr/vr_device_provider.h" namespace device { @@ -21,11 +22,12 @@ } // static -void ARCoreDeviceProviderFactory::Install(ARCoreDeviceProviderFactory* f) { - if (g_arcore_device_provider_factory == f) - return; - delete g_arcore_device_provider_factory; - g_arcore_device_provider_factory = f; +void ARCoreDeviceProviderFactory::Install( + std::unique_ptr<ARCoreDeviceProviderFactory> factory) { + DCHECK_NE(g_arcore_device_provider_factory, factory.get()); + if (g_arcore_device_provider_factory) + delete g_arcore_device_provider_factory; + g_arcore_device_provider_factory = factory.release(); } } // namespace device
diff --git a/device/vr/android/arcore/arcore_device_provider_factory.h b/device/vr/android/arcore/arcore_device_provider_factory.h index 15dd5c2..2b29ec28 100644 --- a/device/vr/android/arcore/arcore_device_provider_factory.h +++ b/device/vr/android/arcore/arcore_device_provider_factory.h
@@ -16,11 +16,12 @@ class DEVICE_VR_EXPORT ARCoreDeviceProviderFactory { public: static std::unique_ptr<device::VRDeviceProvider> Create(); - static void Install(ARCoreDeviceProviderFactory* factory); + static void Install(std::unique_ptr<ARCoreDeviceProviderFactory> factory); + + virtual ~ARCoreDeviceProviderFactory() = default; protected: ARCoreDeviceProviderFactory() = default; - virtual ~ARCoreDeviceProviderFactory() = default; virtual std::unique_ptr<device::VRDeviceProvider> CreateDeviceProvider() = 0;
diff --git a/device/vr/android/gvr/gvr_delegate_provider_factory.cc b/device/vr/android/gvr/gvr_delegate_provider_factory.cc index 033fec4..07e1852a 100644 --- a/device/vr/android/gvr/gvr_delegate_provider_factory.cc +++ b/device/vr/android/gvr/gvr_delegate_provider_factory.cc
@@ -4,6 +4,8 @@ #include "device/vr/android/gvr/gvr_delegate_provider_factory.h" +#include "base/logging.h" + namespace device { namespace { @@ -18,11 +20,12 @@ } // static -void GvrDelegateProviderFactory::Install(GvrDelegateProviderFactory* f) { - if (g_gvr_delegate_provider_factory == f) - return; - delete g_gvr_delegate_provider_factory; - g_gvr_delegate_provider_factory = f; +void GvrDelegateProviderFactory::Install( + std::unique_ptr<GvrDelegateProviderFactory> factory) { + DCHECK_NE(g_gvr_delegate_provider_factory, factory.get()); + if (g_gvr_delegate_provider_factory) + delete g_gvr_delegate_provider_factory; + g_gvr_delegate_provider_factory = factory.release(); } } // namespace device
diff --git a/device/vr/android/gvr/gvr_delegate_provider_factory.h b/device/vr/android/gvr/gvr_delegate_provider_factory.h index 3db3003..764e794f 100644 --- a/device/vr/android/gvr/gvr_delegate_provider_factory.h +++ b/device/vr/android/gvr/gvr_delegate_provider_factory.h
@@ -5,6 +5,8 @@ #ifndef DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_ #define DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_ +#include <memory> + #include "base/macros.h" #include "device/vr/vr_export.h" @@ -16,11 +18,12 @@ class DEVICE_VR_EXPORT GvrDelegateProviderFactory { public: static GvrDelegateProvider* Create(); - static void Install(GvrDelegateProviderFactory* factory); + static void Install(std::unique_ptr<GvrDelegateProviderFactory> factory); + + virtual ~GvrDelegateProviderFactory() = default; protected: GvrDelegateProviderFactory() = default; - virtual ~GvrDelegateProviderFactory() = default; virtual GvrDelegateProvider* CreateGvrDelegateProvider() = 0;
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index d275643..5caa356 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -459,7 +459,10 @@ BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::BindOnce(&WebRequestProxyingURLLoaderFactory::StartProxying, proxy, - frame->GetProcess()->GetID(), frame->GetRoutingID(), + // Match the behavior of the WebRequestInfo constructor + // which takes a net::URLRequest*. + is_navigation ? -1 : frame->GetProcess()->GetID(), + is_navigation ? MSG_ROUTING_NONE : frame->GetRoutingID(), std::move(navigation_ui_data), std::move(proxied_request), std::move(target_factory_info), base::BindOnce(&WebRequestAPI::RemoveProxyThreadSafe,
diff --git a/gin/BUILD.gn b/gin/BUILD.gn index 0301ac2..89fe7a5e 100644 --- a/gin/BUILD.gn +++ b/gin/BUILD.gn
@@ -54,8 +54,6 @@ "shell_runner.h", "try_catch.cc", "try_catch.h", - "v8_background_task_runner.cc", - "v8_background_task_runner.h", "v8_foreground_task_runner.cc", "v8_foreground_task_runner.h", "v8_foreground_task_runner_base.cc",
diff --git a/gin/public/v8_platform.h b/gin/public/v8_platform.h index 0429d02..26131ebe 100644 --- a/gin/public/v8_platform.h +++ b/gin/public/v8_platform.h
@@ -27,12 +27,11 @@ #endif std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner( v8::Isolate*) override; - std::shared_ptr<v8::TaskRunner> GetBackgroundTaskRunner( - v8::Isolate*) override; - size_t NumberOfAvailableBackgroundThreads() override; - void CallOnBackgroundThread( - v8::Task* task, - v8::Platform::ExpectedRuntime expected_runtime) override; + int NumberOfWorkerThreads() override; + void CallOnWorkerThread(std::unique_ptr<v8::Task> task) override; + void CallBlockingTaskOnWorkerThread(std::unique_ptr<v8::Task> task) override; + void CallDelayedOnWorkerThread(std::unique_ptr<v8::Task> task, + double delay_in_seconds) override; void CallOnForegroundThread(v8::Isolate* isolate, v8::Task* task) override; void CallDelayedOnForegroundThread(v8::Isolate* isolate, v8::Task* task,
diff --git a/gin/v8_background_task_runner.cc b/gin/v8_background_task_runner.cc deleted file mode 100644 index 177f3d390..0000000 --- a/gin/v8_background_task_runner.cc +++ /dev/null
@@ -1,53 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <algorithm> - -#include "gin/v8_background_task_runner.h" - -#include "base/bind.h" -#include "base/bind_helpers.h" -#include "base/task_scheduler/post_task.h" -#include "base/task_scheduler/task_scheduler.h" -#include "base/task_scheduler/task_traits.h" - -namespace gin { - -namespace { - -constexpr base::TaskTraits kBackgroundThreadTaskTraits = { - base::TaskPriority::USER_VISIBLE}; - -} // namespace - -void V8BackgroundTaskRunner::PostTask(std::unique_ptr<v8::Task> task) { - base::PostTaskWithTraits(FROM_HERE, kBackgroundThreadTaskTraits, - base::BindOnce(&v8::Task::Run, std::move(task))); -} - -void V8BackgroundTaskRunner::PostDelayedTask(std::unique_ptr<v8::Task> task, - double delay_in_seconds) { - base::PostDelayedTaskWithTraits( - FROM_HERE, kBackgroundThreadTaskTraits, - base::BindOnce(&v8::Task::Run, std::move(task)), - base::TimeDelta::FromSecondsD(delay_in_seconds)); -} - -void V8BackgroundTaskRunner::PostIdleTask(std::unique_ptr<v8::IdleTask> task) { - NOTREACHED() << "Idle tasks are not supported on background threads."; -} - -bool V8BackgroundTaskRunner::IdleTasksEnabled() { - // No idle tasks on background threads. - return false; -} - -// static -size_t V8BackgroundTaskRunner::NumberOfAvailableBackgroundThreads() { - return std::max(1, base::TaskScheduler::GetInstance() - ->GetMaxConcurrentNonBlockedTasksWithTraitsDeprecated( - kBackgroundThreadTaskTraits)); -} - -} // namespace gin
diff --git a/gin/v8_background_task_runner.h b/gin/v8_background_task_runner.h deleted file mode 100644 index 0c9855c2..0000000 --- a/gin/v8_background_task_runner.h +++ /dev/null
@@ -1,30 +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 GIN_V8_BACKGROUND_TASK_RUNNER_H -#define GIN_V8_BACKGROUND_TASK_RUNNER_H - -#include "v8/include/v8-platform.h" - -namespace gin { - -class V8BackgroundTaskRunner : public v8::TaskRunner { - public: - // Returns the number of available background threads, which is always >= 1. - static size_t NumberOfAvailableBackgroundThreads(); - - // v8::Platform implementation. - void PostTask(std::unique_ptr<v8::Task> task) override; - - void PostDelayedTask(std::unique_ptr<v8::Task> task, - double delay_in_seconds) override; - - void PostIdleTask(std::unique_ptr<v8::IdleTask> task) override; - - bool IdleTasksEnabled() override; -}; - -} // namespace gin - -#endif // GIN_V8_BACKGROUND_TASK_RUNNER_H
diff --git a/gin/v8_platform.cc b/gin/v8_platform.cc index 2eeb8f2..8e885b9 100644 --- a/gin/v8_platform.cc +++ b/gin/v8_platform.cc
@@ -13,14 +13,15 @@ #include "base/bits.h" #include "base/debug/stack_trace.h" #include "base/location.h" +#include "base/logging.h" #include "base/rand_util.h" #include "base/sys_info.h" #include "base/task_scheduler/post_task.h" #include "base/task_scheduler/task_scheduler.h" +#include "base/task_scheduler/task_traits.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "gin/per_isolate_data.h" -#include "gin/v8_background_task_runner.h" namespace gin { @@ -28,6 +29,12 @@ base::LazyInstance<V8Platform>::Leaky g_v8_platform = LAZY_INSTANCE_INITIALIZER; +constexpr base::TaskTraits kDefaultTaskTraits = { + base::TaskPriority::USER_VISIBLE}; + +constexpr base::TaskTraits kBlockingTaskTraits = { + base::TaskPriority::USER_BLOCKING}; + void PrintStackTrace() { base::debug::StackTrace trace; trace.Print(); @@ -327,21 +334,37 @@ return data->task_runner(); } -std::shared_ptr<v8::TaskRunner> V8Platform::GetBackgroundTaskRunner( - v8::Isolate* isolate) { - static std::shared_ptr<v8::TaskRunner> v8_background_task_runner = - std::make_shared<V8BackgroundTaskRunner>(); - return v8_background_task_runner; +int V8Platform::NumberOfWorkerThreads() { + // V8Platform assumes the scheduler uses the same set of workers for default + // and user blocking tasks. + const int num_foreground_workers = + base::TaskScheduler::GetInstance() + ->GetMaxConcurrentNonBlockedTasksWithTraitsDeprecated( + kDefaultTaskTraits); + DCHECK_EQ(num_foreground_workers, + base::TaskScheduler::GetInstance() + ->GetMaxConcurrentNonBlockedTasksWithTraitsDeprecated( + kBlockingTaskTraits)); + return std::max(1, num_foreground_workers); } -size_t V8Platform::NumberOfAvailableBackgroundThreads() { - return V8BackgroundTaskRunner::NumberOfAvailableBackgroundThreads(); +void V8Platform::CallOnWorkerThread(std::unique_ptr<v8::Task> task) { + base::PostTaskWithTraits(FROM_HERE, kDefaultTaskTraits, + base::BindOnce(&v8::Task::Run, std::move(task))); } -void V8Platform::CallOnBackgroundThread( - v8::Task* task, - v8::Platform::ExpectedRuntime expected_runtime) { - GetBackgroundTaskRunner(nullptr)->PostTask(std::unique_ptr<v8::Task>(task)); +void V8Platform::CallBlockingTaskOnWorkerThread( + std::unique_ptr<v8::Task> task) { + base::PostTaskWithTraits(FROM_HERE, kBlockingTaskTraits, + base::BindOnce(&v8::Task::Run, std::move(task))); +} + +void V8Platform::CallDelayedOnWorkerThread(std::unique_ptr<v8::Task> task, + double delay_in_seconds) { + base::PostDelayedTaskWithTraits( + FROM_HERE, kDefaultTaskTraits, + base::BindOnce(&v8::Task::Run, std::move(task)), + base::TimeDelta::FromSecondsD(delay_in_seconds)); } void V8Platform::CallOnForegroundThread(v8::Isolate* isolate, v8::Task* task) {
diff --git a/headless/test/headless_render_browsertest.cc b/headless/test/headless_render_browsertest.cc index 7d0bfa5..9716436 100644 --- a/headless/test/headless_render_browsertest.cc +++ b/headless/test/headless_render_browsertest.cc
@@ -7,6 +7,7 @@ #include "base/path_service.h" #include "base/run_loop.h" #include "base/threading/thread_restrictions.h" +#include "build/build_config.h" #include "content/public/test/browser_test.h" #include "headless/public/devtools/domains/dom_snapshot.h" #include "headless/public/devtools/domains/page.h" @@ -21,6 +22,10 @@ class HeadlessRenderBrowserTest##clazz : public clazz {}; \ HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessRenderBrowserTest##clazz) +#define DISABLED_HEADLESS_RENDER_BROWSERTEST(clazz) \ + class HeadlessRenderBrowserTest##clazz : public clazz {}; \ + DISABLED_HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessRenderBrowserTest##clazz) + // TODO(dats): For some reason we are missing all HTTP redirects. // crbug.com/789298 #define DISABLE_HTTP_REDIRECTS_CHECKS @@ -1157,7 +1162,14 @@ "http://www.example.com/epicfail")); } }; -HEADLESS_RENDER_BROWSERTEST(CookieSetFromJs_NoCookies); + +// Flaky on Linux. https://crbug.com/839747 +#if defined(OS_LINUX) +#define MAYBE_HEADLESS_RENDER_BROWSERTEST DISABLED_HEADLESS_RENDER_BROWSERTEST +#else +#define MAYBE_HEADLESS_RENDER_BROWSERTEST HEADLESS_RENDER_BROWSERTEST +#endif +MAYBE_HEADLESS_RENDER_BROWSERTEST(CookieSetFromJs_NoCookies); class CookieUpdatedFromJs : public HeadlessRenderTest { private:
diff --git a/infra/config/branch/cq.cfg b/infra/config/branch/cq.cfg index 13544ef..3b003d2e 100644 --- a/infra/config/branch/cq.cfg +++ b/infra/config/branch/cq.cfg
@@ -31,11 +31,16 @@ try_job { buckets { name: "luci.chromium.try" + builders { name: "android_arm64_dbg_recipe" } + builders { name: "android_cronet" } builders { name: "cast_shell_linux" } builders { name: "chromium_presubmit" } builders { name: "fuchsia_arm64" } + builders { name: "fuchsia_x64" } + builders { name: "linux-ozone-rel" } builders { name: "linux_chromium_compile_dbg_ng" } builders { name: "linux_chromium_rel_ng" } + builders { name: "linux_chromium_tsan_rel_ng" } builders { name: "mac_chromium_compile_dbg_ng" } builders { name: "mac_chromium_rel_ng" } builders { name: "win_chromium_compile_dbg_ng" } @@ -43,10 +48,6 @@ buckets { name: "master.tryserver.chromium.android" builders { - name: "android_arm64_dbg_recipe" - equivalent_to { bucket: "luci.chromium.try" percentage: 100 } - } - builders { name: "android_clang_dbg_recipe" equivalent_to { bucket: "luci.chromium.try" percentage: 0 } } @@ -55,10 +56,6 @@ equivalent_to { bucket: "luci.chromium.try" percentage: 0 } } builders { - name: "android_cronet" - equivalent_to { bucket: "luci.chromium.try" percentage: 100 } - } - builders { name: "android_n5x_swarming_rel" equivalent_to { bucket: "luci.chromium.try" percentage: 0 } } @@ -89,25 +86,13 @@ buckets { name: "master.tryserver.chromium.linux" builders { - name: "fuchsia_x64" - equivalent_to { bucket: "luci.chromium.try" percentage: 100 } - } - builders { name: "linux_chromium_asan_rel_ng" equivalent_to { bucket: "luci.chromium.try" percentage: 0 } } builders { - name: "linux_chromium_ozone_compile_only_ng" - equivalent_to { bucket: "luci.chromium.try" builder: "linux-ozone-rel" percentage: 100 } - } - builders { name: "linux_chromium_headless_rel" equivalent_to { bucket: "luci.chromium.try" percentage: 0 } } - builders { - name: "linux_chromium_tsan_rel_ng" - equivalent_to { bucket: "luci.chromium.try" percentage: 100 } - } } buckets { name: "master.tryserver.chromium.mac"
diff --git a/infra/config/global/cr-buildbucket.cfg b/infra/config/global/cr-buildbucket.cfg index 63bf072..24b586f 100644 --- a/infra/config/global/cr-buildbucket.cfg +++ b/infra/config/global/cr-buildbucket.cfg
@@ -1348,17 +1348,6 @@ builders { mixins: "linux-try" name: "linux_chromium_msan_rel_ng" } builders { mixins: "linux-try" name: "linux_chromium_msan_variable" } builders { - # TODO(jbudorick): Remove this in favor of linux-ozone-rel once - # the bot has been fully migrated to LUCI. - mixins: "linux-try" - name: "linux_chromium_ozone_compile_only_ng" - auto_builder_dimension: NO - dimensions: "builder:linux-ozone-rel" - recipe { - properties: "buildername:linux-ozone-rel" - } - } - builders { mixins: "linux-try" mixins: "goma-j150" name: "linux_chromium_rel_ng"
diff --git a/infra/config/global/luci-milo.cfg b/infra/config/global/luci-milo.cfg index 775f1ab..d366f5f 100644 --- a/infra/config/global/luci-milo.cfg +++ b/infra/config/global/luci-milo.cfg
@@ -400,7 +400,6 @@ short_name: "tst" } builders: { - name: "buildbot/chromium.linux/linux-gcc-rel" name: "buildbucket/luci.chromium.ci/linux-gcc-rel" category: "chromium.linux|release" short_name: "gcc" @@ -474,7 +473,6 @@ short_name: "x64" } builders: { - name: "buildbot/chromium.linux/Ozone Linux" name: "buildbucket/luci.chromium.ci/linux-ozone-rel" category: "chromium.linux|ozone" short_name: "bld" @@ -877,7 +875,6 @@ short_name: "bld" } builders: { - name: "buildbot/chromium.linux/linux-gcc-rel" name: "buildbucket/luci.chromium.ci/linux-gcc-rel" category: "release" short_name: "gcc" @@ -955,7 +952,6 @@ short_name: "x64" } builders: { - name: "buildbot/chromium.linux/Ozone Linux" name: "buildbucket/luci.chromium.ci/linux-ozone-rel" category: "ozone" short_name: "bld" @@ -1481,17 +1477,6 @@ } builders { - name: "buildbucket/luci.chromium.ci/linux-gcc-rel" - category: "linux|gcc" - short_name: "ci" - } - builders { - name: "buildbot/chromium.linux/linux-gcc-rel" - category: "linux|gcc" - short_name: "bb" - } - - builders { name: "buildbucket/luci.chromium.ci/Leak Detection Linux" category: "linux|leak" short_name: "ci" @@ -1502,17 +1487,6 @@ short_name: "bb" } - builders { - name: "buildbucket/luci.chromium.ci/linux-ozone-rel" - category: "linux|ozone" - short_name: "ci" - } - builders { - name: "buildbot/chromium.linux/Ozone Linux" - category: "linux|ozone" - short_name: "bb" - } - builders: { name: "buildbucket/luci.chromium.ci/Win Builder" category: "win|release|builder|32" @@ -4021,7 +3995,6 @@ name: "buildbot/tryserver.chromium.linux/linux_chromium_msan_rel_ng" } builders: { - name: "buildbot/tryserver.chromium.linux/linux_chromium_ozone_compile_only_ng" name: "buildbucket/luci.chromium.try/linux-ozone-rel" } builders: { @@ -4031,7 +4004,6 @@ name: "buildbot/tryserver.chromium.linux/linux_chromium_ubsan_rel_ng" } builders: { - name: "buildbot/tryserver.chromium.linux/linux-gcc-rel" name: "buildbucket/luci.chromium.try/linux-gcc-rel" } builders: {
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 5e866e8..ab2168be 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -584,6 +584,9 @@ if (![self isViewLoaded]) return; + DCHECK(!_rootNode); + [self setRootNode:self.bookmarks->root_node()]; + int64_t unusedFolderId; double unusedScrollPosition; // Bookmark Model is loaded after presenting Bookmarks, we need to check
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm index 286f6be..db93d6f 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm
@@ -175,7 +175,13 @@ dispatcher:self.dispatcher]; self.bookmarkBrowser.homeDelegate = self; - [self.bookmarkBrowser setRootNode:self.bookmarkModel->root_node()]; + // Set the root node if the model has been loaded. If the model has not been + // loaded yet, the root node will be set in BookmarkHomeViewController after + // the model is finished loading. + if (self.bookmarkModel->loaded()) { + [self.bookmarkBrowser setRootNode:self.bookmarkModel->root_node()]; + } + int64_t unusedFolderId; double unusedScrollPosition; // If cache is present then reconstruct the last visited bookmark from
diff --git a/ios/chrome/browser/ui/download/download_manager_view_controller.mm b/ios/chrome/browser/ui/download/download_manager_view_controller.mm index 6fdd2307..68b85178 100644 --- a/ios/chrome/browser/ui/download/download_manager_view_controller.mm +++ b/ios/chrome/browser/ui/download/download_manager_view_controller.mm
@@ -10,7 +10,7 @@ #include "ios/chrome/browser/ui/download/download_manager_animation_constants.h" #import "ios/chrome/browser/ui/download/download_manager_state_view.h" #import "ios/chrome/browser/ui/download/radial_progress_view.h" -#import "ios/chrome/browser/ui/util/named_guide.h" +#import "ios/chrome/browser/ui/util/constraints_ui_util.h" #include "ios/chrome/grit/ios_strings.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/public/provider/chrome/browser/images/branded_image_provider.h" @@ -23,8 +23,6 @@ #endif namespace { -// Layout Guide name for action button UILayoutGuide. -GuideName* const kActionButtonGuide = @"kDownloadManagerActionButtonGuide"; // Additional left margin for close button. const CGFloat kCloseButtonLeftMargin = 17; @@ -102,6 +100,9 @@ // self.closeButton or to self.actionButton (when visible). @property(nonatomic) NSLayoutConstraint* statusLabelTrailingConstraint; +// UILayoutGuide for action button. Used in delegate callbacks. +@property(nonatomic) UILayoutGuide* actionButtonGuide; + @end @implementation DownloadManagerViewController @@ -122,6 +123,7 @@ @synthesize installDriveControlsRowTrailingConstraint = _installDriveControlsRowTrailingConstraint; @synthesize statusLabelTrailingConstraint = _statusLabelTrailingConstraint; +@synthesize actionButtonGuide = _actionButtonGuide; #pragma mark - UIViewController overrides @@ -141,10 +143,8 @@ [self.installDriveControlsRow addSubview:self.installDriveLabel]; [self.installDriveControlsRow addSubview:self.horizontalLine]; - NamedGuide* actionButtonGuide = - [[NamedGuide alloc] initWithName:kActionButtonGuide]; - [self.view addLayoutGuide:actionButtonGuide]; - actionButtonGuide.constrainedView = self.actionButton; + self.actionButtonGuide = [[UILayoutGuide alloc] init]; + [self.view addLayoutGuide:self.actionButtonGuide]; } - (void)updateViewConstraints { @@ -286,6 +286,9 @@ constraintEqualToAnchor:installDriveRow.trailingAnchor], ]]; + // constraint actionButtonGuide to action button. + AddSameConstraints(self.actionButtonGuide, actionButton); + [self updateConstraintsForTraitCollection:self.traitCollection]; _addedConstraints = YES; @@ -537,10 +540,8 @@ SEL selector = @selector (downloadManagerViewController:presentOpenInMenuWithLayoutGuide:); if ([_delegate respondsToSelector:selector]) { - UILayoutGuide* guide = - [NamedGuide guideWithName:kActionButtonGuide view:self.view]; [_delegate downloadManagerViewController:self - presentOpenInMenuWithLayoutGuide:guide]; + presentOpenInMenuWithLayoutGuide:self.actionButtonGuide]; } break; }
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm index 4d6dd57..f0cee02 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm
@@ -613,21 +613,14 @@ bool OmniboxViewIOS::OnCopy() { UIPasteboard* board = [UIPasteboard generalPasteboard]; NSString* selectedText = nil; - BOOL is_select_all = NO; NSInteger start_location = 0; if ([field_ isPreEditing]) { selectedText = [field_ preEditText]; - is_select_all = YES; start_location = 0; } else { UITextRange* selected_range = [field_ selectedTextRange]; selectedText = [field_ textInRange:selected_range]; UITextPosition* start = [field_ beginningOfDocument]; - UITextPosition* end = [field_ endOfDocument]; - is_select_all = ([field_ comparePosition:[selected_range start] - toPosition:start] == NSOrderedSame) && - ([field_ comparePosition:[selected_range end] - toPosition:end] == NSOrderedSame); // The following call to |-offsetFromPosition:toPosition:| gives the offset // in terms of the number of "visible characters." The documentation does // not specify whether this means glyphs or UTF16 chars. This does not @@ -640,8 +633,7 @@ GURL url; bool write_url = false; - model()->AdjustTextForCopy(start_location, is_select_all, &text, &url, - &write_url); + model()->AdjustTextForCopy(start_location, &text, &url, &write_url); // Create the pasteboard item manually because the pasteboard expects a single // item with multiple representations. This is expressed as a single
diff --git a/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm b/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm index 79ba3a8..4275893 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm
@@ -332,6 +332,7 @@ return; GridCell* cell = base::mac::ObjCCastStrict<GridCell>( [self.collectionView cellForItemAtIndexPath:CreateIndexPath(index)]); + // TODO(crbug.com/839892) : Cell is sometimes nil, but should not be. [self configureCell:cell withItem:item]; } @@ -394,7 +395,7 @@ // this view controller's theme. This view controller becomes the delegate for // the cell. - (void)configureCell:(GridCell*)cell withItem:(GridItem*)item { - DCHECK(cell); + // TODO(crbug.com/839892) : Cell is sometimes nil. Add DCHECK(cell) here. DCHECK(item); cell.delegate = self; cell.theme = self.theme;
diff --git a/ios/chrome/browser/web/error_page_egtest.mm b/ios/chrome/browser/web/error_page_egtest.mm index c6ea755..d4b925b9 100644 --- a/ios/chrome/browser/web/error_page_egtest.mm +++ b/ios/chrome/browser/web/error_page_egtest.mm
@@ -11,6 +11,7 @@ #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_test_case.h" #include "ios/testing/embedded_test_server_handlers.h" +#include "net/test/embedded_test_server/default_handlers.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" #include "net/test/embedded_test_server/request_handler_util.h" @@ -61,12 +62,13 @@ self.testServer->RegisterRequestHandler( base::BindRepeating(&net::test_server::HandlePrefixedRequest, "/iframe", base::BindRepeating(&testing::HandleIFrame))); + RegisterDefaultHandlers(self.testServer); GREYAssertTrue(self.testServer->Start(), @"Test server failed to start."); } // Loads the URL which fails to load, then sucessfully reloads the page. -- (void)testReload { +- (void)testReloadErrorPage { // No response leads to ERR_INTERNET_DISCONNECTED error. self.serverRespondsWithContent = NO; [ChromeEarlGrey loadURL:self.testServer->GetURL("/echo-query?foo")]; @@ -78,6 +80,65 @@ [ChromeEarlGrey waitForWebViewContainingText:"foo"]; } +// Sucessfully loads the page, stops the server and reloads the page. +- (void)testReloadPageAfterServerIsDown { + // Sucessfully load the page. + self.serverRespondsWithContent = YES; + [ChromeEarlGrey loadURL:self.testServer->GetURL("/echo-query?foo")]; + [ChromeEarlGrey waitForWebViewContainingText:"foo"]; + + // Reload the page, no response leads to ERR_INTERNET_DISCONNECTED error. + self.serverRespondsWithContent = NO; + [ChromeEarlGrey reload]; + [ChromeEarlGrey waitForStaticHTMLViewContainingText:GetErrorMessage()]; +} + +// Sucessfully loads the page, goes back, stops the server, goes forward and +// reloads. +- (void)testGoForwardAfterServerIsDownAndReload { + // First page loads sucessfully. + [ChromeEarlGrey loadURL:self.testServer->GetURL("/echo")]; + [ChromeEarlGrey waitForWebViewContainingText:"Echo"]; + + // Second page loads sucessfully. + self.serverRespondsWithContent = YES; + [ChromeEarlGrey loadURL:self.testServer->GetURL("/echo-query?foo")]; + [ChromeEarlGrey waitForWebViewContainingText:"foo"]; + + // Go back to the first page. + [ChromeEarlGrey goBack]; + [ChromeEarlGrey waitForWebViewContainingText:"Echo"]; + +#if TARGET_IPHONE_SIMULATOR + // Go forward. The response will be retrieved from the page cache and will not + // present the error page. Page cache may not always exist on device (which is + // more memory constrained), so this part of the test is simulator-only. + self.serverRespondsWithContent = NO; + [ChromeEarlGrey goForward]; + [ChromeEarlGrey waitForWebViewContainingText:"foo"]; + + // Reload bypasses the cache. + [ChromeEarlGrey reload]; + [ChromeEarlGrey waitForStaticHTMLViewContainingText:GetErrorMessage()]; +#endif // TARGET_IPHONE_SIMULATOR +} + +// Sucessfully loads the page, then loads the URL which fails to load, then +// sucessfully goes back to the first page. +- (void)testGoBackFromErrorPage { + // First page loads sucessfully. + [ChromeEarlGrey loadURL:self.testServer->GetURL("/echo")]; + [ChromeEarlGrey waitForWebViewContainingText:"Echo"]; + + // Second page fails to load. + [ChromeEarlGrey loadURL:self.testServer->GetURL("/close-socket")]; + [ChromeEarlGrey waitForStaticHTMLViewContainingText:GetErrorMessage()]; + + // Going back should sucessfully load the first page. + [ChromeEarlGrey goBack]; + [ChromeEarlGrey waitForWebViewContainingText:"Echo"]; +} + // Loads the URL which redirects to unresponsive server. - (void)testRedirectToFailingURL { // No response leads to ERR_INTERNET_DISCONNECTED error.
diff --git a/mash/BUILD.gn b/mash/BUILD.gn index 084d684..5b1cdff 100644 --- a/mash/BUILD.gn +++ b/mash/BUILD.gn
@@ -29,7 +29,6 @@ "//ash/components/autoclick:autoclick_app", "//ash/components/quick_launch:quick_launch_app", "//ash/components/touch_hud:touch_hud_app", - "//ash/standalone:ash_standalone", "//mash:mash_unittests", ] } @@ -59,7 +58,6 @@ standalone_services += [ "//ash:manifest", "//ash/components/quick_launch:manifest", - "//ash/standalone:manifest", ] }
diff --git a/net/android/network_change_notifier_android_unittest.cc b/net/android/network_change_notifier_android_unittest.cc index 4c6c3f5e..fda2933 100644 --- a/net/android/network_change_notifier_android_unittest.cc +++ b/net/android/network_change_notifier_android_unittest.cc
@@ -420,12 +420,16 @@ EXPECT_EQ(2, delegate_observer_.bandwidth_notifications_count()); } -TEST_F(NetworkChangeNotifierAndroidTest, DISABLED_InitialSignal) { +TEST_F(NetworkChangeNotifierAndroidTest, InitialSignal) { DNSChangeObserver dns_change_observer; NetworkChangeNotifier::AddDNSObserver(&dns_change_observer); - base::RunLoop().Run(); - EXPECT_EQ(1, dns_change_observer.initial_notifications_count()); - EXPECT_EQ(0, dns_change_observer.change_notifications_count()); + net::DnsConfig dns_config; + NetworkChangeNotifier::GetDnsConfig(&dns_config); + if (!dns_config.IsValid()) { + base::RunLoop().Run(); + EXPECT_EQ(1, dns_change_observer.initial_notifications_count()); + EXPECT_EQ(0, dns_change_observer.change_notifications_count()); + } NetworkChangeNotifier::RemoveDNSObserver(&dns_change_observer); }
diff --git a/net/base/network_change_notifier.h b/net/base/network_change_notifier.h index 62d064b..adade48 100644 --- a/net/base/network_change_notifier.h +++ b/net/base/network_change_notifier.h
@@ -141,6 +141,11 @@ virtual void OnDNSChanged() = 0; // Will be called when DNS settings of the system have been loaded. // Use GetDnsConfig to obtain the current settings. + // NOTE(pauljensen): This will not be called if the initial DNS config + // has already been read before this observer is registered. + // Determining if a DNS config has already been read can be done by + // calling GetDnsConfig() after registering an observer, and seeing if + // the DnsConfig's IsValid() returns true. virtual void OnInitialDNSConfigRead(); protected:
diff --git a/net/http/http_stream_factory_job_controller_unittest.cc b/net/http/http_stream_factory_job_controller_unittest.cc index 6fd9786..e5666da2 100644 --- a/net/http/http_stream_factory_job_controller_unittest.cc +++ b/net/http/http_stream_factory_job_controller_unittest.cc
@@ -1865,6 +1865,10 @@ // Verifies that if the alternative proxy server job fails immediately, the // main job is not blocked. TEST_F(HttpStreamFactoryJobControllerTest, FailAlternativeProxy) { + session_deps_.socket_factory->UseMockProxyClientSockets(); + ProxyClientSocketDataProvider proxy_data(SYNCHRONOUS, OK); + session_deps_.socket_factory->AddProxyClientSocketDataProvider(&proxy_data); + quic_data_ = std::make_unique<MockQuicData>(); quic_data_->AddConnect(SYNCHRONOUS, ERR_FAILED); tcp_data_ = std::make_unique<SequencedSocketData>(nullptr, 0, nullptr, 0); @@ -1914,6 +1918,10 @@ // disconnection, then the proxy delegate is not notified. TEST_F(HttpStreamFactoryJobControllerTest, InternetDisconnectedAlternativeProxy) { + session_deps_.socket_factory->UseMockProxyClientSockets(); + ProxyClientSocketDataProvider proxy_data(SYNCHRONOUS, OK); + session_deps_.socket_factory->AddProxyClientSocketDataProvider(&proxy_data); + quic_data_ = std::make_unique<MockQuicData>(); quic_data_->AddConnect(SYNCHRONOUS, ERR_INTERNET_DISCONNECTED); tcp_data_ = std::make_unique<SequencedSocketData>(nullptr, 0, nullptr, 0); @@ -1960,6 +1968,10 @@ AlternativeProxyServerJobFailsAfterMainJobSucceeds) { base::HistogramTester histogram_tester; + session_deps_.socket_factory->UseMockProxyClientSockets(); + ProxyClientSocketDataProvider proxy_data(SYNCHRONOUS, OK); + session_deps_.socket_factory->AddProxyClientSocketDataProvider(&proxy_data); + // Use COLD_START to make the alt job pending. crypto_client_stream_factory_.set_handshake_mode( MockCryptoClientStream::COLD_START);
diff --git a/net/quic/core/congestion_control/general_loss_algorithm.cc b/net/quic/core/congestion_control/general_loss_algorithm.cc index 22459f0..d0a8c8d2 100644 --- a/net/quic/core/congestion_control/general_loss_algorithm.cc +++ b/net/quic/core/congestion_control/general_loss_algorithm.cc
@@ -27,13 +27,7 @@ } // namespace -GeneralLossAlgorithm::GeneralLossAlgorithm() - : loss_detection_timeout_(QuicTime::Zero()), - largest_sent_on_spurious_retransmit_(0), - loss_type_(kNack), - reordering_shift_(kDefaultLossDelayShift), - largest_previously_acked_(0), - largest_lost_(0) {} +GeneralLossAlgorithm::GeneralLossAlgorithm() : GeneralLossAlgorithm(kNack) {} GeneralLossAlgorithm::GeneralLossAlgorithm(LossDetectionType loss_type) : loss_detection_timeout_(QuicTime::Zero()), @@ -43,7 +37,12 @@ ? kDefaultAdaptiveLossDelayShift : kDefaultLossDelayShift), largest_previously_acked_(0), - largest_lost_(0) {} + largest_lost_(0), + early_retransmit_declares_in_flight_packet_lost_(GetQuicReloadableFlag( + quic_early_retransmit_detects_in_flight_packet_lost)), + detect_loss_incrementally_( + early_retransmit_declares_in_flight_packet_lost_ && + GetQuicReloadableFlag(quic_incremental_loss_detection)) {} LossDetectionType GeneralLossAlgorithm::GetLossDetectionType() const { return loss_type_; @@ -74,8 +73,7 @@ max_rtt + (max_rtt >> reordering_shift_)); QuicPacketNumber packet_number = unacked_packets.GetLeastUnacked(); QuicUnackedPacketMap::const_iterator it = unacked_packets.begin(); - if (GetQuicReloadableFlag(quic_incremental_loss_detection) && - largest_lost_ >= packet_number) { + if (detect_loss_incrementally_ && largest_lost_ >= packet_number) { QUIC_FLAG_COUNT(quic_reloadable_flag_quic_incremental_loss_detection); if (largest_lost_ > unacked_packets.largest_sent_packet()) { QUIC_BUG << "largest_lost: " << largest_lost_ @@ -114,10 +112,17 @@ // Only early retransmit(RFC5827) when the last packet gets acked and // there are retransmittable packets in flight. // This also implements a timer-protected variant of FACK. - if ((!it->retransmittable_frames.empty() && - unacked_packets.largest_sent_retransmittable_packet() <= - largest_newly_acked) || - (loss_type_ == kTime || loss_type_ == kAdaptiveTime)) { + const bool detect_loss_by_early_retransmit = + (early_retransmit_declares_in_flight_packet_lost_ || + !it->retransmittable_frames.empty()) && + unacked_packets.largest_sent_retransmittable_packet() <= + largest_newly_acked; + if (detect_loss_by_early_retransmit && it->retransmittable_frames.empty()) { + QUIC_FLAG_COUNT( + quic_reloadable_flag_quic_early_retransmit_detects_in_flight_packet_lost); // NOLINT + } + if (detect_loss_by_early_retransmit || loss_type_ == kTime || + loss_type_ == kAdaptiveTime) { QuicTime when_lost = it->sent_time + loss_delay; if (time < when_lost) { loss_detection_timeout_ = when_lost; @@ -135,7 +140,7 @@ } } largest_previously_acked_ = largest_newly_acked; - if (!packets_lost->empty()) { + if (detect_loss_incrementally_ && !packets_lost->empty()) { DCHECK_LT(largest_lost_, packets_lost->back().packet_number); largest_lost_ = packets_lost->back().packet_number; }
diff --git a/net/quic/core/congestion_control/general_loss_algorithm.h b/net/quic/core/congestion_control/general_loss_algorithm.h index 4b16fc4..4893a38 100644 --- a/net/quic/core/congestion_control/general_loss_algorithm.h +++ b/net/quic/core/congestion_control/general_loss_algorithm.h
@@ -71,6 +71,14 @@ // The largest lost packet. QuicPacketNumber largest_lost_; + // Latched value of + // quic_reloadable_flag_quic_early_retransmit_detects_in_flight_packet_lost. + const bool early_retransmit_declares_in_flight_packet_lost_; + // Latched value of + // quic_reloadable_flag_quic_early_retransmit_detects_in_flight_packet_lost + // and quic_reloadable_flag_quic_incremental_loss_detection. + const bool detect_loss_incrementally_; + DISALLOW_COPY_AND_ASSIGN(GeneralLossAlgorithm); };
diff --git a/net/quic/core/congestion_control/general_loss_algorithm_test.cc b/net/quic/core/congestion_control/general_loss_algorithm_test.cc index 58a71a8..fe76883 100644 --- a/net/quic/core/congestion_control/general_loss_algorithm_test.cc +++ b/net/quic/core/congestion_control/general_loss_algorithm_test.cc
@@ -156,7 +156,9 @@ loss_algorithm_.GetLossTimeout()); clock_.AdvanceTime(rtt_stats_.smoothed_rtt()); - if (GetQuicReloadableFlag(quic_incremental_loss_detection)) { + if (GetQuicReloadableFlag( + quic_early_retransmit_detects_in_flight_packet_lost) && + GetQuicReloadableFlag(quic_incremental_loss_detection)) { VerifyLosses(kNumSentPackets, {3}); } else { VerifyLosses(kNumSentPackets, {1, 2, 3}); @@ -164,7 +166,9 @@ EXPECT_EQ(clock_.Now() + 0.25 * rtt_stats_.smoothed_rtt(), loss_algorithm_.GetLossTimeout()); clock_.AdvanceTime(0.25 * rtt_stats_.smoothed_rtt()); - if (GetQuicReloadableFlag(quic_incremental_loss_detection)) { + if (GetQuicReloadableFlag( + quic_early_retransmit_detects_in_flight_packet_lost) && + GetQuicReloadableFlag(quic_incremental_loss_detection)) { VerifyLosses(kNumSentPackets, {4}); } else { VerifyLosses(kNumSentPackets, {1, 2, 3, 4}); @@ -180,12 +184,19 @@ } // Neuter packet 1. unacked_packets_.RemoveRetransmittability(1); + clock_.AdvanceTime(rtt_stats_.smoothed_rtt()); // Early retransmit when the final packet gets acked and the first is nacked. unacked_packets_.IncreaseLargestObserved(2); unacked_packets_.RemoveFromInFlight(2); VerifyLosses(2, std::vector<QuicPacketNumber>{}); - EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); + if (GetQuicReloadableFlag( + quic_early_retransmit_detects_in_flight_packet_lost)) { + EXPECT_EQ(clock_.Now() + 0.25 * rtt_stats_.smoothed_rtt(), + loss_algorithm_.GetLossTimeout()); + } else { + EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); + } } TEST_F(GeneralLossAlgorithmTest, EarlyRetransmitWithLargerUnackablePackets) {
diff --git a/net/quic/core/frames/quic_connection_close_frame.cc b/net/quic/core/frames/quic_connection_close_frame.cc index 0d6062e..ac50965 100644 --- a/net/quic/core/frames/quic_connection_close_frame.cc +++ b/net/quic/core/frames/quic_connection_close_frame.cc
@@ -13,6 +13,12 @@ QuicString error_details) : error_code(error_code), error_details(error_details) {} +QuicConnectionCloseFrame::QuicConnectionCloseFrame( + QuicIetfTransportErrorCodes ietf_error_code, + QuicString error_details) + : ietf_error_code(ietf_error_code), + error_details(std::move(error_details)) {} + std::ostream& operator<<( std::ostream& os, const QuicConnectionCloseFrame& connection_close_frame) {
diff --git a/net/quic/core/frames/quic_connection_close_frame.h b/net/quic/core/frames/quic_connection_close_frame.h index 89fa51c..5405df9 100644 --- a/net/quic/core/frames/quic_connection_close_frame.h +++ b/net/quic/core/frames/quic_connection_close_frame.h
@@ -8,6 +8,7 @@ #include <ostream> #include "net/quic/core/quic_error_codes.h" +#include "net/quic/core/quic_types.h" #include "net/quic/platform/api/quic_export.h" #include "net/quic/platform/api/quic_string.h" @@ -16,12 +17,21 @@ struct QUIC_EXPORT_PRIVATE QuicConnectionCloseFrame { QuicConnectionCloseFrame(); QuicConnectionCloseFrame(QuicErrorCode error_code, QuicString error_details); + QuicConnectionCloseFrame(QuicIetfTransportErrorCodes ietf_error_code, + QuicString error_details); friend QUIC_EXPORT_PRIVATE std::ostream& operator<<( std::ostream& os, const QuicConnectionCloseFrame& c); - QuicErrorCode error_code; + // Set error_code or ietf_error_code based on the transport version + // currently in use. + union { + // IETF QUIC has a different set of error codes. Include both + // code-sets. + QuicErrorCode error_code; + QuicIetfTransportErrorCodes ietf_error_code; + }; QuicString error_details; };
diff --git a/net/quic/core/frames/quic_frame.cc b/net/quic/core/frames/quic_frame.cc index ddc1378..6051a01 100644 --- a/net/quic/core/frames/quic_frame.cc +++ b/net/quic/core/frames/quic_frame.cc
@@ -57,6 +57,15 @@ QuicFrame::QuicFrame(QuicStreamIdBlockedFrame frame) : type(STREAM_ID_BLOCKED_FRAME), stream_id_blocked_frame(frame) {} +QuicFrame::QuicFrame(QuicPathResponseFrame* frame) + : type(PATH_RESPONSE_FRAME), path_response_frame(frame) {} + +QuicFrame::QuicFrame(QuicPathChallengeFrame* frame) + : type(PATH_CHALLENGE_FRAME), path_challenge_frame(frame) {} + +QuicFrame::QuicFrame(QuicStopSendingFrame* frame) + : type(STOP_SENDING_FRAME), stop_sending_frame(frame) {} + void DeleteFrames(QuicFrames* frames) { for (QuicFrame& frame : *frames) { DeleteFrame(&frame); @@ -97,12 +106,21 @@ case WINDOW_UPDATE_FRAME: delete frame->window_update_frame; break; + case PATH_CHALLENGE_FRAME: + delete frame->path_challenge_frame; + break; + case STOP_SENDING_FRAME: + delete frame->stop_sending_frame; + break; case APPLICATION_CLOSE_FRAME: delete frame->application_close_frame; break; case NEW_CONNECTION_ID_FRAME: delete frame->new_connection_id_frame; break; + case PATH_RESPONSE_FRAME: + delete frame->path_response_frame; + break; case NUM_FRAME_TYPES: DCHECK(false) << "Cannot delete type: " << frame->type; @@ -271,6 +289,15 @@ case STREAM_ID_BLOCKED_FRAME: os << "type { STREAM_ID_BLOCKED } " << frame.stream_id_blocked_frame; break; + case PATH_RESPONSE_FRAME: + os << "type { PATH_RESPONSE } " << *(frame.path_response_frame); + break; + case PATH_CHALLENGE_FRAME: + os << "type { PATH_CHALLENGE } " << *(frame.path_challenge_frame); + break; + case STOP_SENDING_FRAME: + os << "type { STOP_SENDING } " << *(frame.stop_sending_frame); + break; default: { QUIC_LOG(ERROR) << "Unknown frame type: " << frame.type; break;
diff --git a/net/quic/core/frames/quic_frame.h b/net/quic/core/frames/quic_frame.h index c27ee43..703da75 100644 --- a/net/quic/core/frames/quic_frame.h +++ b/net/quic/core/frames/quic_frame.h
@@ -49,6 +49,9 @@ explicit QuicFrame(QuicNewConnectionIdFrame* frame); explicit QuicFrame(QuicMaxStreamIdFrame frame); explicit QuicFrame(QuicStreamIdBlockedFrame frame); + explicit QuicFrame(QuicPathResponseFrame* frame); + explicit QuicFrame(QuicPathChallengeFrame* frame); + explicit QuicFrame(QuicStopSendingFrame* frame); QUIC_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os, const QuicFrame& frame); @@ -73,6 +76,9 @@ QuicBlockedFrame* blocked_frame; QuicApplicationCloseFrame* application_close_frame; QuicNewConnectionIdFrame* new_connection_id_frame; + QuicPathResponseFrame* path_response_frame; + QuicPathChallengeFrame* path_challenge_frame; + QuicStopSendingFrame* stop_sending_frame; }; }; // QuicFrameType consumes 8 bytes with padding.
diff --git a/net/quic/core/frames/quic_rst_stream_frame.cc b/net/quic/core/frames/quic_rst_stream_frame.cc index 08b878e..d966bcd 100644 --- a/net/quic/core/frames/quic_rst_stream_frame.cc +++ b/net/quic/core/frames/quic_rst_stream_frame.cc
@@ -18,6 +18,15 @@ error_code(error_code), byte_offset(bytes_written) {} +QuicRstStreamFrame::QuicRstStreamFrame(QuicControlFrameId control_frame_id, + QuicStreamId stream_id, + uint16_t ietf_error_code, + QuicStreamOffset bytes_written) + : QuicControlFrame(control_frame_id), + stream_id(stream_id), + ietf_error_code(ietf_error_code), + byte_offset(bytes_written) {} + std::ostream& operator<<(std::ostream& os, const QuicRstStreamFrame& rst_frame) { os << "{ control_frame_id: " << rst_frame.control_frame_id
diff --git a/net/quic/core/frames/quic_rst_stream_frame.h b/net/quic/core/frames/quic_rst_stream_frame.h index edaf65f..247a7d6 100644 --- a/net/quic/core/frames/quic_rst_stream_frame.h +++ b/net/quic/core/frames/quic_rst_stream_frame.h
@@ -18,13 +18,25 @@ QuicStreamId stream_id, QuicRstStreamErrorCode error_code, QuicStreamOffset bytes_written); + QuicRstStreamFrame(QuicControlFrameId control_frame_id, + QuicStreamId stream_id, + uint16_t ietf_error_code, + QuicStreamOffset bytes_written); friend QUIC_EXPORT_PRIVATE std::ostream& operator<<( std::ostream& os, const QuicRstStreamFrame& r); QuicStreamId stream_id; - QuicRstStreamErrorCode error_code; + + // Caller must know whether IETF- or Google- QUIC is in use and + // set the appropriate error code. + union { + QuicRstStreamErrorCode error_code; + // In IETF QUIC the code is up to the app on top of quic, so is + // more general than QuicRstStreamErrorCode allows. + uint16_t ietf_error_code; + }; // Used to update flow control windows. On termination of a stream, both // endpoints must inform the peer of the number of bytes they have sent on
diff --git a/net/quic/core/quic_connection.cc b/net/quic/core/quic_connection.cc index aa98f08..e6b032f 100644 --- a/net/quic/core/quic_connection.cc +++ b/net/quic/core/quic_connection.cc
@@ -783,38 +783,38 @@ } } else { current_effective_peer_migration_type_ = NO_CHANGE; - // Initiate connection migration if a non-reordered packet is received from - // a new address. - if (header.packet_number > received_packet_manager_.GetLargestObserved()) { - if (perspective_ == Perspective::IS_CLIENT) { + + if (perspective_ == Perspective::IS_CLIENT) { + if (header.packet_number > + received_packet_manager_.GetLargestObserved()) { // Update peer_address_ and effective_peer_address_ immediately for // client connections. direct_peer_address_ = last_packet_source_address_; effective_peer_address_ = GetEffectivePeerAddressFromCurrentPacket(); - } else { - // At server, direct_peer_address_ and effective_peer_address_ will be - // updated once the current packet is confirmed to be not a connectivity - // probing packet. - AddressChangeType effective_peer_migration_type = - QuicUtils::DetermineAddressChangeType( - effective_peer_address_, - GetEffectivePeerAddressFromCurrentPacket()); - - if (effective_peer_migration_type != NO_CHANGE) { - QUIC_DLOG(INFO) - << ENDPOINT << "Effective peer's ip:port changed from " - << effective_peer_address_.ToString() << " to " - << GetEffectivePeerAddressFromCurrentPacket().ToString() - << ", active_effective_peer_migration_type is " - << active_effective_peer_migration_type_; - // Migrate connection to a new effective peer address even if there is - // a pending change underway. Cache the current migration change type, - // which will start effective peer migration immediately if this - // packet is not a connectivity probing packet. - current_effective_peer_migration_type_ = - effective_peer_migration_type; - } } + } else { + // At server, remember the address change type of effective_peer_address + // in current_effective_peer_migration_type_. But this variable alone + // doesn't necessarily starts a migration. A migration will be started + // later, once the current packet is confirmed to meet the following + // conditions: + // 1) current_effective_peer_migration_type_ is not NO_CHANGE. + // 2) The current packet is not a connectivity probing. + // 3) The current packet is not reordered, i.e. its packet number is the + // largest of this connection so far. + // Once the above conditions are confirmed, a new migration will start + // even if there is an active migration underway. + current_effective_peer_migration_type_ = + QuicUtils::DetermineAddressChangeType( + effective_peer_address_, + GetEffectivePeerAddressFromCurrentPacket()); + + QUIC_DLOG_IF(INFO, current_effective_peer_migration_type_ != NO_CHANGE) + << ENDPOINT << "Effective peer's ip:port changed from " + << effective_peer_address_.ToString() << " to " + << GetEffectivePeerAddressFromCurrentPacket().ToString() + << ", active_effective_peer_migration_type is " + << active_effective_peer_migration_type_; } } @@ -1220,11 +1220,16 @@ return; } + if (IsCurrentPacketConnectivityProbing()) { + ++stats_.num_connectivity_probing_received; + } + QUIC_DVLOG(1) << ENDPOINT << "Got packet " << last_header_.packet_number << " for " << last_header_.connection_id; QUIC_DLOG_IF(INFO, current_packet_content_ == SECOND_FRAME_IS_PADDING) - << ENDPOINT << "Received a padded PING packet"; + << ENDPOINT << "Received a padded PING packet. is_probing: " + << IsCurrentPacketConnectivityProbing(); if (perspective_ == Perspective::IS_CLIENT) { QUIC_DVLOG(1) << ENDPOINT @@ -1253,9 +1258,9 @@ if (last_header_.packet_number == received_packet_manager_.GetLargestObserved()) { direct_peer_address_ = last_packet_source_address_; - } - if (current_effective_peer_migration_type_ != NO_CHANGE) { - StartEffectivePeerMigration(current_effective_peer_migration_type_); + if (current_effective_peer_migration_type_ != NO_CHANGE) { + StartEffectivePeerMigration(current_effective_peer_migration_type_); + } } } } @@ -3203,14 +3208,12 @@ if (last_header_.packet_number == received_packet_manager_.GetLargestObserved()) { direct_peer_address_ = last_packet_source_address_; + if (current_effective_peer_migration_type_ != NO_CHANGE) { + // Start effective peer migration immediately when the current packet is + // confirmed not a connectivity probing packet. + StartEffectivePeerMigration(current_effective_peer_migration_type_); + } } - if (current_effective_peer_migration_type_ == NO_CHANGE) { - return; - } - - // Start effective peer migration immediately when the current packet is - // confirmed not a connectivity probing packet. - StartEffectivePeerMigration(current_effective_peer_migration_type_); current_effective_peer_migration_type_ = NO_CHANGE; } }
diff --git a/net/quic/core/quic_connection_stats.cc b/net/quic/core/quic_connection_stats.cc index 759c4620..b4512a2 100644 --- a/net/quic/core/quic_connection_stats.cc +++ b/net/quic/core/quic_connection_stats.cc
@@ -39,7 +39,8 @@ tcp_loss_events(0), connection_creation_time(QuicTime::Zero()), blocked_frames_received(0), - blocked_frames_sent(0) {} + blocked_frames_sent(0), + num_connectivity_probing_received(0) {} QuicConnectionStats::QuicConnectionStats(const QuicConnectionStats& other) = default; @@ -81,7 +82,9 @@ os << " connection_creation_time: " << s.connection_creation_time.ToDebuggingValue(); os << " blocked_frames_received: " << s.blocked_frames_received; - os << " blocked_frames_sent: " << s.blocked_frames_sent << " }"; + os << " blocked_frames_sent: " << s.blocked_frames_sent; + os << " num_connectivity_probing_received: " + << s.num_connectivity_probing_received << " }"; return os; }
diff --git a/net/quic/core/quic_connection_stats.h b/net/quic/core/quic_connection_stats.h index 57f7c78..0ee7d859 100644 --- a/net/quic/core/quic_connection_stats.h +++ b/net/quic/core/quic_connection_stats.h
@@ -89,6 +89,9 @@ uint64_t blocked_frames_received; uint64_t blocked_frames_sent; + + // Number of connectivity probing packets received by this connection. + uint64_t num_connectivity_probing_received; }; } // namespace net
diff --git a/net/quic/core/quic_connection_test.cc b/net/quic/core/quic_connection_test.cc index ce54802..568a3bb 100644 --- a/net/quic/core/quic_connection_test.cc +++ b/net/quic/core/quic_connection_test.cc
@@ -1647,6 +1647,65 @@ } } +TEST_P(QuicConnectionTest, ReceiveReorderedConnectivityProbingAtServer) { + EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); + set_perspective(Perspective::IS_SERVER); + QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false); + EXPECT_EQ(Perspective::IS_SERVER, connection_.perspective()); + + if (GetQuicReloadableFlag(quic_enable_server_proxy2)) { + // Clear direct_peer_address. + QuicConnectionPeer::SetDirectPeerAddress(&connection_, QuicSocketAddress()); + // Clear effective_peer_address, it is the same as direct_peer_address for + // this test. + QuicConnectionPeer::SetEffectivePeerAddress(&connection_, + QuicSocketAddress()); + EXPECT_FALSE(connection_.effective_peer_address().IsInitialized()); + } else { + // Clear peer_address. + QuicConnectionPeer::SetPeerAddress(&connection_, QuicSocketAddress()); + EXPECT_FALSE(connection_.peer_address().IsInitialized()); + } + + QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5); + QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece()); + EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber()); + ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress, + kPeerAddress); + EXPECT_EQ(kPeerAddress, connection_.peer_address()); + if (GetQuicReloadableFlag(quic_enable_server_proxy2)) { + EXPECT_EQ(kPeerAddress, connection_.effective_peer_address()); + } + + // Decrease packet number to simulate out-of-order packets. + QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4); + + EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(0); + EXPECT_CALL(visitor_, OnConnectivityProbeReceived(_, _)).Times(1); + + // Process a padded PING packet from a new peer address on server side + // is effectively receiving a connectivity probing, even if a newer packet has + // been received before this one. + const QuicSocketAddress kNewPeerAddress = + QuicSocketAddress(QuicIpAddress::Loopback6(), /*port=*/23456); + + OwningSerializedPacketPointer probing_packet( + QuicPacketCreatorPeer::SerializeConnectivityProbingPacket( + &peer_creator_)); + std::unique_ptr<QuicReceivedPacket> received(ConstructReceivedPacket( + QuicEncryptedPacket(probing_packet->encrypted_buffer, + probing_packet->encrypted_length), + clock_.Now())); + + ProcessReceivedPacket(kSelfAddress, kNewPeerAddress, *received); + + EXPECT_TRUE(connection_.IsCurrentPacketConnectivityProbing()); + EXPECT_EQ(kPeerAddress, connection_.peer_address()); + if (GetQuicReloadableFlag(quic_enable_server_proxy2)) { + EXPECT_EQ(kPeerAddress, connection_.effective_peer_address()); + } +} + TEST_P(QuicConnectionTest, MigrateAfterProbingAtServer) { EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); set_perspective(Perspective::IS_SERVER);
diff --git a/net/quic/core/quic_flags_list.h b/net/quic/core/quic_flags_list.h index b7d23d32..3da4a0c0 100644 --- a/net/quic/core/quic_flags_list.h +++ b/net/quic/core/quic_flags_list.h
@@ -45,12 +45,6 @@ FLAGS_quic_reloadable_flag_quic_use_cheap_stateless_rejects, true) -// If true, QUIC respect HTTP2 SETTINGS frame rather than always close the -// connection. -QUIC_FLAG(bool, - FLAGS_quic_reloadable_flag_quic_respect_http2_settings_frame, - true) - // If true, allows packets to be buffered in anticipation of a future CHLO, and // allow CHLO packets to be buffered until next iteration of the event loop. QUIC_FLAG(bool, FLAGS_quic_allow_chlo_buffering, true) @@ -102,7 +96,7 @@ QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_enable_accept_random_ipn, false) // If true, enable QUIC v43. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_43, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_43, true) // Enables 3 new connection options to make PROBE_RTT more aggressive QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_less_probe_rtt, false) @@ -112,11 +106,11 @@ // When true, enables the 1TLP connection option to configure QUIC to send one // TLP instead of 2. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_one_tlp, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_one_tlp, true) // When true, allows two connection options to run experiments with using max // ack delay as described in QUIC IETF. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_max_ack_delay, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_max_ack_delay, true) // If true, enable QUIC v99. QUIC_FLAG(bool, FLAGS_quic_enable_version_99, false) @@ -130,12 +124,12 @@ // When true, enable connection options to have no min TLP and RTO, // and also allow IETF style TLP. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_max_ack_delay2, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_max_ack_delay2, true) // If true, MemSlices in the send buffer is freed out of order. QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_free_mem_slice_out_of_order, - false) + true) // If true, framer will process and report ack frame incrementally. QUIC_FLAG(bool, @@ -145,7 +139,7 @@ // If true, enable fast path in QuicStream::OnStreamDataAcked. QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fast_path_on_stream_data_acked, - false) + true) // If true, QUIC streams are registered in the QuicStream constructor instead // of in the QuicSpdyStream constructor. @@ -173,9 +167,6 @@ FLAGS_quic_reloadable_flag_quic_always_discard_packets_after_close, true) -// If true, stop sending a redundant PING every 20 acks. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_remove_redundant_ping, true) - // If true, when a stream is reset by peer with error, it should not be added to // zombie streams. QUIC_FLAG(bool, @@ -196,7 +187,7 @@ // Remove special logic for headers stream from QuicWriteBlockedList and // replace it with a static streams map. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_register_static_streams, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_register_static_streams, true) // Base the QUIC crypto retransmission timer on the last sent crypto packet. QUIC_FLAG(bool, @@ -208,10 +199,10 @@ // If true, compare offset with last byte acked to determine whether it is // disjoint before calling IntervalSet::IsDisjoint. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fast_is_disjoint, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fast_is_disjoint, true) // If true, enable fast path in QuicStreamSequencerBuffer::OnStreamData. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fast_path_on_stream_data, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fast_path_on_stream_data, true) // When true, set the initial congestion control window from connection options // in QuicSentPacketManager rather than TcpCubicSenderBytes. @@ -223,10 +214,10 @@ // If true, use the send alarm instead of the resume_writes alarm in // QuicConnection. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_unified_send_alarm, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_unified_send_alarm, true) // If true, do not use QUIC's MSPC handshake tag and instead require MIDS. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_no_mspc, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_no_mspc, true) // If true, simplify pacing sender logic. QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_simplify_pacing_sender, false) @@ -242,8 +233,6 @@ QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_respect_ietf_header, false) // If true, detect losses from last largest lost packet number. - -// If true, enable fast path in QuicStreamSendBuffer::FreeMemSlices. QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_incremental_loss_detection, false); @@ -254,3 +243,10 @@ // Default enables QUIC ack decimation and adds a connection option to disable // it. QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_ack_decimation, false) + +// If true, declare in flight packets lost via early retransmit, even though it +// has no retransmittable frames. +QUIC_FLAG( + bool, + FLAGS_quic_reloadable_flag_quic_early_retransmit_detects_in_flight_packet_lost, + false)
diff --git a/net/quic/core/quic_framer.cc b/net/quic/core/quic_framer.cc index 26df755..c8624ed3 100644 --- a/net/quic/core/quic_framer.cc +++ b/net/quic/core/quic_framer.cc
@@ -2504,6 +2504,12 @@ QUIC_FALLTHROUGH_INTENDED; case STREAM_ID_BLOCKED_FRAME: QUIC_FALLTHROUGH_INTENDED; + case PATH_RESPONSE_FRAME: + QUIC_FALLTHROUGH_INTENDED; + case PATH_CHALLENGE_FRAME: + QUIC_FALLTHROUGH_INTENDED; + case STOP_SENDING_FRAME: + QUIC_FALLTHROUGH_INTENDED; case NUM_FRAME_TYPES: DCHECK(false); return 0; @@ -3274,75 +3280,85 @@ bool QuicFramer::AppendIetfConnectionCloseFrame( const QuicConnectionCloseFrame& frame, QuicDataWriter* writer) { - return AppendIetfCloseFrame(IETF_CONNECTION_CLOSE, - static_cast<uint16_t>(frame.error_code), - frame.error_details, writer); -} - -bool QuicFramer::AppendIetfApplicationCloseFrame( - const QuicConnectionCloseFrame& frame, - QuicDataWriter* writer) { - return AppendIetfCloseFrame(IETF_APPLICATION_CLOSE, - static_cast<const uint16_t>(frame.error_code), - frame.error_details, writer); -} - -// Generate either an IETF-Connection- or IETF-Application-close frame. -// General format is -// type-byte -// error code (fixed 16 bits) -// phrase length (varint) -// phrase (string) -bool QuicFramer::AppendIetfCloseFrame(const QuicIetfFrameType type, - const uint16_t code, - const QuicString& phrase, - QuicDataWriter* writer) { - if (!writer->WriteUInt8(type)) { - set_detailed_error("Can not write close frame type byte"); + if (!writer->WriteUInt8(IETF_CONNECTION_CLOSE)) { + set_detailed_error("Can not write connection close frame type byte"); return false; } - if (!writer->WriteUInt16(code)) { - set_detailed_error("Can not write close frame code"); + if (!writer->WriteUInt16(static_cast<const uint16_t>(frame.error_code))) { + set_detailed_error("Can not write connection close frame error code"); return false; } - if (!writer->WriteVarInt62(phrase.size())) { - set_detailed_error("Can not write phrase-length"); + if (!writer->WriteVarInt62(frame.error_details.size())) { + set_detailed_error("Can not write connection close phrase-length"); return false; } - if (!phrase.empty()) { + if (!frame.error_details.empty()) { // append the phrase - if (!writer->WriteBytes(static_cast<const void*>(phrase.c_str()), - phrase.size())) { - set_detailed_error("Can not write phrase"); + QuicStringPiece error_string = TruncateErrorString(frame.error_details); + if (!writer->WriteBytes(error_string.data(), error_string.size())) { + set_detailed_error("Can not write application close phrase"); return false; } } return true; } -// Parse either an IETF-Connection- or IETF-Application-close frame. -// General format is -// type-byte -// error code (fixed 16 bits) -// phrase length (varint) -// phrase (string) +bool QuicFramer::AppendApplicationCloseFrame( + const QuicApplicationCloseFrame& frame, + QuicDataWriter* writer) { + if (!writer->WriteUInt8(IETF_APPLICATION_CLOSE)) { + set_detailed_error("Can not write close frame type byte"); + return false; + } + if (!writer->WriteUInt16(static_cast<const uint16_t>(frame.error_code))) { + set_detailed_error("Can not write application close frame error code"); + return false; + } + if (!writer->WriteVarInt62(frame.error_details.size())) { + set_detailed_error("Can not write application close phrase-length"); + return false; + } + if (!frame.error_details.empty()) { + // append the phrase + QuicStringPiece error_string = TruncateErrorString(frame.error_details); + if (!writer->WriteBytes(error_string.data(), error_string.size())) { + set_detailed_error("Can not write application close phrase"); + return false; + } + } + return true; +} + bool QuicFramer::ProcessIetfConnectionCloseFrame( QuicDataReader* reader, const uint8_t frame_type, QuicConnectionCloseFrame* frame) { - return ProcessIetfCloseFrame(reader, frame_type, frame); + uint16_t code; + if (!reader->ReadUInt16(&code)) { + set_detailed_error("Unable to read close frame code."); + return false; + } + frame->error_code = static_cast<QuicErrorCode>(code); + + uint64_t phrase_length; + if (!reader->ReadVarInt62(&phrase_length)) { + set_detailed_error("Unable to read phrase length"); + return false; + } + QuicStringPiece phrase; + if (!reader->ReadStringPiece(&phrase, static_cast<size_t>(phrase_length))) { + set_detailed_error("Can not read extended close information phrase"); + return false; + } + frame->error_details = string(phrase); + + return true; } -bool QuicFramer::ProcessIetfApplicationCloseFrame( +bool QuicFramer::ProcessApplicationCloseFrame( QuicDataReader* reader, const uint8_t frame_type, - QuicConnectionCloseFrame* frame) { - return ProcessIetfCloseFrame(reader, frame_type, frame); -} - -bool QuicFramer::ProcessIetfCloseFrame(QuicDataReader* reader, - const uint8_t frame_type, - QuicConnectionCloseFrame* frame) { + QuicApplicationCloseFrame* frame) { uint16_t code; if (!reader->ReadUInt16(&code)) { set_detailed_error("Unable to read close frame code."); @@ -3366,8 +3382,8 @@ } // IETF Quic Path Challenge/Response frames. -bool QuicFramer::ProcessIetfPathChallengeFrame(QuicDataReader* reader, - QuicPathChallengeFrame* frame) { +bool QuicFramer::ProcessPathChallengeFrame(QuicDataReader* reader, + QuicPathChallengeFrame* frame) { if (!reader->ReadBytes(frame->data_buffer.data(), kQuicPathFrameBufferSize)) { set_detailed_error("Can not read path Challenge data"); return false; @@ -3375,8 +3391,8 @@ return true; } -bool QuicFramer::ProcessIetfPathResponseFrame(QuicDataReader* reader, - QuicPathResponseFrame* frame) { +bool QuicFramer::ProcessPathResponseFrame(QuicDataReader* reader, + QuicPathResponseFrame* frame) { if (!reader->ReadBytes(frame->data_buffer.data(), kQuicPathFrameBufferSize)) { set_detailed_error("Can not read path Response data"); return false; @@ -3384,9 +3400,8 @@ return true; } -bool QuicFramer::AppendIetfPathChallengeFrame( - const QuicPathChallengeFrame& frame, - QuicDataWriter* writer) { +bool QuicFramer::AppendPathChallengeFrame(const QuicPathChallengeFrame& frame, + QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_PATH_CHALLENGE)) { set_detailed_error("Can not write Path Challenge frame type byte"); return false; @@ -3399,8 +3414,8 @@ return true; } -bool QuicFramer::AppendIetfPathResponseFrame(const QuicPathResponseFrame& frame, - QuicDataWriter* writer) { +bool QuicFramer::AppendPathResponseFrame(const QuicPathResponseFrame& frame, + QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_PATH_RESPONSE)) { set_detailed_error("Can not write Path Response frame type byte"); return false; @@ -3429,7 +3444,7 @@ set_detailed_error("Writing reset-stream stream id failed."); return false; } - if (!writer->WriteUInt16(static_cast<uint16_t>(frame.error_code))) { + if (!writer->WriteUInt16(frame.ietf_error_code)) { set_detailed_error("Writing reset-stream error code failed."); return false; } @@ -3450,12 +3465,10 @@ return false; } - uint16_t temp_uint16; - if (!reader->ReadUInt16(&temp_uint16)) { + if (!reader->ReadUInt16(&frame->ietf_error_code)) { set_detailed_error("Reading reset-stream error code failed."); return false; } - frame->error_code = static_cast<QuicRstStreamErrorCode>(temp_uint16); if (!reader->ReadVarInt62(&frame->byte_offset)) { set_detailed_error("Reading reset-stream final-offset failed."); @@ -3464,7 +3477,7 @@ return true; } -bool QuicFramer::ProcessIetfStopSendingFrame( +bool QuicFramer::ProcessStopSendingFrame( QuicDataReader* reader, QuicStopSendingFrame* stop_sending_frame) { if (!reader->ReadVarIntStreamId(&stop_sending_frame->stream_id)) { @@ -3479,7 +3492,7 @@ return true; } -bool QuicFramer::AppendIetfStopSendingFrame( +bool QuicFramer::AppendStopSendingFrame( const QuicStopSendingFrame& stop_sending_frame, QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_STOP_SENDING)) { @@ -3500,24 +3513,24 @@ // Append/process IETF-Format MAX_DATA Frame // MAX_DATA format is a single number, the maximum number of bytes // that can be accepted on the connection. -bool QuicFramer::AppendIetfMaxDataFrame(const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer) { +bool QuicFramer::AppendMaxDataFrame(const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_MAX_DATA)) { - set_detailed_error("Can not write IETF_MAX_DATA frame type byte"); + set_detailed_error("Can not write MAX_DATA frame type byte"); return false; } if (!writer->WriteVarInt62(frame.byte_offset)) { - set_detailed_error("Can not write IETF_MAX_DATA byte-offset"); + set_detailed_error("Can not write MAX_DATA byte-offset"); return false; } return true; } -bool QuicFramer::ProcessIetfMaxDataFrame(QuicDataReader* reader, - QuicWindowUpdateFrame* frame) { +bool QuicFramer::ProcessMaxDataFrame(QuicDataReader* reader, + QuicWindowUpdateFrame* frame) { frame->stream_id = 0; if (!reader->ReadVarInt62(&frame->byte_offset)) { - set_detailed_error("Can not read IETF_MAX_DATA byte-offset"); + set_detailed_error("Can not read MAX_DATA byte-offset"); return false; } return true; @@ -3525,32 +3538,31 @@ // Append/process IETF-Format MAX_STREAM_DATA Frame // MAX_STREAM_DATA is two numbers, stream ID and then max number of bytes. -bool QuicFramer::AppendIetfMaxStreamDataFrame( - const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer) { +bool QuicFramer::AppendMaxStreamDataFrame(const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_MAX_STREAM_DATA)) { - set_detailed_error("Can not write IETF_MAX_STREAM_DATA frame type byte"); + set_detailed_error("Can not write MAX_STREAM_DATA frame type byte"); return false; } if (!writer->WriteVarInt62(frame.stream_id)) { - set_detailed_error("Can not write IETF_MAX_STREAM_DATA stream id"); + set_detailed_error("Can not write MAX_STREAM_DATA stream id"); return false; } if (!writer->WriteVarInt62(frame.byte_offset)) { - set_detailed_error("Can not write IETF_MAX_STREAM_DATA byte-offset"); + set_detailed_error("Can not write MAX_STREAM_DATA byte-offset"); return false; } return true; } -bool QuicFramer::ProcessIetfMaxStreamDataFrame(QuicDataReader* reader, - QuicWindowUpdateFrame* frame) { +bool QuicFramer::ProcessMaxStreamDataFrame(QuicDataReader* reader, + QuicWindowUpdateFrame* frame) { if (!reader->ReadVarIntStreamId(&frame->stream_id)) { - set_detailed_error("Can not read IETF_MAX_STREAM_DATA stream id"); + set_detailed_error("Can not read MAX_STREAM_DATA stream id"); return false; } if (!reader->ReadVarInt62(&frame->byte_offset)) { - set_detailed_error("Can not read IETF_MAX_STREAM_DATA byte-count"); + set_detailed_error("Can not read MAX_STREAM_DATA byte-count"); return false; } return true; @@ -3581,11 +3593,11 @@ bool QuicFramer::AppendIetfBlockedFrame(const QuicBlockedFrame& frame, QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_BLOCKED)) { - set_detailed_error("Can not write IETF_BLOCKED frame type byte"); + set_detailed_error("Can not write BLOCKED frame type byte"); return false; } if (!writer->WriteVarInt62(frame.offset)) { - set_detailed_error("Can not write IETF_BLOCKED offset"); + set_detailed_error("Can not write BLOCKED offset"); return false; } return true; @@ -3593,38 +3605,40 @@ bool QuicFramer::ProcessIetfBlockedFrame(QuicDataReader* reader, QuicBlockedFrame* frame) { + // Indicates that it is a BLOCKED frame (as opposed to STREAM_BLOCKED). + frame->stream_id = 0; if (!reader->ReadVarInt62(&frame->offset)) { - set_detailed_error("Can not read IETF_BLOCKED offset"); + set_detailed_error("Can not read BLOCKED offset"); return false; } return true; } -bool QuicFramer::AppendIetfStreamBlockedFrame(const QuicBlockedFrame& frame, - QuicDataWriter* writer) { +bool QuicFramer::AppendStreamBlockedFrame(const QuicBlockedFrame& frame, + QuicDataWriter* writer) { if (!writer->WriteUInt8(IETF_STREAM_BLOCKED)) { - set_detailed_error("Can not write IETF_STREAM_BLOCKED frame type byte"); + set_detailed_error("Can not write STREAM_BLOCKED frame type byte"); return false; } if (!writer->WriteVarInt62(frame.stream_id)) { - set_detailed_error("Can not write IETF_STREAM_BLOCKED stream id"); + set_detailed_error("Can not write STREAM_BLOCKED stream id"); return false; } if (!writer->WriteVarInt62(frame.offset)) { - set_detailed_error("Can not write IETF_STREAM_BLOCKED offset"); + set_detailed_error("Can not write STREAM_BLOCKED offset"); return false; } return true; } -bool QuicFramer::ProcessIetfStreamBlockedFrame(QuicDataReader* reader, - QuicBlockedFrame* frame) { +bool QuicFramer::ProcessStreamBlockedFrame(QuicDataReader* reader, + QuicBlockedFrame* frame) { if (!reader->ReadVarIntStreamId(&frame->stream_id)) { - set_detailed_error("Can not read IETF_STREAM_BLOCKED stream id"); + set_detailed_error("Can not read STREAM_BLOCKED stream id"); return false; } if (!reader->ReadVarInt62(&frame->offset)) { - set_detailed_error("Can not read IETF_STREAM_BLOCKED offset"); + set_detailed_error("Can not read STREAM_BLOCKED offset"); return false; } return true; @@ -3653,4 +3667,50 @@ return true; } +bool QuicFramer::AppendNewConnectionIdFrame( + const QuicNewConnectionIdFrame& frame, + QuicDataWriter* writer) { + if (!writer->WriteUInt8(IETF_NEW_CONNECTION_ID)) { + set_detailed_error("Can not write New Connection ID frame type byte"); + return false; + } + if (!writer->WriteVarInt62(frame.sequence_number)) { + set_detailed_error("Can not write New Connection ID sequence number"); + return false; + } + if (!writer->WriteUInt64(frame.connection_id)) { + set_detailed_error("Can not write New Connection ID frame connection ID"); + return false; + } + + if (!writer->WriteBytes( + static_cast<const void*>(&frame.stateless_reset_token), + sizeof(frame.stateless_reset_token))) { + set_detailed_error("Can not write New Connection ID Reset Token"); + return false; + } + return true; +} + +bool QuicFramer::ProcessNewConnectionIdFrame(QuicDataReader* reader, + QuicNewConnectionIdFrame* frame) { + if (!reader->ReadVarInt62(&frame->sequence_number)) { + set_detailed_error( + "Unable to read New Connection ID Frame sequence number."); + return false; + } + + if (!reader->ReadUInt64(&frame->connection_id)) { + set_detailed_error("Unable to read New Connection ID Frame connection id."); + return false; + } + + if (!reader->ReadBytes(&frame->stateless_reset_token, + sizeof(frame->stateless_reset_token))) { + set_detailed_error("Can not read New Connection ID Frame reset token."); + return false; + } + return true; +} + } // namespace net
diff --git a/net/quic/core/quic_framer.h b/net/quic/core/quic_framer.h index b0e1056..03d31bd 100644 --- a/net/quic/core/quic_framer.h +++ b/net/quic/core/quic_framer.h
@@ -556,23 +556,20 @@ bool ProcessIetfConnectionCloseFrame(QuicDataReader* reader, const uint8_t frame_type, QuicConnectionCloseFrame* frame); - bool ProcessIetfApplicationCloseFrame(QuicDataReader* reader, - const uint8_t frame_type, - QuicConnectionCloseFrame* frame); - bool ProcessIetfCloseFrame(QuicDataReader* reader, - const uint8_t frame_type, - QuicConnectionCloseFrame* frame); + bool ProcessApplicationCloseFrame(QuicDataReader* reader, + const uint8_t frame_type, + QuicApplicationCloseFrame* frame); bool ProcessIetfAckFrame(QuicDataReader* reader, uint8_t frame_type, QuicAckFrame* ack_frame); - bool ProcessIetfPathChallengeFrame(QuicDataReader* reader, - QuicPathChallengeFrame* frame); - bool ProcessIetfPathResponseFrame(QuicDataReader* reader, - QuicPathResponseFrame* frame); + bool ProcessPathChallengeFrame(QuicDataReader* reader, + QuicPathChallengeFrame* frame); + bool ProcessPathResponseFrame(QuicDataReader* reader, + QuicPathResponseFrame* frame); bool ProcessIetfResetStreamFrame(QuicDataReader* reader, QuicRstStreamFrame* frame); - bool ProcessIetfStopSendingFrame(QuicDataReader* reader, - QuicStopSendingFrame* stop_sending_frame); + bool ProcessStopSendingFrame(QuicDataReader* reader, + QuicStopSendingFrame* stop_sending_frame); // IETF frame appending methods. All methods append the type byte as well. bool AppendIetfStreamFrame(const QuicStreamFrame& frame, @@ -580,32 +577,27 @@ QuicDataWriter* writer); bool AppendIetfConnectionCloseFrame(const QuicConnectionCloseFrame& frame, QuicDataWriter* writer); - bool AppendIetfApplicationCloseFrame(const QuicConnectionCloseFrame& frame, - QuicDataWriter* writer); - bool AppendIetfCloseFrame(const QuicIetfFrameType type, - const uint16_t code, - const QuicString& phrase, - QuicDataWriter* writer); - bool AppendIetfAckFrame(const QuicAckFrame& frame, QuicDataWriter* writer); - bool AppendIetfPathChallengeFrame(const QuicPathChallengeFrame& frame, - QuicDataWriter* writer); - bool AppendIetfPathResponseFrame(const QuicPathResponseFrame& frame, + bool AppendApplicationCloseFrame(const QuicApplicationCloseFrame& frame, QuicDataWriter* writer); + bool AppendIetfAckFrame(const QuicAckFrame& frame, QuicDataWriter* writer); + bool AppendPathChallengeFrame(const QuicPathChallengeFrame& frame, + QuicDataWriter* writer); + bool AppendPathResponseFrame(const QuicPathResponseFrame& frame, + QuicDataWriter* writer); bool AppendIetfResetStreamFrame(const QuicRstStreamFrame& frame, QuicDataWriter* writer); - bool AppendIetfStopSendingFrame( - const QuicStopSendingFrame& stop_sending_frame, - QuicDataWriter* writer); + bool AppendStopSendingFrame(const QuicStopSendingFrame& stop_sending_frame, + QuicDataWriter* writer); // Append/consume IETF-Format MAX_DATA and MAX_STREAM_DATA frames - bool AppendIetfMaxDataFrame(const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer); - bool AppendIetfMaxStreamDataFrame(const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer); - bool ProcessIetfMaxDataFrame(QuicDataReader* reader, - QuicWindowUpdateFrame* frame); - bool ProcessIetfMaxStreamDataFrame(QuicDataReader* reader, - QuicWindowUpdateFrame* frame); + bool AppendMaxDataFrame(const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer); + bool AppendMaxStreamDataFrame(const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer); + bool ProcessMaxDataFrame(QuicDataReader* reader, + QuicWindowUpdateFrame* frame); + bool ProcessMaxStreamDataFrame(QuicDataReader* reader, + QuicWindowUpdateFrame* frame); bool AppendMaxStreamIdFrame(const QuicMaxStreamIdFrame& frame, QuicDataWriter* writer); @@ -616,15 +608,19 @@ QuicDataWriter* writer); bool ProcessIetfBlockedFrame(QuicDataReader* reader, QuicBlockedFrame* frame); - bool AppendIetfStreamBlockedFrame(const QuicBlockedFrame& frame, - QuicDataWriter* writer); - bool ProcessIetfStreamBlockedFrame(QuicDataReader* reader, - QuicBlockedFrame* frame); + bool AppendStreamBlockedFrame(const QuicBlockedFrame& frame, + QuicDataWriter* writer); + bool ProcessStreamBlockedFrame(QuicDataReader* reader, + QuicBlockedFrame* frame); bool AppendStreamIdBlockedFrame(const QuicStreamIdBlockedFrame& frame, QuicDataWriter* writer); bool ProcessStreamIdBlockedFrame(QuicDataReader* reader, QuicStreamIdBlockedFrame* frame); + bool AppendNewConnectionIdFrame(const QuicNewConnectionIdFrame& frame, + QuicDataWriter* writer); + bool ProcessNewConnectionIdFrame(QuicDataReader* reader, + QuicNewConnectionIdFrame* frame); bool RaiseError(QuicErrorCode error);
diff --git a/net/quic/core/quic_headers_stream_test.cc b/net/quic/core/quic_headers_stream_test.cc index a29abac..608fc127 100644 --- a/net/quic/core/quic_headers_stream_test.cc +++ b/net/quic/core/quic_headers_stream_test.cc
@@ -498,7 +498,6 @@ } TEST_P(QuicHeadersStreamTest, ProcessPushPromiseDisabledSetting) { - SetQuicReloadableFlag(quic_respect_http2_settings_frame, true); session_.OnConfigNegotiated(); SpdySettingsIR data; // Respect supported settings frames SETTINGS_ENABLE_PUSH. @@ -666,22 +665,7 @@ headers_stream_->OnStreamFrame(stream_frame_); } -TEST_P(QuicHeadersStreamTest, ProcessSpdySettingsFrame) { - SetQuicReloadableFlag(quic_respect_http2_settings_frame, false); - SpdySettingsIR data; - data.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 0); - SpdySerializedFrame frame(framer_->SerializeFrame(data)); - EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, - "SPDY SETTINGS frame received.", _)) - .WillOnce(InvokeWithoutArgs( - this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); - stream_frame_.data_buffer = frame.data(); - stream_frame_.data_length = frame.size(); - headers_stream_->OnStreamFrame(stream_frame_); -} - TEST_P(QuicHeadersStreamTest, RespectHttp2SettingsFrameSupportedFields) { - SetQuicReloadableFlag(quic_respect_http2_settings_frame, true); SetQuicReloadableFlag(quic_send_max_header_list_size, true); const uint32_t kTestHeaderTableSize = 1000; SpdySettingsIR data; @@ -698,7 +682,6 @@ } TEST_P(QuicHeadersStreamTest, RespectHttp2SettingsFrameUnsupportedFields) { - SetQuicReloadableFlag(quic_respect_http2_settings_frame, true); SetQuicReloadableFlag(quic_send_max_header_list_size, true); SpdySettingsIR data; // Does not support SETTINGS_MAX_CONCURRENT_STREAMS,
diff --git a/net/quic/core/quic_ietf_framer_test.cc b/net/quic/core/quic_ietf_framer_test.cc index 2ade1e06..370f6ff2 100644 --- a/net/quic/core/quic_ietf_framer_test.cc +++ b/net/quic/core/quic_ietf_framer_test.cc
@@ -216,7 +216,7 @@ QuicPathChallengeFrame transmit_frame(0, data); // write the frame to the packet buffer. - EXPECT_TRUE(QuicFramerPeer::AppendIetfPathChallengeFrame( + EXPECT_TRUE(QuicFramerPeer::AppendPathChallengeFrame( &framer_, transmit_frame, &writer)); // Check for correct length in the packet buffer. @@ -232,8 +232,8 @@ QuicPathChallengeFrame receive_frame; - EXPECT_TRUE(QuicFramerPeer::ProcessIetfPathChallengeFrame(&framer_, &reader, - &receive_frame)); + EXPECT_TRUE(QuicFramerPeer::ProcessPathChallengeFrame(&framer_, &reader, + &receive_frame)); // Now check that the received frame matches the sent frame. EXPECT_EQ( @@ -254,7 +254,7 @@ QuicPathResponseFrame transmit_frame(0, data); // Write the frame to the packet buffer. - EXPECT_TRUE(QuicFramerPeer::AppendIetfPathResponseFrame( + EXPECT_TRUE(QuicFramerPeer::AppendPathResponseFrame( &framer_, transmit_frame, &writer)); // Check for correct length in the packet buffer. @@ -270,8 +270,8 @@ QuicPathResponseFrame receive_frame; - EXPECT_TRUE(QuicFramerPeer::ProcessIetfPathResponseFrame(&framer_, &reader, - &receive_frame)); + EXPECT_TRUE(QuicFramerPeer::ProcessPathResponseFrame(&framer_, &reader, + &receive_frame)); // Now check that the received frame matches the sent frame. EXPECT_EQ( @@ -284,7 +284,7 @@ void TryResetFrame(char* packet_buffer, size_t packet_buffer_size, QuicStreamId stream_id, - QuicRstStreamErrorCode error_code, + uint16_t error_code, QuicStreamOffset final_offset) { // Initialize a writer so that the serialized packet is placed in // packet_buffer. @@ -315,7 +315,7 @@ // Now check that the received values match the input. EXPECT_EQ(receive_frame.stream_id, transmit_frame.stream_id); - EXPECT_EQ(receive_frame.error_code, transmit_frame.error_code); + EXPECT_EQ(receive_frame.ietf_error_code, transmit_frame.ietf_error_code); EXPECT_EQ(receive_frame.byte_offset, transmit_frame.byte_offset); } @@ -535,12 +535,12 @@ // empty string, QuicString test_string = "Ich Bin Ein Jelly Donut?"; - QuicConnectionCloseFrame sent_frame; + QuicApplicationCloseFrame sent_frame; sent_frame.error_code = static_cast<QuicErrorCode>(0); sent_frame.error_details = test_string; // write the frame to the packet buffer. - EXPECT_TRUE(QuicFramerPeer::AppendIetfApplicationCloseFrame( - &framer_, sent_frame, &writer)); + EXPECT_TRUE(QuicFramerPeer::AppendApplicationCloseFrame(&framer_, sent_frame, + &writer)); // better have something in the packet buffer. EXPECT_NE(0u, writer.length()); @@ -554,9 +554,9 @@ EXPECT_EQ(received_frame_type, QuicIetfFrameType::IETF_APPLICATION_CLOSE); // a QuicConnectionCloseFrame to hold the results. - QuicConnectionCloseFrame sink_frame; + QuicApplicationCloseFrame sink_frame; - EXPECT_TRUE(QuicFramerPeer::ProcessIetfApplicationCloseFrame( + EXPECT_TRUE(QuicFramerPeer::ProcessApplicationCloseFrame( &framer_, &reader, received_frame_type, &sink_frame)); // Now check that received == sent @@ -614,10 +614,10 @@ char packet_buffer[kNormalPacketBufferSize]; struct resets { QuicStreamId stream_id; - QuicRstStreamErrorCode error_code; + uint16_t error_code; QuicStreamOffset final_offset; } reset_frames[] = { - {0, QUIC_STREAM_NO_ERROR, 0}, {0x10, QUIC_HEADERS_TOO_LARGE, 0x300}, + {0, 55, 0}, {0x10, 73, 0x300}, }; for (auto reset : reset_frames) { TryResetFrame(packet_buffer, sizeof(packet_buffer), reset.stream_id, @@ -638,8 +638,8 @@ transmit_frame.application_error_code = 543; // Write the frame to the packet buffer. - EXPECT_TRUE(QuicFramerPeer::AppendIetfStopSendingFrame( - &framer_, transmit_frame, &writer)); + EXPECT_TRUE(QuicFramerPeer::AppendStopSendingFrame(&framer_, transmit_frame, + &writer)); // Check that the number of bytes in the buffer is in the // allowed range. EXPECT_LE(4u, writer.length()); @@ -655,8 +655,8 @@ // A frame to hold the results QuicStopSendingFrame receive_frame; - EXPECT_TRUE(QuicFramerPeer::ProcessIetfStopSendingFrame(&framer_, &reader, - &receive_frame)); + EXPECT_TRUE(QuicFramerPeer::ProcessStopSendingFrame(&framer_, &reader, + &receive_frame)); // Verify that the transmitted and received values are the same. EXPECT_EQ(receive_frame.stream_id, 12345u); @@ -680,8 +680,8 @@ QuicWindowUpdateFrame transmit_frame(0, 99, window_size); // Add the frame. - EXPECT_TRUE(QuicFramerPeer::AppendIetfMaxDataFrame(&framer_, transmit_frame, - &writer)); + EXPECT_TRUE( + QuicFramerPeer::AppendMaxDataFrame(&framer_, transmit_frame, &writer)); // Check that the number of bytes in the buffer is in the expected range. EXPECT_LE(2u, writer.length()); @@ -697,8 +697,8 @@ EXPECT_EQ(received_frame_type, IETF_MAX_DATA); // Deframe it - EXPECT_TRUE(QuicFramerPeer::ProcessIetfMaxDataFrame(&framer_, &reader, - &receive_frame)); + EXPECT_TRUE( + QuicFramerPeer::ProcessMaxDataFrame(&framer_, &reader, &receive_frame)); // Now check that the received data equals the sent data. EXPECT_EQ(transmit_frame.byte_offset, window_size); @@ -725,7 +725,7 @@ QuicWindowUpdateFrame transmit_frame(0, stream_id, window_size); // Add the frame. - EXPECT_TRUE(QuicFramerPeer::AppendIetfMaxStreamDataFrame( + EXPECT_TRUE(QuicFramerPeer::AppendMaxStreamDataFrame( &framer_, transmit_frame, &writer)); // Check that number of bytes in the buffer is in the expected range. @@ -742,8 +742,8 @@ EXPECT_EQ(received_frame_type, IETF_MAX_STREAM_DATA); // Deframe it - EXPECT_TRUE(QuicFramerPeer::ProcessIetfMaxStreamDataFrame( - &framer_, &reader, &receive_frame)); + EXPECT_TRUE(QuicFramerPeer::ProcessMaxStreamDataFrame(&framer_, &reader, + &receive_frame)); // Now check that received data and sent data are equal. EXPECT_EQ(transmit_frame.byte_offset, window_size); @@ -829,6 +829,7 @@ &receive_frame)); // Check that received and sent data are equivalent + EXPECT_EQ(0u, receive_frame.stream_id); EXPECT_EQ(offset, receive_frame.offset); EXPECT_EQ(transmit_frame.offset, receive_frame.offset); } @@ -852,7 +853,7 @@ QuicBlockedFrame transmit_frame(0, stream_id, offset); // Add the frame. - EXPECT_TRUE(QuicFramerPeer::AppendIetfStreamBlockedFrame( + EXPECT_TRUE(QuicFramerPeer::AppendStreamBlockedFrame( &framer_, transmit_frame, &writer)); // Check that number of bytes in the buffer is in the expected range. @@ -869,8 +870,8 @@ EXPECT_EQ(received_frame_type, IETF_STREAM_BLOCKED); // Deframe it - EXPECT_TRUE(QuicFramerPeer::ProcessIetfStreamBlockedFrame( - &framer_, &reader, &receive_frame)); + EXPECT_TRUE(QuicFramerPeer::ProcessStreamBlockedFrame(&framer_, &reader, + &receive_frame)); // Now check that received == sent EXPECT_EQ(transmit_frame.offset, offset); @@ -921,6 +922,70 @@ } } +TEST_F(QuicIetfFramerTest, NewConnectionIdFrame) { + char packet_buffer[kNormalPacketBufferSize]; + + QuicNewConnectionIdFrame transmit_frame; + transmit_frame.connection_id = 0x0edcba9876543201; + transmit_frame.sequence_number = 0x01020304; + // The token is defined as a uint128 -- a 16-byte integer. + // The value is set in this manner because we want each + // byte to have a specific value so that the binary + // packet check (below) is good. If we used integer + // operations (eg. "token = 0x12345...") then the bytes + // would be set in host order. + unsigned char token_bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f}; + memcpy(&transmit_frame.stateless_reset_token, token_bytes, + sizeof(transmit_frame.stateless_reset_token)); + + memset(packet_buffer, 0, sizeof(packet_buffer)); + + // Set up the writer and transmit QuicStreamIdBlockedFrame + QuicDataWriter writer(sizeof(packet_buffer), packet_buffer, + NETWORK_BYTE_ORDER); + + // Add the frame. + EXPECT_TRUE(QuicFramerPeer::AppendNewConnectionIdFrame( + &framer_, transmit_frame, &writer)); + // Check that buffer length is correct + EXPECT_EQ(29u, writer.length()); + // clang-format off + uint8_t packet[] = { + // frame type + 0x0b, + // sequence number, 0x80 for varint62 encoding + 0x80 + 0x01, 0x02, 0x03, 0x04, + // new connection id, is not varint62 encoded. + 0x0E, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x01, + // the reset token: + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + }; + + // clang-format on + EXPECT_EQ(0, memcmp(packet_buffer, packet, sizeof(packet))); + + // Set up reader and empty receive QuicPaddingFrame. + QuicDataReader reader(packet_buffer, writer.length(), NETWORK_BYTE_ORDER); + QuicNewConnectionIdFrame receive_frame; + + // Read in the frame type + uint8_t received_frame_type; + EXPECT_TRUE(reader.ReadUInt8(&received_frame_type)); + EXPECT_EQ(received_frame_type, IETF_NEW_CONNECTION_ID); + + // Deframe it + EXPECT_TRUE(QuicFramerPeer::ProcessNewConnectionIdFrame(&framer_, &reader, + &receive_frame)); + + // Now check that received == sent + EXPECT_EQ(transmit_frame.connection_id, receive_frame.connection_id); + EXPECT_EQ(transmit_frame.sequence_number, receive_frame.sequence_number); + EXPECT_EQ(transmit_frame.stateless_reset_token, + receive_frame.stateless_reset_token); +} } // namespace } // namespace test } // namespace net
diff --git a/net/quic/core/quic_sent_packet_manager.cc b/net/quic/core/quic_sent_packet_manager.cc index 2e91712..5539f37e 100644 --- a/net/quic/core/quic_sent_packet_manager.cc +++ b/net/quic/core/quic_sent_packet_manager.cc
@@ -391,9 +391,9 @@ QuicPacketNumber packet_number = unacked_packets_.GetLeastUnacked(); for (QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin(); it != unacked_packets_.end(); ++it, ++packet_number) { - if (unacked_packets_.HasRetransmittableFrames(*it) && - (retransmission_type == ALL_UNACKED_RETRANSMISSION || - it->encryption_level == ENCRYPTION_INITIAL)) { + if ((retransmission_type == ALL_UNACKED_RETRANSMISSION || + it->encryption_level == ENCRYPTION_INITIAL) && + unacked_packets_.HasRetransmittableFrames(*it)) { MarkForRetransmission(packet_number, retransmission_type); } } @@ -416,8 +416,8 @@ } for (QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin(); it != unacked_packets_.end(); ++it, ++packet_number) { - if (unacked_packets_.HasRetransmittableFrames(*it) && - it->encryption_level == ENCRYPTION_NONE) { + if (it->encryption_level == ENCRYPTION_NONE && + unacked_packets_.HasRetransmittableFrames(*it)) { // Once you're forward secure, no unencrypted packets will be sent, crypto // or otherwise. Unencrypted packets are neutered and abandoned, to ensure // they are not retransmitted or considered lost from a congestion control @@ -713,8 +713,8 @@ // Only retransmit frames which are in flight, and therefore have been sent. if (!it->in_flight || (session_decides_what_to_write() && it->state != OUTSTANDING) || - !unacked_packets_.HasRetransmittableFrames(*it) || - !it->has_crypto_handshake) { + !it->has_crypto_handshake || + !unacked_packets_.HasRetransmittableFrames(*it)) { continue; } packet_retransmitted = true; @@ -782,8 +782,8 @@ if (session_decides_what_to_write()) { has_retransmissions = it->state != OUTSTANDING; } - if (!unacked_packets_.HasRetransmittableFrames(*it) && it->in_flight && - !has_retransmissions) { + if (it->in_flight && !has_retransmissions && + !unacked_packets_.HasRetransmittableFrames(*it)) { // Log only for non-retransmittable data. // Retransmittable data is marked as lost during loss detection, and will // be logged later. @@ -1123,6 +1123,7 @@ void QuicSentPacketManager::OnAckRange(QuicPacketNumber start, QuicPacketNumber end) { + received_ack_ranges_for_debugging_.AddRange(start, end); if (end > last_ack_frame_.largest_acked + 1) { // Largest acked increases. unacked_packets_.IncreaseLargestObserved(end - 1); @@ -1166,7 +1167,12 @@ if (!QuicUtils::IsAckable(info->state)) { if (info->state == ACKED) { QUIC_BUG << "Trying to ack an already acked packet: " - << acked_packet.packet_number; + << acked_packet.packet_number + << ", last_ack_frame_: " << last_ack_frame_ + << ", least_unacked: " << unacked_packets_.GetLeastUnacked() + << ", packets_acked_: " << packets_acked_ + << ", received_ack_ranges_for_debugging_: " + << received_ack_ranges_for_debugging_; } else { QUIC_PEER_BUG << "Received ack for unackable packet: " << acked_packet.packet_number << " with state: " @@ -1201,6 +1207,8 @@ // last_ack_frame_. last_ack_frame_.packets.RemoveUpTo(unacked_packets_.GetLeastUnacked()); + received_ack_ranges_for_debugging_.Clear(); + return acked_new_packet; }
diff --git a/net/quic/core/quic_sent_packet_manager.h b/net/quic/core/quic_sent_packet_manager.h index 4c916ea..6c44610 100644 --- a/net/quic/core/quic_sent_packet_manager.h +++ b/net/quic/core/quic_sent_packet_manager.h
@@ -507,6 +507,12 @@ // when quic_reloadable_flag_quic_use_incremental_ack_processing3 is true. PacketNumberQueue::const_reverse_iterator acked_packets_iter_; + // Used for debugging purpose. + // TODO(b/78128994): Replace + // quic_reloadable_flag_quic_use_incremental_ack_processing3 with a new flag + // and remove this when the issue is fixed. + PacketNumberQueue received_ack_ranges_for_debugging_; + // Latched value of // quic_reloadable_flag_quic_path_degrading_alarm const bool use_path_degrading_alarm_;
diff --git a/net/quic/core/quic_session.cc b/net/quic/core/quic_session.cc index e0ef736..694f415 100644 --- a/net/quic/core/quic_session.cc +++ b/net/quic/core/quic_session.cc
@@ -984,13 +984,6 @@ void QuicSession::OnAckNeedsRetransmittableFrame() { flow_controller_.SendWindowUpdate(); - if (GetQuicReloadableFlag(quic_remove_redundant_ping)) { - QUIC_FLAG_COUNT(quic_reloadable_flag_quic_remove_redundant_ping); - return; - } - if (!control_frame_manager_.WillingToWrite()) { - SendPing(); - } } void QuicSession::SendPing() {
diff --git a/net/quic/core/quic_spdy_session.cc b/net/quic/core/quic_spdy_session.cc index 9643eb4..822a3fd 100644 --- a/net/quic/core/quic_spdy_session.cc +++ b/net/quic/core/quic_spdy_session.cc
@@ -120,11 +120,6 @@ } void OnSetting(SpdySettingsId id, uint32_t value) override { - if (!GetQuicReloadableFlag(quic_respect_http2_settings_frame)) { - CloseConnection("SPDY SETTINGS frame received.", - QUIC_INVALID_HEADERS_STREAM_DATA); - return; - } switch (id) { case SETTINGS_HEADER_TABLE_SIZE: session_->UpdateHeaderEncoderTableSize(value); @@ -160,19 +155,7 @@ } } - void OnSettingsAck() override { - if (!GetQuicReloadableFlag(quic_respect_http2_settings_frame)) { - CloseConnection("SPDY SETTINGS frame received.", - QUIC_INVALID_HEADERS_STREAM_DATA); - } - } - - void OnSettingsEnd() override { - if (!GetQuicReloadableFlag(quic_respect_http2_settings_frame)) { - CloseConnection("SPDY SETTINGS frame received.", - QUIC_INVALID_HEADERS_STREAM_DATA); - } - } + void OnSettingsEnd() override {} void OnPing(SpdyPingId unique_id, bool is_ack) override { CloseConnection("SPDY PING frame received.",
diff --git a/net/quic/core/quic_stream_send_buffer.cc b/net/quic/core/quic_stream_send_buffer.cc index e1a5426..b1f948e 100644 --- a/net/quic/core/quic_stream_send_buffer.cc +++ b/net/quic/core/quic_stream_send_buffer.cc
@@ -160,12 +160,10 @@ return true; } if (enable_fast_path_on_data_acked_) { - QUIC_FLAG_COUNT(quic_reloadable_flag_quic_fast_path_on_stream_data_acked); bool is_disjoint = false; if (GetQuicReloadableFlag(quic_fast_is_disjoint)) { is_disjoint = bytes_acked_.Empty() || offset >= bytes_acked_.rbegin()->max(); - QUIC_FLAG_COUNT(quic_reloadable_flag_quic_fast_is_disjoint); } if (is_disjoint || bytes_acked_.IsDisjoint(Interval<QuicStreamOffset>( offset, offset + data_length))) {
diff --git a/net/quic/core/quic_trace_visitor.cc b/net/quic/core/quic_trace_visitor.cc index 4486fa4..8c4bbc49 100644 --- a/net/quic/core/quic_trace_visitor.cc +++ b/net/quic/core/quic_trace_visitor.cc
@@ -85,11 +85,10 @@ case NEW_CONNECTION_ID_FRAME: case MAX_STREAM_ID_FRAME: case STREAM_ID_BLOCKED_FRAME: - /* case PATH_RESPONSE_FRAME: case PATH_CHALLENGE_FRAME: case STOP_SENDING_FRAME: - */ + break; // Ignore gQUIC-specific frames. @@ -204,11 +203,9 @@ case NEW_CONNECTION_ID_FRAME: case MAX_STREAM_ID_FRAME: case STREAM_ID_BLOCKED_FRAME: - /* case PATH_RESPONSE_FRAME: case PATH_CHALLENGE_FRAME: case STOP_SENDING_FRAME: - */ break; case NUM_FRAME_TYPES:
diff --git a/net/quic/core/quic_types.cc b/net/quic/core/quic_types.cc index 4167c94..bce954ab 100644 --- a/net/quic/core/quic_types.cc +++ b/net/quic/core/quic_types.cc
@@ -24,6 +24,13 @@ return os; } +std::ostream& operator<<(std::ostream& os, const AckedPacket& acked_packet) { + os << "{ packet_number: " << acked_packet.packet_number + << ", bytes_acked: " << acked_packet.bytes_acked << ", receive_timestamp: " + << acked_packet.receive_timestamp.ToDebuggingValue() << "} "; + return os; +} + WriteResult::WriteResult() : status(WRITE_STATUS_ERROR), bytes_written(0) {} WriteResult::WriteResult(WriteStatus status, int bytes_written_or_error_code)
diff --git a/net/quic/core/quic_types.h b/net/quic/core/quic_types.h index 40b2436..a91abbd 100644 --- a/net/quic/core/quic_types.h +++ b/net/quic/core/quic_types.h
@@ -161,6 +161,9 @@ NEW_CONNECTION_ID_FRAME, MAX_STREAM_ID_FRAME, STREAM_ID_BLOCKED_FRAME, + PATH_RESPONSE_FRAME, + PATH_CHALLENGE_FRAME, + STOP_SENDING_FRAME, NUM_FRAME_TYPES }; @@ -369,6 +372,10 @@ bytes_acked(bytes_acked), receive_timestamp(receive_timestamp) {} + friend QUIC_EXPORT_PRIVATE std::ostream& operator<<( + std::ostream& os, + const AckedPacket& acked_packet); + QuicPacketNumber packet_number; // Number of bytes sent in the packet that was acknowledged. QuicPacketLength bytes_acked;
diff --git a/net/quic/platform/impl/quic_logging_impl.h b/net/quic/platform/impl/quic_logging_impl.h index fb9add3..1ba87ab1 100644 --- a/net/quic/platform/impl/quic_logging_impl.h +++ b/net/quic/platform/impl/quic_logging_impl.h
@@ -6,6 +6,7 @@ #define NET_QUIC_PLATFORM_IMPL_QUIC_LOGGING_IMPL_H_ #include "base/logging.h" +#include "net/base/net_export.h" #define QUIC_LOG_IMPL(severity) QUIC_CHROMIUM_LOG_##severity #define QUIC_VLOG_IMPL(verbose_level) VLOG(verbose_level) @@ -62,4 +63,18 @@ #define QUIC_PLOG_IMPL(severity) DVLOG(1) +namespace net { +template <typename T> +NET_EXPORT_PRIVATE inline std::ostream& operator<<(std::ostream& out, + const std::vector<T>& v) { + out << "["; + const char* sep = ""; + for (size_t i = 0; i < v.size(); ++i) { + out << sep << v[i]; + sep = ", "; + } + return out << "]"; +} +} // namespace net + #endif // NET_QUIC_PLATFORM_IMPL_QUIC_LOGGING_IMPL_H_
diff --git a/net/quic/test_tools/quic_framer_peer.cc b/net/quic/test_tools/quic_framer_peer.cc index bafae5b..e0c2603 100644 --- a/net/quic/test_tools/quic_framer_peer.cc +++ b/net/quic/test_tools/quic_framer_peer.cc
@@ -82,11 +82,11 @@ } // static -bool QuicFramerPeer::AppendIetfApplicationCloseFrame( +bool QuicFramerPeer::AppendApplicationCloseFrame( QuicFramer* framer, - const QuicConnectionCloseFrame& frame, + const QuicApplicationCloseFrame& frame, QuicDataWriter* writer) { - return framer->AppendIetfApplicationCloseFrame(frame, writer); + return framer->AppendApplicationCloseFrame(frame, writer); } // static @@ -99,44 +99,41 @@ } // static -bool QuicFramerPeer::ProcessIetfApplicationCloseFrame( +bool QuicFramerPeer::ProcessApplicationCloseFrame( QuicFramer* framer, QuicDataReader* reader, const uint8_t frame_type, - QuicConnectionCloseFrame* frame) { - return framer->ProcessIetfApplicationCloseFrame(reader, frame_type, frame); + QuicApplicationCloseFrame* frame) { + return framer->ProcessApplicationCloseFrame(reader, frame_type, frame); } // static -bool QuicFramerPeer::ProcessIetfPathChallengeFrame( - QuicFramer* framer, - QuicDataReader* reader, - QuicPathChallengeFrame* frame) { - return framer->ProcessIetfPathChallengeFrame(reader, frame); +bool QuicFramerPeer::ProcessPathChallengeFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicPathChallengeFrame* frame) { + return framer->ProcessPathChallengeFrame(reader, frame); } // static -bool QuicFramerPeer::ProcessIetfPathResponseFrame( - QuicFramer* framer, - QuicDataReader* reader, - QuicPathResponseFrame* frame) { - return framer->ProcessIetfPathResponseFrame(reader, frame); +bool QuicFramerPeer::ProcessPathResponseFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicPathResponseFrame* frame) { + return framer->ProcessPathResponseFrame(reader, frame); } // static -bool QuicFramerPeer::AppendIetfPathChallengeFrame( +bool QuicFramerPeer::AppendPathChallengeFrame( QuicFramer* framer, const QuicPathChallengeFrame& frame, QuicDataWriter* writer) { - return framer->AppendIetfPathChallengeFrame(frame, writer); + return framer->AppendPathChallengeFrame(frame, writer); } // static -bool QuicFramerPeer::AppendIetfPathResponseFrame( - QuicFramer* framer, - const QuicPathResponseFrame& frame, - QuicDataWriter* writer) { - return framer->AppendIetfPathResponseFrame(frame, writer); +bool QuicFramerPeer::AppendPathResponseFrame(QuicFramer* framer, + const QuicPathResponseFrame& frame, + QuicDataWriter* writer) { + return framer->AppendPathResponseFrame(frame, writer); } // static @@ -154,51 +151,48 @@ } // static -bool QuicFramerPeer::ProcessIetfStopSendingFrame( +bool QuicFramerPeer::ProcessStopSendingFrame( QuicFramer* framer, QuicDataReader* reader, QuicStopSendingFrame* stop_sending_frame) { - return framer->ProcessIetfStopSendingFrame(reader, stop_sending_frame); + return framer->ProcessStopSendingFrame(reader, stop_sending_frame); } // static -bool QuicFramerPeer::AppendIetfStopSendingFrame( +bool QuicFramerPeer::AppendStopSendingFrame( QuicFramer* framer, const QuicStopSendingFrame& stop_sending_frame, QuicDataWriter* writer) { - return framer->AppendIetfStopSendingFrame(stop_sending_frame, writer); -} - -// Append/consume IETF-Format MAX_DATA and MAX_STREAM_DATA frames -// static -// static -bool QuicFramerPeer::AppendIetfMaxDataFrame(QuicFramer* framer, - const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer) { - return framer->AppendIetfMaxDataFrame(frame, writer); + return framer->AppendStopSendingFrame(stop_sending_frame, writer); } // static -bool QuicFramerPeer::AppendIetfMaxStreamDataFrame( +bool QuicFramerPeer::AppendMaxDataFrame(QuicFramer* framer, + const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer) { + return framer->AppendMaxDataFrame(frame, writer); +} + +// static +bool QuicFramerPeer::AppendMaxStreamDataFrame( QuicFramer* framer, const QuicWindowUpdateFrame& frame, QuicDataWriter* writer) { - return framer->AppendIetfMaxStreamDataFrame(frame, writer); + return framer->AppendMaxStreamDataFrame(frame, writer); } // static -bool QuicFramerPeer::ProcessIetfMaxDataFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicWindowUpdateFrame* frame) { - return framer->ProcessIetfMaxDataFrame(reader, frame); +bool QuicFramerPeer::ProcessMaxDataFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicWindowUpdateFrame* frame) { + return framer->ProcessMaxDataFrame(reader, frame); } // static -bool QuicFramerPeer::ProcessIetfMaxStreamDataFrame( - QuicFramer* framer, - QuicDataReader* reader, - QuicWindowUpdateFrame* frame) { - return framer->ProcessIetfMaxStreamDataFrame(reader, frame); +bool QuicFramerPeer::ProcessMaxStreamDataFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicWindowUpdateFrame* frame) { + return framer->ProcessMaxStreamDataFrame(reader, frame); } // static @@ -230,17 +224,17 @@ } // static -bool QuicFramerPeer::AppendIetfStreamBlockedFrame(QuicFramer* framer, - const QuicBlockedFrame& frame, - QuicDataWriter* writer) { - return framer->AppendIetfStreamBlockedFrame(frame, writer); +bool QuicFramerPeer::AppendStreamBlockedFrame(QuicFramer* framer, + const QuicBlockedFrame& frame, + QuicDataWriter* writer) { + return framer->AppendStreamBlockedFrame(frame, writer); } // static -bool QuicFramerPeer::ProcessIetfStreamBlockedFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicBlockedFrame* frame) { - return framer->ProcessIetfStreamBlockedFrame(reader, frame); +bool QuicFramerPeer::ProcessStreamBlockedFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicBlockedFrame* frame) { + return framer->ProcessStreamBlockedFrame(reader, frame); } // static @@ -260,6 +254,22 @@ } // static +bool QuicFramerPeer::AppendNewConnectionIdFrame( + QuicFramer* framer, + const QuicNewConnectionIdFrame& frame, + QuicDataWriter* writer) { + return framer->AppendNewConnectionIdFrame(frame, writer); +} + +// static +bool QuicFramerPeer::ProcessNewConnectionIdFrame( + QuicFramer* framer, + QuicDataReader* reader, + QuicNewConnectionIdFrame* frame) { + return framer->ProcessNewConnectionIdFrame(reader, frame); +} + +// static void QuicFramerPeer::SwapCrypters(QuicFramer* framer1, QuicFramer* framer2) { for (int i = ENCRYPTION_NONE; i < NUM_ENCRYPTION_LEVELS; i++) { framer1->encrypter_[i].swap(framer2->encrypter_[i]);
diff --git a/net/quic/test_tools/quic_framer_peer.h b/net/quic/test_tools/quic_framer_peer.h index 041960b..9c2d639 100644 --- a/net/quic/test_tools/quic_framer_peer.h +++ b/net/quic/test_tools/quic_framer_peer.h
@@ -50,18 +50,18 @@ QuicFramer* framer, const QuicConnectionCloseFrame& frame, QuicDataWriter* writer); - static bool AppendIetfApplicationCloseFrame( + static bool AppendApplicationCloseFrame( QuicFramer* framer, - const QuicConnectionCloseFrame& frame, + const QuicApplicationCloseFrame& frame, QuicDataWriter* writer); static bool ProcessIetfConnectionCloseFrame(QuicFramer* framer, QuicDataReader* reader, const uint8_t frame_type, QuicConnectionCloseFrame* frame); - static bool ProcessIetfApplicationCloseFrame(QuicFramer* framer, - QuicDataReader* reader, - const uint8_t frame_type, - QuicConnectionCloseFrame* frame); + static bool ProcessApplicationCloseFrame(QuicFramer* framer, + QuicDataReader* reader, + const uint8_t frame_type, + QuicApplicationCloseFrame* frame); static bool ProcessIetfAckFrame(QuicFramer* framer, QuicDataReader* reader, uint8_t frame_type, @@ -76,42 +76,41 @@ QuicDataReader* reader, QuicRstStreamFrame* frame); - static bool ProcessIetfPathChallengeFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicPathChallengeFrame* frame); - static bool ProcessIetfPathResponseFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicPathResponseFrame* frame); + static bool ProcessPathChallengeFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicPathChallengeFrame* frame); + static bool ProcessPathResponseFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicPathResponseFrame* frame); - static bool AppendIetfPathChallengeFrame(QuicFramer* framer, - const QuicPathChallengeFrame& frame, - QuicDataWriter* writer); - static bool AppendIetfPathResponseFrame(QuicFramer* framer, - const QuicPathResponseFrame& frame, - QuicDataWriter* writer); + static bool AppendPathChallengeFrame(QuicFramer* framer, + const QuicPathChallengeFrame& frame, + QuicDataWriter* writer); + static bool AppendPathResponseFrame(QuicFramer* framer, + const QuicPathResponseFrame& frame, + QuicDataWriter* writer); - static bool ProcessIetfStopSendingFrame( - QuicFramer* framer, - QuicDataReader* reader, - QuicStopSendingFrame* stop_sending_frame); - static bool AppendIetfStopSendingFrame( + static bool ProcessStopSendingFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicStopSendingFrame* stop_sending_frame); + static bool AppendStopSendingFrame( QuicFramer* framer, const QuicStopSendingFrame& stop_sending_frame, QuicDataWriter* writer); // Append/consume IETF-Format MAX_DATA and MAX_STREAM_DATA frames - static bool AppendIetfMaxDataFrame(QuicFramer* framer, - const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer); - static bool AppendIetfMaxStreamDataFrame(QuicFramer* framer, - const QuicWindowUpdateFrame& frame, - QuicDataWriter* writer); - static bool ProcessIetfMaxDataFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicWindowUpdateFrame* frame); - static bool ProcessIetfMaxStreamDataFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicWindowUpdateFrame* frame); + static bool AppendMaxDataFrame(QuicFramer* framer, + const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer); + static bool AppendMaxStreamDataFrame(QuicFramer* framer, + const QuicWindowUpdateFrame& frame, + QuicDataWriter* writer); + static bool ProcessMaxDataFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicWindowUpdateFrame* frame); + static bool ProcessMaxStreamDataFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicWindowUpdateFrame* frame); static bool AppendMaxStreamIdFrame(QuicFramer* framer, const QuicMaxStreamIdFrame& frame, QuicDataWriter* writer); @@ -125,12 +124,12 @@ QuicDataReader* reader, QuicBlockedFrame* frame); - static bool AppendIetfStreamBlockedFrame(QuicFramer* framer, - const QuicBlockedFrame& frame, - QuicDataWriter* writer); - static bool ProcessIetfStreamBlockedFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicBlockedFrame* frame); + static bool AppendStreamBlockedFrame(QuicFramer* framer, + const QuicBlockedFrame& frame, + QuicDataWriter* writer); + static bool ProcessStreamBlockedFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicBlockedFrame* frame); static bool AppendStreamIdBlockedFrame(QuicFramer* framer, const QuicStreamIdBlockedFrame& frame, @@ -139,6 +138,13 @@ QuicDataReader* reader, QuicStreamIdBlockedFrame* frame); + static bool AppendNewConnectionIdFrame(QuicFramer* framer, + const QuicNewConnectionIdFrame& frame, + QuicDataWriter* writer); + static bool ProcessNewConnectionIdFrame(QuicFramer* framer, + QuicDataReader* reader, + QuicNewConnectionIdFrame* frame); + private: DISALLOW_COPY_AND_ASSIGN(QuicFramerPeer); };
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc index 7036d6c..a6f7ab9 100644 --- a/net/tools/quic/end_to_end_test.cc +++ b/net/tools/quic/end_to_end_test.cc
@@ -367,12 +367,19 @@ server_config_.SetInitialSessionFlowControlWindowToSend(window); } - const QuicSentPacketManager* GetSentPacketManagerFromFirstServerSession() - const { + const QuicSentPacketManager* GetSentPacketManagerFromFirstServerSession() { + return &GetServerConnection()->sent_packet_manager(); + } + + QuicConnection* GetServerConnection() { + return GetServerSession()->connection(); + } + + QuicSession* GetServerSession() { QuicDispatcher* dispatcher = QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); - return &session->connection()->sent_packet_manager(); + EXPECT_EQ(1u, dispatcher->session_map().size()); + return dispatcher->session_map().begin()->second.get(); } bool Initialize() { @@ -537,11 +544,7 @@ client_->client()->num_stateless_rejects_received()); server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - ASSERT_EQ(1u, dispatcher->session_map().size()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); - QuicConnectionStats server_stats = session->connection()->GetStats(); + QuicConnectionStats server_stats = GetServerConnection()->GetStats(); if (!had_packet_loss) { EXPECT_EQ(0u, server_stats.packets_lost); } @@ -632,10 +635,7 @@ QuicStreamSequencer* sequencer = QuicStreamPeer::sequencer(crypto_stream); EXPECT_FALSE(QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* server_session = dispatcher->session_map().begin()->second.get(); - crypto_stream = QuicSessionPeer::GetMutableCryptoStream(server_session); + crypto_stream = QuicSessionPeer::GetMutableCryptoStream(GetServerSession()); sequencer = QuicStreamPeer::sequencer(crypto_stream); EXPECT_FALSE(QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); } @@ -1326,11 +1326,8 @@ EXPECT_EQ(kServerMaxIncomingDynamicStreams, client_->client()->client_session()->max_open_outgoing_streams()); server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* server_session = dispatcher->session_map().begin()->second.get(); EXPECT_EQ(kClientMaxIncomingDynamicStreams, - server_session->max_open_outgoing_streams()); + GetServerSession()->max_open_outgoing_streams()); server_thread_->Resume(); } @@ -1406,10 +1403,6 @@ // Pause the server so we can access the server's internals without races. server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - ASSERT_EQ(1u, dispatcher->session_map().size()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); const QuicSentPacketManager& client_sent_packet_manager = client_->client()->client_session()->connection()->sent_packet_manager(); @@ -1418,7 +1411,7 @@ EXPECT_FALSE( client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite()); const RttStats& server_rtt_stats = - *session->connection()->sent_packet_manager().GetRttStats(); + *GetServerConnection()->sent_packet_manager().GetRttStats(); EXPECT_EQ(static_cast<int64_t>(kMaxInitialRoundTripTimeUs), server_rtt_stats.initial_rtt().ToMicroseconds()); EXPECT_GE(static_cast<int64_t>(kMaxInitialRoundTripTimeUs), @@ -1436,14 +1429,10 @@ // Pause the server so we can access the server's internals without races. server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - ASSERT_EQ(1u, dispatcher->session_map().size()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); const QuicSentPacketManager& client_sent_packet_manager = client_->client()->client_session()->connection()->sent_packet_manager(); const QuicSentPacketManager& server_sent_packet_manager = - session->connection()->sent_packet_manager(); + GetServerConnection()->sent_packet_manager(); // Now that acks have been exchanged, the RTT estimate has decreased on the // server and is not infinite on the client. @@ -1647,12 +1636,8 @@ server_thread_->WaitForCryptoHandshakeConfirmed(); server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); - QuicConnection* server_connection = session->connection(); QuicPacketCount cwnd = - server_connection->sent_packet_manager().initial_congestion_window(); + GetServerConnection()->sent_packet_manager().initial_congestion_window(); EXPECT_EQ(3u, cwnd); } @@ -1699,9 +1684,7 @@ // Server should have the right values for client's receive window. server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); + QuicSession* session = GetServerSession(); EXPECT_EQ(kClientStreamIFCW, session->config()->ReceivedInitialStreamFlowControlWindowBytes()); EXPECT_EQ(kClientSessionIFCW, @@ -1799,9 +1782,7 @@ // Server should be in a similar state: connection flow control window should // not have any bytes marked as received. server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); + QuicSession* session = GetServerSession(); QuicFlowController* server_connection_flow_controller = session->flow_controller(); EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::ReceiveWindowSize( @@ -1819,10 +1800,7 @@ server_thread_->Pause(); QuicSpdySession* const client_session = client_->client()->client_session(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - auto* server_session = static_cast<QuicSpdySession*>( - dispatcher->session_map().begin()->second.get()); + auto* server_session = static_cast<QuicSpdySession*>(GetServerSession()); ExpectFlowControlsSynced(client_session->flow_controller(), server_session->flow_controller()); ExpectFlowControlsSynced( @@ -1896,9 +1874,7 @@ // Now verify that the server is not waiting for a final FIN or RST. server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); + QuicSession* session = GetServerSession(); EXPECT_EQ( 0u, QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(session).size()); @@ -2832,11 +2808,7 @@ // Check server session to see if it has max number of outgoing streams opened // though more resources need to be pushed. server_thread_->Pause(); - QuicDispatcher* dispatcher = - QuicServerPeer::GetDispatcher(server_thread_->server()); - ASSERT_EQ(1u, dispatcher->session_map().size()); - QuicSession* session = dispatcher->session_map().begin()->second.get(); - EXPECT_EQ(kNumMaxStreams, session->GetNumOpenOutgoingStreams()); + EXPECT_EQ(kNumMaxStreams, GetServerSession()->GetNumOpenOutgoingStreams()); server_thread_->Resume(); EXPECT_EQ(1u, client_->num_requests()); @@ -3012,13 +2984,7 @@ client_->Disconnect(); if (version > QUIC_VERSION_38) { EXPECT_LT(0u, observer.num_window_update_frames()); - if (GetQuicReloadableFlag(quic_remove_redundant_ping)) { - EXPECT_EQ(0u, observer.num_ping_frames()); - } else { - // A redundant PING frame is bundled with each WINDOW_UPDATE frame. - EXPECT_EQ(observer.num_window_update_frames(), - observer.num_ping_frames()); - } + EXPECT_EQ(0u, observer.num_ping_frames()); } else { EXPECT_EQ(0u, observer.num_window_update_frames()); } @@ -3073,7 +3039,7 @@ client_->WaitForDelayedAcks(); } -class EndToEndBufferedPacketsTest : public EndToEndTest { +class EndToEndPacketReorderingTest : public EndToEndTest { public: void CreateClientWithWriter() override { QUIC_LOG(ERROR) << "create client with reorder_writer_ "; @@ -3090,11 +3056,57 @@ PacketReorderingWriter* reorder_writer_; }; -INSTANTIATE_TEST_CASE_P(EndToEndBufferedPacketsTests, - EndToEndBufferedPacketsTest, +INSTANTIATE_TEST_CASE_P(EndToEndPacketReorderingTests, + EndToEndPacketReorderingTest, testing::ValuesIn(GetTestParams(false))); -TEST_P(EndToEndBufferedPacketsTest, Buffer0RttRequest) { +TEST_P(EndToEndPacketReorderingTest, ReorderedConnectivityProbing) { + ASSERT_TRUE(Initialize()); + + // Finish one request to make sure handshake established. + EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); + + // Wait for the connection to become idle, to make sure the packet gets + // delayed is the connectivity probing packet. + client_->WaitForDelayedAcks(); + + QuicSocketAddress old_addr = + client_->client()->network_helper()->GetLatestClientAddress(); + + // Migrate socket to the new IP address. + QuicIpAddress new_host = TestLoopback(2); + EXPECT_NE(old_addr.host(), new_host); + ASSERT_TRUE(client_->client()->MigrateSocket(new_host)); + + // Write a connectivity probing after the next /foo request. + reorder_writer_->SetDelay(1); + client_->SendConnectivityProbing(); + + ASSERT_TRUE(client_->MigrateSocketWithSpecifiedPort(old_addr.host(), + old_addr.port())); + + // The (delayed) connectivity probing will be sent after this request. + EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); + + // Send yet another request after the connectivity probing, when this request + // returns, the probing is guaranteed to have been received by the server, and + // the server's response to probing is guaranteed to have been received by the + // client. + EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); + + server_thread_->Pause(); + QuicConnection* server_connection = GetServerConnection(); + EXPECT_EQ(1u, + server_connection->GetStats().num_connectivity_probing_received); + server_thread_->Resume(); + + QuicConnection* client_connection = + client_->client()->client_session()->connection(); + EXPECT_EQ(1u, + client_connection->GetStats().num_connectivity_probing_received); +} + +TEST_P(EndToEndPacketReorderingTest, Buffer0RttRequest) { ASSERT_TRUE(Initialize()); // Finish one request to make sure handshake established. client_->SendSynchronousRequest("/foo");
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc index 5a8d3247..478a03c 100644 --- a/pdf/pdfium/pdfium_engine.cc +++ b/pdf/pdfium/pdfium_engine.cc
@@ -1329,28 +1329,28 @@ pp::ImageData(client_->GetPluginInstance(), PP_IMAGEDATAFORMAT_BGRA_PREMUL, bitmap_size, false); - FPDF_BITMAP bitmap = + ScopedFPDFBitmap bitmap( FPDFBitmap_CreateEx(bitmap_size.width(), bitmap_size.height(), - FPDFBitmap_BGRx, image.data(), image.stride()); + FPDFBitmap_BGRx, image.data(), image.stride())); // Clear the bitmap - FPDFBitmap_FillRect(bitmap, 0, 0, bitmap_size.width(), bitmap_size.height(), - 0xFFFFFFFF); + FPDFBitmap_FillRect(bitmap.get(), 0, 0, bitmap_size.width(), + bitmap_size.height(), 0xFFFFFFFF); pp::Rect page_rect = page_to_print->rect(); - FPDF_RenderPageBitmap(bitmap, page_to_print->GetPrintPage(), page_rect.x(), - page_rect.y(), page_rect.width(), page_rect.height(), - print_settings.orientation, + FPDF_RenderPageBitmap(bitmap.get(), page_to_print->GetPrintPage(), + page_rect.x(), page_rect.y(), page_rect.width(), + page_rect.height(), print_settings.orientation, FPDF_PRINTING | FPDF_NO_CATCH); // Draw the forms. - FPDF_FFLDraw(form_, bitmap, page_to_print->GetPrintPage(), page_rect.x(), - page_rect.y(), page_rect.width(), page_rect.height(), - print_settings.orientation, + FPDF_FFLDraw(form_, bitmap.get(), page_to_print->GetPrintPage(), + page_rect.x(), page_rect.y(), page_rect.width(), + page_rect.height(), print_settings.orientation, FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH); unsigned char* bitmap_data = - static_cast<unsigned char*>(FPDFBitmap_GetBuffer(bitmap)); + static_cast<unsigned char*>(FPDFBitmap_GetBuffer(bitmap.get())); double ratio_x = ConvertUnitDouble(bitmap_size.width(), print_settings.dpi, kPointsPerInch); double ratio_y = ConvertUnitDouble(bitmap_size.height(), print_settings.dpi, @@ -1368,9 +1368,9 @@ // a higher quality setting. const int kQuality = 40; SkImageInfo info = SkImageInfo::Make( - FPDFBitmap_GetWidth(bitmap), FPDFBitmap_GetHeight(bitmap), + FPDFBitmap_GetWidth(bitmap.get()), FPDFBitmap_GetHeight(bitmap.get()), kBGRA_8888_SkColorType, kOpaque_SkAlphaType); - SkPixmap src(info, bitmap_data, FPDFBitmap_GetStride(bitmap)); + SkPixmap src(info, bitmap_data, FPDFBitmap_GetStride(bitmap.get())); encoded = gfx::JPEGCodec::Encode(src, kQuality, &compressed_bitmap_data); } @@ -1387,7 +1387,7 @@ FPDFImageObj_LoadJpegFileInline(&temp_page, 1, temp_img, &file_access); } else { - FPDFImageObj_SetBitmap(&temp_page, 1, temp_img, bitmap); + FPDFImageObj_SetBitmap(&temp_page, 1, temp_img, bitmap.get()); } FPDFImageObj_SetMatrix(temp_img, ratio_x, 0, 0, ratio_y, 0, 0); @@ -1396,8 +1396,6 @@ } page_to_print->ClosePrintPage(); - FPDFBitmap_Destroy(bitmap); - return temp_doc; } @@ -1412,7 +1410,7 @@ if (doc_ && !doc_loader_->IsDocumentComplete()) return pp::Buffer_Dev(); - FPDF_DOCUMENT output_doc = FPDF_CreateNewDocument(); + ScopedFPDFDocument output_doc(FPDF_CreateNewDocument()); if (!output_doc) return pp::Buffer_Dev(); @@ -1425,9 +1423,9 @@ std::vector<uint32_t> page_numbers = GetPageNumbersFromPrintPageNumberRange(page_ranges, page_range_count); for (uint32_t page_number : page_numbers) { - FPDF_PAGE pdf_page = FPDF_LoadPage(doc_, page_number); - double source_page_width = FPDF_GetPageWidth(pdf_page); - double source_page_height = FPDF_GetPageHeight(pdf_page); + ScopedFPDFPage pdf_page(FPDF_LoadPage(doc_, page_number)); + double source_page_width = FPDF_GetPageWidth(pdf_page.get()); + double source_page_height = FPDF_GetPageHeight(pdf_page.get()); source_page_sizes.push_back( std::make_pair(source_page_width, source_page_height)); // For computing size in pixels, use a square dpi since the source PDF page @@ -1439,7 +1437,6 @@ pp::Rect rect(width_in_pixels, height_in_pixels); pages_to_print.push_back(PDFiumPage(this, page_number, rect, true)); - FPDF_ClosePage(pdf_page); } #if defined(OS_LINUX) @@ -1451,38 +1448,36 @@ double source_page_width = source_page_sizes[i].first; double source_page_height = source_page_sizes[i].second; - // Use temp_doc to compress image by saving PDF to buffer. - FPDF_DOCUMENT temp_doc = - CreateSinglePageRasterPdf(source_page_width, source_page_height, - print_settings, &pages_to_print[i]); + // Use |temp_doc| to compress image by saving PDF to |buffer|. + pp::Buffer_Dev buffer; + { + ScopedFPDFDocument temp_doc( + CreateSinglePageRasterPdf(source_page_width, source_page_height, + print_settings, &pages_to_print[i])); - if (!temp_doc) - break; + if (!temp_doc) + break; - pp::Buffer_Dev buffer = GetFlattenedPrintData(temp_doc); - FPDF_CloseDocument(temp_doc); + buffer = GetFlattenedPrintData(temp_doc.get()); + } PDFiumMemBufferFileRead file_read(buffer.data(), buffer.size()); - temp_doc = FPDF_LoadCustomDocument(&file_read, nullptr); - - FPDF_BOOL imported = FPDF_ImportPages(output_doc, temp_doc, "1", i); - FPDF_CloseDocument(temp_doc); - if (!imported) + ScopedFPDFDocument temp_doc(FPDF_LoadCustomDocument(&file_read, nullptr)); + if (!FPDF_ImportPages(output_doc.get(), temp_doc.get(), "1", i)) break; } pp::Buffer_Dev buffer; if (i == pages_to_print.size()) { - FPDF_CopyViewerPreferences(output_doc, doc_); + FPDF_CopyViewerPreferences(output_doc.get(), doc_); if (ShouldDoNup(print_settings.num_pages_per_sheet)) { - buffer = NupPdfToPdf(output_doc, print_settings); + buffer = NupPdfToPdf(output_doc.get(), print_settings); } else { - FitContentsToPrintableAreaIfRequired(output_doc, print_settings); - buffer = GetPrintData(output_doc); + FitContentsToPrintableAreaIfRequired(output_doc.get(), print_settings); + buffer = GetPrintData(output_doc.get()); } } - FPDF_CloseDocument(output_doc); return buffer; } @@ -1492,11 +1487,9 @@ ScopedSubstFont scoped_subst_font(this); int page_count = FPDF_GetPageCount(doc); for (int i = 0; i < page_count; ++i) { - FPDF_PAGE page = FPDF_LoadPage(doc, i); + ScopedFPDFPage page(FPDF_LoadPage(doc, i)); DCHECK(page); - int flatten_ret = FPDFPage_Flatten(page, FLAT_PRINT); - FPDF_ClosePage(page); - if (flatten_ret == FLATTEN_FAIL) + if (FPDFPage_Flatten(page.get(), FLAT_PRINT) == FLATTEN_FAIL) return false; } return true; @@ -1617,9 +1610,8 @@ // transformed document from the source document. Therefore, transform // every page to fit the contents in the selected printer paper. for (int i = 0; i < num_pages; ++i) { - FPDF_PAGE page = FPDF_LoadPage(doc, i); - TransformPDFPageForPrinting(page, print_settings); - FPDF_ClosePage(page); + ScopedFPDFPage page(FPDF_LoadPage(doc, i)); + TransformPDFPageForPrinting(page.get(), print_settings); } } } @@ -2929,10 +2921,11 @@ ConvertUnitDouble(page_rect.width(), kPixelsPerInch, kPointsPerInch); double height_in_points = ConvertUnitDouble(page_rect.height(), kPixelsPerInch, kPointsPerInch); - // Add a new page to the document, but delete the FPDF_PAGE object. - FPDF_PAGE temp_page = - FPDFPage_New(doc_, i, width_in_points, height_in_points); - FPDF_ClosePage(temp_page); + { + // Add a new page to the document, but delete the FPDF_PAGE object. + ScopedFPDFPage temp_page( + FPDFPage_New(doc_, i, width_in_points, height_in_points)); + } pages_.push_back(std::make_unique<PDFiumPage>(this, i, page_rect, true)); } @@ -3328,7 +3321,10 @@ int page_index = progressive_paints_[progressive_index].page_index; const pp::Rect& dirty_in_screen = progressive_paints_[progressive_index].rect; FPDF_BITMAP bitmap = progressive_paints_[progressive_index].bitmap; - int start_x, start_y, size_x, size_y; + int start_x; + int start_y; + int size_x; + int size_y; GetPDFiumRect(page_index, dirty_in_screen, &start_x, &start_y, &size_x, &size_y); @@ -3479,17 +3475,19 @@ void PDFiumEngine::PaintUnavailablePage(int page_index, const pp::Rect& dirty, pp::ImageData* image_data) { - int start_x, start_y, size_x, size_y; + int start_x; + int start_y; + int size_x; + int size_y; GetPDFiumRect(page_index, dirty, &start_x, &start_y, &size_x, &size_y); - FPDF_BITMAP bitmap = CreateBitmap(dirty, image_data); - FPDFBitmap_FillRect(bitmap, start_x, start_y, size_x, size_y, + ScopedFPDFBitmap bitmap(CreateBitmap(dirty, image_data)); + FPDFBitmap_FillRect(bitmap.get(), start_x, start_y, size_x, size_y, kPendingPageColor); pp::Rect loading_text_in_screen( pages_[page_index]->rect().width() / 2, pages_[page_index]->rect().y() + kLoadingTextVerticalOffset, 0, 0); loading_text_in_screen = GetScreenRect(loading_text_in_screen); - FPDFBitmap_Destroy(bitmap); } int PDFiumEngine::GetProgressiveIndex(int page_index) const { @@ -4009,16 +4007,13 @@ form_type == FPDF_FORMFIELD_XFA_COMBOBOX; #endif // defined(PDF_ENABLE_XFA) - FPDF_ANNOTATION annot = - FPDFAnnot_GetFormFieldAtPoint(form_, page, page_x, page_y); + ScopedFPDFAnnotation annot( + FPDFAnnot_GetFormFieldAtPoint(form_, page, page_x, page_y)); if (!annot) return false; - int flags = FPDFAnnot_GetFormFieldFlags(page, annot); - bool is_editable_form_text_area = - CheckIfEditableFormTextArea(flags, form_type); - FPDFPage_CloseAnnot(annot); - return is_editable_form_text_area; + int flags = FPDFAnnot_GetFormFieldFlags(page, annot.get()); + return CheckIfEditableFormTextArea(flags, form_type); } void PDFiumEngine::ScheduleTouchTimer(const pp::TouchInputEvent& evt) {
diff --git a/pdf/pdfium/pdfium_page.cc b/pdf/pdfium/pdfium_page.cc index 31636f93..b224e0fd 100644 --- a/pdf/pdfium/pdfium_page.cc +++ b/pdf/pdfium/pdfium_page.cc
@@ -19,6 +19,7 @@ #include "pdf/pdfium/pdfium_api_string_buffer_adapter.h" #include "pdf/pdfium/pdfium_engine.h" #include "printing/units.h" +#include "third_party/pdfium/public/cpp/fpdf_scopers.h" #include "third_party/pdfium/public/fpdf_annot.h" using printing::ConvertUnitDouble; @@ -602,10 +603,9 @@ page_features_.index = index_; int annotation_count = FPDFPage_GetAnnotCount(page); for (int i = 0; i < annotation_count; ++i) { - FPDF_ANNOTATION annotation = FPDFPage_GetAnnot(page, i); - FPDF_ANNOTATION_SUBTYPE subtype = FPDFAnnot_GetSubtype(annotation); + ScopedFPDFAnnotation annotation(FPDFPage_GetAnnot(page, i)); + FPDF_ANNOTATION_SUBTYPE subtype = FPDFAnnot_GetSubtype(annotation.get()); page_features_.annotation_types.insert(subtype); - FPDFPage_CloseAnnot(annotation); } return &page_features_;
diff --git a/printing/print_dialog_gtk_interface.h b/printing/print_dialog_gtk_interface.h index 695a5e3..374acc4 100644 --- a/printing/print_dialog_gtk_interface.h +++ b/printing/print_dialog_gtk_interface.h
@@ -23,8 +23,8 @@ virtual void UseDefaultSettings() = 0; // Updates the dialog to use |settings|. Only used when printing without the - // system print dialog. E.g. for Print Preview. Returns false on error. - virtual bool UpdateSettings(PrintSettings* settings) = 0; + // system print dialog. E.g. for Print Preview. + virtual void UpdateSettings(PrintSettings* settings) = 0; // Shows the dialog and handles the response with |callback|. Only used when // printing with the native print dialog.
diff --git a/printing/printed_document.cc b/printing/printed_document.cc index 144864c..61716a8 100644 --- a/printing/printed_document.cc +++ b/printing/printed_document.cc
@@ -114,14 +114,9 @@ const base::string16& name, int cookie) : immutable_(settings, name, cookie) { - // Records the expected page count if a range is setup. - if (!settings.ranges().empty()) { - // If there is a range, set the number of page - for (unsigned i = 0; i < settings.ranges().size(); ++i) { - const PageRange& range = settings.ranges()[i]; - mutable_.expected_page_count_ += range.to - range.from + 1; - } - } + // If there is a range, set the number of page + for (const PageRange& range : settings.ranges()) + mutable_.expected_page_count_ += range.to - range.from + 1; if (HasDebugDumpPath()) DebugDumpSettings(name, settings);
diff --git a/printing/printed_document.h b/printing/printed_document.h index 08d9946..aaf24958 100644 --- a/printing/printed_document.h +++ b/printing/printed_document.h
@@ -91,7 +91,7 @@ // Note: locks for a short amount of time. void set_page_count(int max_page); - // Number of pages in the document. Used for headers/footers. + // Number of pages in the document. // Note: locks for a short amount of time. int page_count() const; @@ -136,10 +136,10 @@ private: friend class base::RefCountedThreadSafe<PrintedDocument>; - virtual ~PrintedDocument(); + ~PrintedDocument(); // Array of data for each print previewed page. - typedef std::map<int, scoped_refptr<PrintedPage> > PrintedPages; + using PrintedPages = std::map<int, scoped_refptr<PrintedPage>>; // Contains all the mutable stuff. All this stuff MUST be accessed with the // lock held.
diff --git a/printing/printing_context_linux.cc b/printing/printing_context_linux.cc index 1338529..5adcfd3 100644 --- a/printing/printing_context_linux.cc +++ b/printing/printing_context_linux.cc
@@ -4,6 +4,9 @@ #include "printing/printing_context_linux.h" +#include <memory> +#include <utility> + #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/values.h" @@ -12,29 +15,27 @@ #include "printing/print_job_constants.h" #include "printing/units.h" +namespace printing { + namespace { // Function pointer for creating print dialogs. |callback| is only used when // |show_dialog| is true. -printing::PrintDialogGtkInterface* (*create_dialog_func_)( - printing::PrintingContextLinux* context) = NULL; +PrintDialogGtkInterface* (*create_dialog_func_)(PrintingContextLinux* context) = + nullptr; // Function pointer for determining paper size. -gfx::Size (*get_pdf_paper_size_)( - printing::PrintingContextLinux* context) = NULL; +gfx::Size (*get_pdf_paper_size_)(PrintingContextLinux* context) = nullptr; } // namespace -namespace printing { - // static std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { return base::WrapUnique(new PrintingContextLinux(delegate)); } PrintingContextLinux::PrintingContextLinux(Delegate* delegate) - : PrintingContext(delegate), print_dialog_(NULL) { -} + : PrintingContext(delegate), print_dialog_(nullptr) {} PrintingContextLinux::~PrintingContextLinux() { ReleaseContext(); @@ -121,9 +122,7 @@ print_dialog_->AddRefToDialog(); } - if (!print_dialog_->UpdateSettings(&settings_)) - return OnError(); - + print_dialog_->UpdateSettings(&settings_); return OK; } @@ -183,7 +182,7 @@ printing::NativeDrawingContext PrintingContextLinux::context() const { // Intentional No-op. - return NULL; + return nullptr; } } // namespace printing
diff --git a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc index c5019f57..2e3d6a0 100644 --- a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc +++ b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc
@@ -68,6 +68,16 @@ SetProperty(mojom::PropertyType::kNetworkAlmostIdle, idle); } +void FrameCoordinationUnitImpl::SetLifecycleState(mojom::LifecycleState state) { + SetProperty(mojom::PropertyType::kLifecycleState, + static_cast<int64_t>(state)); + // The page will have the same lifecycle state as the main frame. + if (IsMainFrame() && GetPageCoordinationUnit()) { + GetPageCoordinationUnit()->SetProperty(mojom::PropertyType::kLifecycleState, + static_cast<int64_t>(state)); + } +} + void FrameCoordinationUnitImpl::OnAlertFired() { SendEvent(mojom::Event::kAlertFired); }
diff --git a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h index 06b3b78c..da8adc8 100644 --- a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h +++ b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h
@@ -33,6 +33,7 @@ void RemoveChildFrame(const CoordinationUnitID& cu_id) override; void SetAudibility(bool audible) override; void SetNetworkAlmostIdle(bool idle) override; + void SetLifecycleState(mojom::LifecycleState state) override; void OnAlertFired() override; void OnNonPersistentNotificationCreated() override;
diff --git a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc index 342a60fc..7f56e26 100644 --- a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc +++ b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc
@@ -7,6 +7,7 @@ #include "base/test/simple_test_tick_clock.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_test_harness.h" #include "services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.h" +#include "services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h" #include "services/resource_coordinator/resource_coordinator_clock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -123,4 +124,61 @@ cu_graph.frame->last_audible_time()); } +int64_t GetLifecycleState(resource_coordinator::CoordinationUnitBase* cu) { + int64_t value; + if (cu->GetProperty(mojom::PropertyType::kLifecycleState, &value)) + return value; + // Initial state is running. + return static_cast<int64_t>(mojom::LifecycleState::kRunning); +} + +#define EXPECT_FROZEN(cu) \ + EXPECT_EQ(static_cast<int64_t>(mojom::LifecycleState::kFrozen), \ + GetLifecycleState(cu.get())) +#define EXPECT_RUNNING(cu) \ + EXPECT_EQ(static_cast<int64_t>(mojom::LifecycleState::kRunning), \ + GetLifecycleState(cu.get())) + +TEST_F(FrameCoordinationUnitImplTest, LifecycleStatesTransitions) { + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph; + // Verifying the model. + ASSERT_TRUE(cu_graph.frame->IsMainFrame()); + ASSERT_TRUE(cu_graph.other_frame->IsMainFrame()); + ASSERT_FALSE(cu_graph.child_frame->IsMainFrame()); + ASSERT_EQ(cu_graph.child_frame->GetParentFrameCoordinationUnit(), + cu_graph.other_frame.get()); + ASSERT_EQ(cu_graph.frame->GetPageCoordinationUnit(), cu_graph.page.get()); + ASSERT_EQ(cu_graph.other_frame->GetPageCoordinationUnit(), + cu_graph.other_page.get()); + + // Freezing a child frame should not affect the page state. + cu_graph.child_frame->SetLifecycleState(mojom::LifecycleState::kFrozen); + // Verify that the frame is frozen. + EXPECT_FROZEN(cu_graph.child_frame); + // But all pages remain active. + EXPECT_RUNNING(cu_graph.page); + EXPECT_RUNNING(cu_graph.other_page); + + // Freezing a page main frame should freeze that page. + cu_graph.frame->SetLifecycleState(mojom::LifecycleState::kFrozen); + EXPECT_FROZEN(cu_graph.frame); + EXPECT_FROZEN(cu_graph.page); + + // Freezing the other page main frame. + cu_graph.other_frame->SetLifecycleState(mojom::LifecycleState::kFrozen); + EXPECT_FROZEN(cu_graph.other_frame); + EXPECT_FROZEN(cu_graph.other_page); + + // Unfreezing subframe should have no effect. + cu_graph.child_frame->SetLifecycleState(mojom::LifecycleState::kRunning); + // Verify that the frame is unfrozen. + EXPECT_RUNNING(cu_graph.child_frame); + // But the page is still frozen + EXPECT_FROZEN(cu_graph.other_page); + + // Unfreezing the main frame should unfreeze the page. + cu_graph.other_frame->SetLifecycleState(mojom::LifecycleState::kRunning); + EXPECT_RUNNING(cu_graph.other_page); +} + } // namespace resource_coordinator
diff --git a/services/resource_coordinator/observers/page_signal_generator_impl.cc b/services/resource_coordinator/observers/page_signal_generator_impl.cc index f3f7997..900da65 100644 --- a/services/resource_coordinator/observers/page_signal_generator_impl.cc +++ b/services/resource_coordinator/observers/page_signal_generator_impl.cc
@@ -46,17 +46,24 @@ receivers_.AddPtr(std::move(receiver)); } +// Frame CUs should be observed for: +// 1- kNetworkAlmostIdle property changes used for PageAlmostIdle detection +// Page CUs should be observed for: +// 1- kLoading property changes used for PageAlmostIdle detection +// 2- kLifecycleState property changes used to update the Tab lifecycle state +// 3- kNavigationCommitted events for PageAlmostIdle detection +// Process CUs should be observed for: +// 1- kExpectedTaskQueueingDuration property for reporting EQT +// 2- kMainThreadTaskLoadIsLow property changes for PageAlmostIdle detection bool PageSignalGeneratorImpl::ShouldObserve( const CoordinationUnitBase* coordination_unit) { auto cu_type = coordination_unit->id().type; - // Always tracked process CUs. This is used for CPU utilization messages. - if (cu_type == CoordinationUnitType::kProcess) + if (cu_type == CoordinationUnitType::kProcess || + cu_type == CoordinationUnitType::kPage) return true; if (!resource_coordinator::IsPageAlmostIdleSignalEnabled()) return false; - // Frame and page CUs are only used for PAI. - return cu_type == CoordinationUnitType::kFrame || - cu_type == CoordinationUnitType::kPage; + return cu_type == CoordinationUnitType::kFrame; } void PageSignalGeneratorImpl::OnCoordinationUnitCreated( @@ -104,12 +111,12 @@ const PageCoordinationUnitImpl* page_cu, const mojom::PropertyType property_type, int64_t value) { - DCHECK(resource_coordinator::IsPageAlmostIdleSignalEnabled()); - - // Only the loading state of a page is of interest. - if (property_type != mojom::PropertyType::kIsLoading) - return; - UpdateLoadIdleStatePage(page_cu); + if (resource_coordinator::IsPageAlmostIdleSignalEnabled() && + property_type == mojom::PropertyType::kIsLoading) { + UpdateLoadIdleStatePage(page_cu); + } else if (property_type == mojom::PropertyType::kLifecycleState) { + UpdateLifecycleState(page_cu, static_cast<mojom::LifecycleState>(value)); + } } void PageSignalGeneratorImpl::OnProcessPropertyChanged( @@ -139,7 +146,9 @@ void PageSignalGeneratorImpl::OnPageEventReceived( const PageCoordinationUnitImpl* page_cu, const mojom::Event event) { - DCHECK(resource_coordinator::IsPageAlmostIdleSignalEnabled()); + // We only care about the events if network idle signal is enabled. + if (!resource_coordinator::IsPageAlmostIdleSignalEnabled()) + return; // Only the navigation committed event is of interest. if (event != mojom::Event::kNavigationCommitted) @@ -268,6 +277,12 @@ UpdateLoadIdleStateFrame(frame_cu); } +void PageSignalGeneratorImpl::UpdateLifecycleState( + const PageCoordinationUnitImpl* page_cu, + const mojom::LifecycleState state) { + DISPATCH_PAGE_SIGNAL(receivers_, SetLifecycleState, page_cu->id(), state); +} + void PageSignalGeneratorImpl::TransitionToLoadedAndIdle( const PageCoordinationUnitImpl* page_cu) { DCHECK(resource_coordinator::IsPageAlmostIdleSignalEnabled());
diff --git a/services/resource_coordinator/observers/page_signal_generator_impl.h b/services/resource_coordinator/observers/page_signal_generator_impl.h index 061fc36f..a80ab9b 100644 --- a/services/resource_coordinator/observers/page_signal_generator_impl.h +++ b/services/resource_coordinator/observers/page_signal_generator_impl.h
@@ -126,6 +126,11 @@ void UpdateLoadIdleStateProcess( const ProcessCoordinationUnitImpl* process_cu); + // This method is called when a property affecting the lifecycle state is + // observed. + void UpdateLifecycleState(const PageCoordinationUnitImpl* page_cu, + mojom::LifecycleState state); + // Helper function for transitioning to the final state. void TransitionToLoadedAndIdle(const PageCoordinationUnitImpl* page_cu);
diff --git a/services/resource_coordinator/public/mojom/BUILD.gn b/services/resource_coordinator/public/mojom/BUILD.gn index 5ea47bf..929c52f 100644 --- a/services/resource_coordinator/public/mojom/BUILD.gn +++ b/services/resource_coordinator/public/mojom/BUILD.gn
@@ -12,6 +12,7 @@ "coordination_unit.mojom", "coordination_unit_introspector.mojom", "coordination_unit_provider.mojom", + "lifecycle.mojom", "memory_instrumentation/constants.mojom", "memory_instrumentation/memory_instrumentation.mojom", "page_signal.mojom",
diff --git a/services/resource_coordinator/public/mojom/coordination_unit.mojom b/services/resource_coordinator/public/mojom/coordination_unit.mojom index 71e6cd3..56d9124 100644 --- a/services/resource_coordinator/public/mojom/coordination_unit.mojom +++ b/services/resource_coordinator/public/mojom/coordination_unit.mojom
@@ -6,6 +6,7 @@ import "mojo/public/mojom/base/process_id.mojom"; import "mojo/public/mojom/base/time.mojom"; +import "services/resource_coordinator/public/mojom/lifecycle.mojom"; import "services/resource_coordinator/public/mojom/signals.mojom"; // Any new type here needs to be mirrored between coordination_unit_types.h and @@ -64,6 +65,7 @@ // Property signals. SetAudibility(bool audible); SetNetworkAlmostIdle(bool idle); + SetLifecycleState(LifecycleState state); // Event signals. OnAlertFired();
diff --git a/services/resource_coordinator/public/mojom/lifecycle.mojom b/services/resource_coordinator/public/mojom/lifecycle.mojom new file mode 100644 index 0000000..b7691cb --- /dev/null +++ b/services/resource_coordinator/public/mojom/lifecycle.mojom
@@ -0,0 +1,13 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module resource_coordinator.mojom; + +// A lifecycle unit (a page, frame, tab or application) can be in one of +// these lifecycle states. +enum LifecycleState { + kRunning, + kFrozen, + kDiscarded +}; \ No newline at end of file
diff --git a/services/resource_coordinator/public/mojom/page_signal.mojom b/services/resource_coordinator/public/mojom/page_signal.mojom index 4eeec2a..9c8a5f38 100644 --- a/services/resource_coordinator/public/mojom/page_signal.mojom +++ b/services/resource_coordinator/public/mojom/page_signal.mojom
@@ -5,6 +5,7 @@ module resource_coordinator.mojom; import "services/resource_coordinator/public/mojom/coordination_unit.mojom"; +import "services/resource_coordinator/public/mojom/lifecycle.mojom"; import "mojo/public/mojom/base/time.mojom"; // A PageSignalReceiver implementation receives page-scoped signal from @@ -17,6 +18,8 @@ NotifyPageAlmostIdle(CoordinationUnitID cu_id); SetExpectedTaskQueueingDuration(CoordinationUnitID cu_id, mojo_base.mojom.TimeDelta duration); + SetLifecycleState(CoordinationUnitID cu_id, + LifecycleState state); }; // A PageSignalGenerator implementation will be implemented inside GRC to receive
diff --git a/services/resource_coordinator/public/mojom/signals.mojom b/services/resource_coordinator/public/mojom/signals.mojom index 15adaf7..84519658 100644 --- a/services/resource_coordinator/public/mojom/signals.mojom +++ b/services/resource_coordinator/public/mojom/signals.mojom
@@ -36,4 +36,5 @@ kUKMSourceId, // Used by Page CUs to store current loading state. kIsLoading, + kLifecycleState, };
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 276ac70..77a38b1 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -203,6 +203,13 @@ #define SK_SUPPORT_LEGACY_TILED_BITMAPS #endif +// cc_unittests LayerTreeHostFiltersPixelTest.BackgroundFilterBlurOutsets fail +// with the Skia blur imagefilter bug-fix. They need to be updated at the +// same time this flag is removed. +#ifndef SK_IGNORE_BLUR_IMAGE_FILTER_FIX +#define SK_IGNORE_BLUR_IMAGE_FILTER_FIX +#endif + // remove after rebaselining svg layout tests #ifndef SK_SUPPORT_LEGACY_SVG_ARC_TO #define SK_SUPPORT_LEGACY_SVG_ARC_TO
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 78ca377..46ba3e3 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -9288,36 +9288,54 @@ "mac-views-rel": { "gtest_tests": [ { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "accessibility_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "app_shell_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "base_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "blink_heap_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "blink_platform_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true, "shards": 10 @@ -9326,7 +9344,8 @@ }, { "args": [ - "--enable-surface-synchronization" + "--enable-surface-synchronization", + "--enable-features=ViewsBrowserWindows" ], "name": "surface_sync_browser_tests", "swarming": { @@ -9337,7 +9356,7 @@ }, { "args": [ - "--enable-features=VizDisplayCompositor", + "--enable-features=VizDisplayCompositor,ViewsBrowserWindows", "--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter" ], "name": "viz_browser_tests", @@ -9348,42 +9367,63 @@ "test": "browser_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "cacheinvalidation_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "capture_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "cast_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "cc_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "chromedriver_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "components_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, @@ -9391,7 +9431,8 @@ }, { "args": [ - "--enable-surface-synchronization" + "--enable-surface-synchronization", + "--enable-features=ViewsBrowserWindows" ], "name": "surface_sync_content_browsertests", "swarming": { @@ -9402,7 +9443,7 @@ }, { "args": [ - "--enable-features=VizDisplayCompositor", + "--enable-features=VizDisplayCompositor,ViewsBrowserWindows", "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_browsertests.filter" ], "name": "viz_content_browsertests", @@ -9413,6 +9454,9 @@ "test": "content_browsertests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, @@ -9420,7 +9464,7 @@ }, { "args": [ - "--enable-features=VizDisplayCompositor", + "--enable-features=VizDisplayCompositor,ViewsBrowserWindows", "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unittests.filter" ], "name": "viz_content_unittests", @@ -9430,60 +9474,90 @@ "test": "content_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "crashpad_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "cronet_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "cronet_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "crypto_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "extensions_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "gcm_unit_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "gfx_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "google_apis_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "gpu_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true, "shards": 2 @@ -9491,144 +9565,216 @@ "test": "interactive_ui_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "ipc_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "jingle_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "media_blink_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "media_service_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "media_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "midi_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "mojo_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "native_theme_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "net_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "pdf_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "ppapi_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "printing_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "remoting_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "sandbox_mac_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "skia_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "sql_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "storage_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "sync_integration_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "ui_base_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "unit_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "url_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "views_unittests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true }, "test": "webkit_unit_tests" }, { + "args": [ + "--enable-features=ViewsBrowserWindows" + ], "swarming": { "can_use_on_swarming_builders": true },
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 92254d8..c13f253 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -2672,19 +2672,6 @@ } ] }, - "Ozone Linux": { - "additional_compile_targets": [ - "chrome" - ], - "gtest_tests": [ - { - "swarming": { - "can_use_on_swarming_builders": true - }, - "test": "services_unittests" - } - ] - }, "linux-gcc-rel": { "additional_compile_targets": [ "empty_main"
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 6487e625..73da04b 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -720,10 +720,10 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "device_is": "O", + "device_os": "O", "device_type": "walleye", "os": "Android", - "pool": "chrome.test.perf-fyi" + "pool": "chrome.tests.perf-fyi" } ], "expiration": 36000, @@ -768,10 +768,10 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "device_is": "O", + "device_os": "O", "device_type": "walleye", "os": "Android", - "pool": "chrome.test.perf-webview-fyi" + "pool": "chrome.tests.perf-webview-fyi" } ], "expiration": 36000,
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 59b9e43b..8b1ee00 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -30854,7 +30854,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -30886,7 +30886,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -30916,7 +30916,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -30948,7 +30948,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -30978,7 +30978,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31010,7 +31010,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31040,7 +31040,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31072,7 +31072,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31102,7 +31102,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31134,7 +31134,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31164,7 +31164,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31196,7 +31196,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31226,7 +31226,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31258,7 +31258,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31288,7 +31288,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31320,7 +31320,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31350,7 +31350,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31382,7 +31382,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31412,7 +31412,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31444,7 +31444,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31474,7 +31474,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31506,7 +31506,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31536,7 +31536,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31568,7 +31568,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31598,7 +31598,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31630,7 +31630,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31660,7 +31660,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31692,7 +31692,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31722,7 +31722,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31754,7 +31754,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31784,7 +31784,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31816,7 +31816,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31846,7 +31846,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31878,7 +31878,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31908,7 +31908,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31940,7 +31940,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -31970,7 +31970,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32000,7 +32000,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32032,7 +32032,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32062,7 +32062,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32094,7 +32094,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32124,7 +32124,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32156,7 +32156,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32186,7 +32186,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32218,7 +32218,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32248,7 +32248,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32280,7 +32280,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32310,7 +32310,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32342,7 +32342,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32372,7 +32372,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32402,7 +32402,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32434,7 +32434,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32464,7 +32464,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32496,7 +32496,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32526,7 +32526,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32558,7 +32558,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32588,7 +32588,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32620,7 +32620,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32650,7 +32650,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32682,7 +32682,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32712,7 +32712,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32744,7 +32744,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32774,7 +32774,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32806,7 +32806,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32836,7 +32836,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32868,7 +32868,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32898,7 +32898,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32930,7 +32930,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32960,7 +32960,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -32992,7 +32992,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33022,7 +33022,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33054,7 +33054,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33084,7 +33084,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33116,7 +33116,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33146,7 +33146,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33178,7 +33178,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33208,7 +33208,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33240,7 +33240,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33270,7 +33270,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33302,7 +33302,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33332,7 +33332,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33364,7 +33364,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33394,7 +33394,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33426,7 +33426,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33456,7 +33456,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33488,7 +33488,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33518,7 +33518,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33550,7 +33550,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33580,7 +33580,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33612,7 +33612,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33642,7 +33642,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33674,7 +33674,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33704,7 +33704,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33736,7 +33736,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33766,7 +33766,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33798,7 +33798,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33828,7 +33828,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33858,7 +33858,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33890,7 +33890,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33922,7 +33922,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33952,7 +33952,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -33982,7 +33982,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34014,7 +34014,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34046,7 +34046,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34076,7 +34076,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34108,7 +34108,7 @@ "gpu": "8086:1616", "id": "build180-b4", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34138,7 +34138,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34170,7 +34170,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34200,7 +34200,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34232,7 +34232,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34262,7 +34262,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34294,7 +34294,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34324,7 +34324,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34356,7 +34356,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34386,7 +34386,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34418,7 +34418,7 @@ "gpu": "8086:1616", "id": "build195-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34448,7 +34448,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34478,7 +34478,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34510,7 +34510,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34542,7 +34542,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34572,7 +34572,7 @@ "gpu": "8086:1616", "id": "build194-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34602,7 +34602,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34634,7 +34634,7 @@ "gpu": "8086:1616", "id": "build196-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34664,7 +34664,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000, @@ -34696,7 +34696,7 @@ "gpu": "8086:1616", "id": "build197-b7", "os": "Windows-10", - "pool": "chrome.test.perf" + "pool": "chrome.tests.perf" } ], "expiration": 36000,
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index 268b702..25a21c1 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -1271,18 +1271,6 @@ "test": "content_browsertests" }, { - "args": [ - "--enable-features=VizDisplayCompositor", - "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_browsertests.filter" - ], - "name": "viz_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "shards": 2 - }, - "test": "content_browsertests" - }, - { "swarming": { "can_use_on_swarming_builders": true },
diff --git a/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter b/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter index 5de800a8..dbfeee93a 100644 --- a/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter +++ b/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter
@@ -41,4 +41,7 @@ # -ContextMenuBrowserTest.* # -ChromeSitePerProcessTest.* # -InterstitialUITest.* --ConstrainedWebDialogBrowserTest.* +#-ConstrainedWebDialogBrowserTest.BasicTest +#-ConstrainedWebDialogBrowserTest.ReleaseWebContents +-ConstrainedWebDialogBrowserTest.ContentResizeInAutoResizingDialog +-ConstrainedWebDialogBrowserTest.ContentResizeInNonAutoResizingDialog
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter index 0ee189a..6acc1e97 100644 --- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter +++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -92,7 +92,6 @@ # crbug.com/776589 Intercepting requests with net::URLRequestFilter. -ContinueWhereILeftOffTest.CookiesClearedOnExit --DevToolsSanityTest.TestNetworkPushTime -DownloadExtensionTest.DownloadExtensionTest_Download_FileSystemURL -MimeHandlerViewTests/MimeHandlerViewTest.SingleRequest/0 -PolicyTest.ExtensionInstallSources @@ -149,9 +148,8 @@ -ExtensionWebRequestApiTest.WebRequestDeclarative2 -ExtensionWebRequestApiTest.WebRequestDiceHeaderProtection -ExtensionWebRequestApiTest.WebRequestTypes --ExtensionWebRequestApiTest.WebRequestTestOSDD +-ExtensionWebRequestApiTest.WebRequestTestOSDD -ExtensionWebRequestApiTest.WebRequestURLFetcherInterception --LocalNTPInterceptionWebRequestAPITest.OneGoogleBarRequestsHidden # https://crbug.com/721400 # WebSocket with the network service
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 3c65044..3ff9aef 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -3137,6 +3137,12 @@ 'Linux Tests (dbg)(1)(32)', ], }, + 'viz_content_browsertests': { + 'remove_from': [ + # Currently flaky timeouts on Windows 10. crbug.com/839824 + 'Win10 Tests x64 (dbg)', + ], + }, 'viz_browser_tests': { 'remove_from': [ # Currently too flaky on Windows.
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 938aa52..5a73d765 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -918,6 +918,9 @@ 'test_suites': { 'gtest_tests': 'chromium_mac_fyi_gtests', }, + 'args': [ + '--enable-features=ViewsBrowserWindows', + ], }, 'Chromium Mac 10.11': { 'test_suites': { @@ -1497,14 +1500,6 @@ 'isolated_scripts': 'chromium_linux_dbg_isolated_scripts', }, }, - 'Ozone Linux': { - 'additional_compile_targets': [ - 'chrome', - ], - 'test_suites': { - 'gtest_tests': 'ozone_linux_gtests', - }, - }, 'linux-gcc-rel': { 'additional_compile_targets': [ 'empty_main',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index fef6eff..5dd99a7 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -8,9 +8,9 @@ ], "experiments": [ { - "name": "DiceFixAuthErrors", + "name": "DicePrepareMigration", "params": { - "method": "dice_fix_auth_errors" + "method": "dice_prepare_migration_new_endpoint" }, "enable_features": [ "AccountConsistency"
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index b2be050..0e391f6 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2794,12 +2794,8 @@ crbug.com/800898 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Pass Failure ] # Websockets -crbug.com/803558 external/wpt/websockets/constructor/014.html?wss [ Timeout ] -crbug.com/803558 external/wpt/websockets/keeping-connection-open/001.html?wss [ Timeout ] crbug.com/803558 external/wpt/websockets/opening-handshake/003-sets-origin.worker.html [ Timeout ] crbug.com/803358 virtual/off-main-thread-websocket/external/wpt/websockets/Create-Secure-extensions-empty.htm [ Timeout ] -crbug.com/803558 virtual/off-main-thread-websocket/external/wpt/websockets/constructor/014.html?wss [ Timeout ] -crbug.com/803558 virtual/off-main-thread-websocket/external/wpt/websockets/keeping-connection-open/001.html?wss [ Timeout ] crbug.com/803558 virtual/off-main-thread-websocket/external/wpt/websockets/opening-handshake/003-sets-origin.worker.html [ Timeout ] # Cannot be rebaselined because the output contains a timestamp and a random number. crbug.com/803200 external/wpt/websockets/cookies/006.html?wss [ Failure ] @@ -2855,7 +2851,6 @@ crbug.com/626703 external/wpt/css/css-contain/quote-scoping-002.html [ Failure ] crbug.com/626703 external/wpt/websockets/Create-Secure-extensions-empty.any.worker.html [ Timeout ] crbug.com/626703 external/wpt/css/css-contain/counter-scoping-003.html [ Failure ] -crbug.com/626703 [ Mac10.12 ] external/wpt/html/syntax/parsing/html5lib_template.html?run_type=uri [ Timeout ] crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.sub.html [ Skip ] crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.sub.html [ Skip ] crbug.com/626703 [ Mac10.12 ] virtual/unified-autoplay/external/wpt/feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html [ Timeout ] @@ -3729,7 +3724,6 @@ # Crashes crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.html [ Crash ] -crbug.com/803943 [ Win Linux Mac ] external/wpt/html/syntax/parsing/html5lib_tests16.html?run_type=uri [ Pass Timeout ] # ====== Tests from enabling .any.js/.worker.js tests end here ======== @@ -4608,7 +4602,7 @@ # Sheriff 2018-03-26 crbug.com/825733 [ Win ] media/color-profile-video-seek-filter.html [ Pass Timeout Failure ] -crbug.com/825733 [ Win ] virtual/video-surface-layer/media/color-profile-video-seek-filter.html [ Pass Timeout Failure ] +crbug.com/825733 [ Win Linux ] virtual/video-surface-layer/media/color-profile-video-seek-filter.html [ Pass Timeout Failure ] crbug.com/754986 media/video-transformed.html [ Pass Failure ] crbug.com/754986 virtual/video-surface-layer/media/video-transformed.html [ Pass Failure ] @@ -4659,7 +4653,6 @@ crbug.com/832274 [ Linux ] fast/forms/search/search-appearance-basic.html [ Pass Failure ] # Sheriff 2018-04-12 -crbug.com/818324 [ Linux ] external/wpt/html/syntax/parsing/html5lib_template.html?run_type=uri [ Pass Timeout ] crbug.com/831993 [ Linux ] virtual/gpu-rasterization/images/cross-fade-overflow-position.html [ Pass Timeout ] # Sheriff 2018-04-13 @@ -4686,7 +4679,3 @@ crbug.com/838254 virtual/video-surface-layer/media/webkit-media-controls-webkit-appearance.html [ Failure ] crbug.com/839332 [ Mac ] virtual/video-surface-layer/media/video-no-audio.html [ Pass Failure ] - -# Sheriff 2018-05-04 -crbug.com/839734 [ Linux ] paint/invalidation/table/table-hover-on-link.html [ Pass Failure ] -crbug.com/839734 [ Linux ] virtual/disable-spv175/paint/invalidation/table/table-hover-on-link.html [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/compositing/composite-scrollable-fixed-position-when-descendants-composite.html b/third_party/WebKit/LayoutTests/compositing/composite-scrollable-fixed-position-when-descendants-composite.html index c6f65cc..ecee855 100644 --- a/third_party/WebKit/LayoutTests/compositing/composite-scrollable-fixed-position-when-descendants-composite.html +++ b/third_party/WebKit/LayoutTests/compositing/composite-scrollable-fixed-position-when-descendants-composite.html
@@ -15,10 +15,6 @@ assert_not_equals(window.internals, null, 'This test requires window.internals'); var layers_text = internals.layerTreeAsText(document); var layers = JSON.parse(layers_text); - if (internals.runtimeFlags.rootLayerScrollingEnabled) { - assert_equals(layers['layers'].length, 5); - } else { - assert_equals(layers['layers'].length, 3); - } + assert_equals(layers['layers'].length, 5); }, 'Having a composited child should be a position:fixed compositing trigger and should result in the fixed element getting a layer.'); </script>
diff --git a/third_party/WebKit/LayoutTests/compositing/dont-composite-select-elements.html b/third_party/WebKit/LayoutTests/compositing/dont-composite-select-elements.html index 66dd374..6aa0dc0 100644 --- a/third_party/WebKit/LayoutTests/compositing/dont-composite-select-elements.html +++ b/third_party/WebKit/LayoutTests/compositing/dont-composite-select-elements.html
@@ -13,10 +13,6 @@ test(function() { var json = JSON.parse(window.internals.layerTreeAsText(document)); // The <select> element's scroller should be painted into the root layer. - if (internals.runtimeFlags.rootLayerScrollingEnabled) { - assert_equals(json["layers"].length, 3); - } else { - assert_equals(json["layers"].length, 1); - } - }, "test"); + assert_equals(json["layers"].length, 3); +}, "test"); </script>
diff --git a/third_party/WebKit/LayoutTests/compositing/dont-composite-text-input-elements.html b/third_party/WebKit/LayoutTests/compositing/dont-composite-text-input-elements.html index 51aabeb..a03d323 100644 --- a/third_party/WebKit/LayoutTests/compositing/dont-composite-text-input-elements.html +++ b/third_party/WebKit/LayoutTests/compositing/dont-composite-text-input-elements.html
@@ -8,10 +8,6 @@ test(function() { var json = JSON.parse(window.internals.layerTreeAsText(document)); // The <input> element's scroller should be painted into the root layer. - if (internals.runtimeFlags.rootLayerScrollingEnabled) { - assert_equals(json["layers"].length, 3); - } else { - assert_equals(json["layers"].length, 1); - } - }, "test"); + assert_equals(json["layers"].length, 3); +}, "test"); </script>
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-animated-layers.html b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-animated-layers.html index 96ca4f3..90cdf55 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-animated-layers.html +++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-animated-layers.html
@@ -24,7 +24,7 @@ target.style.transform = "translateX(10px)"; if (window.internals) { var layers = JSON.parse(internals.layerTreeAsText(document, 1))["layers"] - var nonAnimatedDIVLayer = internals.runtimeFlags.rootLayerScrollingEnabled ? layers[4] : layers[2]; + var nonAnimatedDIVLayer = layers[4]; assert_true(nonAnimatedDIVLayer.compositingReasons[1] == "Layer was separately composited because it could not be squashed."); assert_true(nonAnimatedDIVLayer.squashingDisallowedReasons[0] == "Cannot squash into a layer that is animating."); }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-blend-mode.html b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-blend-mode.html index 6e29841..0fe8016 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-blend-mode.html +++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-blend-mode.html
@@ -9,7 +9,7 @@ onload = function() { if (window.internals) { var layers = JSON.parse(internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_DEBUG_INFO))["layers"]; - var nonBlendDIVlayer = internals.runtimeFlags.rootLayerScrollingEnabled ? layers[5] : layers[3]; + var nonBlendDIVlayer = layers[5]; assert_true(nonBlendDIVlayer.compositingReasons[1] == "Layer was separately composited because it could not be squashed."); assert_true(nonBlendDIVlayer.squashingDisallowedReasons[0] == "Squashing a layer with blending is not supported."); }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-with-scale-transform.html b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-with-scale-transform.html index 259cea0..9373fcb 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-with-scale-transform.html +++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-with-scale-transform.html
@@ -18,8 +18,8 @@ if (window.internals) { var layers = JSON.parse(internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_DEBUG_INFO))["layers"]; - var willChangeDIVLayer = internals.runtimeFlags.rootLayerScrollingEnabled ? layers[4] : layers[2]; - var scaleTransformDIVLayer = internals.runtimeFlags.rootLayerScrollingEnabled ? layers[5] : layers[3]; + var willChangeDIVLayer = layers[4]; + var scaleTransformDIVLayer = layers[5]; // Both transformed layers squash together after the will-change layer. assert_true(willChangeDIVLayer.compositingReasons[0] == "Has a will-change compositing hint"); assert_true(scaleTransformDIVLayer.compositingReasons[0] == "Secondary layer, home for a group of squashable content");
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index 30c5ca0..37ef0e3 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -28715,6 +28715,18 @@ {} ] ], + "css/css-backgrounds/background-color-clip.html": [ + [ + "/css/css-backgrounds/background-color-clip.html", + [ + [ + "/css/css-backgrounds/reference/background-color-clip.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/background-image-001.html": [ [ "/css/css-backgrounds/background-image-001.html", @@ -32087,6 +32099,18 @@ {} ] ], + "css/css-backgrounds/border-image-outset-003.html": [ + [ + "/css/css-backgrounds/border-image-outset-003.html", + [ + [ + "/css/css-backgrounds/border-image-outset-003-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/border-image-repeat-round.html": [ [ "/css/css-backgrounds/border-image-repeat-round.html", @@ -108071,6 +108095,11 @@ {} ] ], + "css/css-backgrounds/border-image-outset-003-ref.html": [ + [ + {} + ] + ], "css/css-backgrounds/border-radius-001-ref.xht": [ [ {} @@ -108191,6 +108220,11 @@ {} ] ], + "css/css-backgrounds/reference/background-color-clip.html": [ + [ + {} + ] + ], "css/css-backgrounds/reference/background-image-001-ref.html": [ [ {} @@ -139726,6 +139760,16 @@ {} ] ], + "fetch/corb/resources/html-js-polyglot.js": [ + [ + {} + ] + ], + "fetch/corb/resources/html-js-polyglot.js.headers": [ + [ + {} + ] + ], "fetch/corb/resources/js-mislabeled-as-html-nosniff.js": [ [ {} @@ -177466,6 +177510,12 @@ {} ] ], + "async-local-storage/storage-smoke-test.https.tentative.html": [ + [ + "/async-local-storage/storage-smoke-test.https.tentative.html", + {} + ] + ], "audio-output/HTMLMediaElement-sinkId-idl.html": [ [ "/audio-output/HTMLMediaElement-sinkId-idl.html", @@ -197702,6 +197752,12 @@ {} ] ], + "fetch/corb/script-html-js-polyglot.sub.html": [ + [ + "/fetch/corb/script-html-js-polyglot.sub.html", + {} + ] + ], "fetch/corb/script-html-via-cross-origin-blob-url.sub.html": [ [ "/fetch/corb/script-html-via-cross-origin-blob-url.sub.html", @@ -257537,6 +257593,10 @@ "32cf112fb1dcb4e7ec3c91bdf5bd6b976a1e4eac", "testharness" ], + "async-local-storage/storage-smoke-test.https.tentative.html": [ + "1e00cf5aff9d85ca66d8b831ee4c2c3cb8259071", + "testharness" + ], "audio-output/HTMLMediaElement-sinkId-idl.html": [ "8f37d8d2fc1cb9b5ad0d85234f733f534f4f0db8", "testharness" @@ -277269,6 +277329,10 @@ "d638cc24e5598d10acfbf6d0c3a25552141a2ad5", "visual" ], + "css/css-backgrounds/background-color-clip.html": [ + "b0d788cd9f108a6453f1e044180a65874095849b", + "reftest" + ], "css/css-backgrounds/background-image-001.html": [ "74731240922af8bd5626c1f74cd767ee3eb7d004", "reftest" @@ -278998,13 +279062,21 @@ "visual" ], "css/css-backgrounds/border-image-outset-001.htm": [ - "91206118ea44913c07090d59a2a702b8ba3fb6ef", + "796f739d337c442e64c13ffedc25b38c017ac48d", "visual" ], "css/css-backgrounds/border-image-outset-002.htm": [ - "6101a51156146dec7d46599f7b8dc34934d9ea2f", + "9e79efb85575ddc330b69a13265a44bc18723dbd", "visual" ], + "css/css-backgrounds/border-image-outset-003-ref.html": [ + "2679f735e348a77aecd49a1f35794e9fc3a9dd87", + "support" + ], + "css/css-backgrounds/border-image-outset-003.html": [ + "378c9808884010c2e0b0226552b519f3ab4cedce", + "reftest" + ], "css/css-backgrounds/border-image-repeat-001.htm": [ "62ebca7169dbd69684405ec03f86d720fc3354b7", "visual" @@ -279829,6 +279901,10 @@ "a818d18fc2089057ae818e20e4263ee2b0d88ad8", "support" ], + "css/css-backgrounds/reference/background-color-clip.html": [ + "f2176cecd7630f9ef7f0e28820a1a9d029f47929", + "support" + ], "css/css-backgrounds/reference/background-image-001-ref.html": [ "fc56e0b5195d622679934aaa4d9f2ae64d300957", "support" @@ -335809,6 +335885,14 @@ "41e260e7df49e0e4ddb1fc5df11913dbda15edd7", "support" ], + "fetch/corb/resources/html-js-polyglot.js": [ + "7fc30035583764941078fb53f950c52a217d6893", + "support" + ], + "fetch/corb/resources/html-js-polyglot.js.headers": [ + "41e260e7df49e0e4ddb1fc5df11913dbda15edd7", + "support" + ], "fetch/corb/resources/js-mislabeled-as-html-nosniff.js": [ "ec322736e35e0649e1f3cd4d5b88e2f211436e2b", "support" @@ -335857,6 +335941,10 @@ "71cb97517821177aa1c1d116f830cd2315963d18", "testharness" ], + "fetch/corb/script-html-js-polyglot.sub.html": [ + "19d0530fcb573b6bcbffebc5dbe2ce3537faa8a3", + "testharness" + ], "fetch/corb/script-html-via-cross-origin-blob-url.sub.html": [ "5fd4e36f6ad89ea7e7ede4c1a54136d80b126dd4", "testharness"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker-expected.txt new file mode 100644 index 0000000..7f1d1af9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker-expected.txt
@@ -0,0 +1,8742 @@ +This is a testharness.js-based test. +PASS short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-384, with 1 iterations with null length +PASS short password, short salt, SHA-384, with 1 iterations with 0 length +PASS short password, short salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS short password, short salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-384, with 1000 iterations with null length +PASS short password, short salt, SHA-384, with 1000 iterations with 0 length +PASS short password, short salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS short password, short salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-384, with 100000 iterations with null length +PASS short password, short salt, SHA-384, with 100000 iterations with 0 length +PASS short password, short salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS short password, short salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-384, with 0 iterations +PASS short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-512, with 1 iterations with null length +PASS short password, short salt, SHA-512, with 1 iterations with 0 length +PASS short password, short salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS short password, short salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-512, with 1000 iterations with null length +PASS short password, short salt, SHA-512, with 1000 iterations with 0 length +PASS short password, short salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS short password, short salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-512, with 100000 iterations with null length +PASS short password, short salt, SHA-512, with 100000 iterations with 0 length +PASS short password, short salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS short password, short salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-512, with 0 iterations +PASS short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-1, with 1 iterations with null length +PASS short password, short salt, SHA-1, with 1 iterations with 0 length +PASS short password, short salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS short password, short salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-1, with 1000 iterations with null length +PASS short password, short salt, SHA-1, with 1000 iterations with 0 length +PASS short password, short salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS short password, short salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-1, with 100000 iterations with null length +PASS short password, short salt, SHA-1, with 100000 iterations with 0 length +PASS short password, short salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS short password, short salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-1, with 0 iterations +PASS short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-256, with 1 iterations with null length +PASS short password, short salt, SHA-256, with 1 iterations with 0 length +PASS short password, short salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS short password, short salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-256, with 1000 iterations with null length +PASS short password, short salt, SHA-256, with 1000 iterations with 0 length +PASS short password, short salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS short password, short salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-256, with 100000 iterations with null length +PASS short password, short salt, SHA-256, with 100000 iterations with 0 length +PASS short password, short salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS short password, short salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, SHA-256, with 0 iterations +PASS short password, short salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, PBKDF2, with 1 iterations +PASS short password, short salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, PBKDF2, with 1000 iterations +PASS short password, short salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, short salt, PBKDF2, with 100000 iterations +PASS short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-384, with 1 iterations with null length +PASS short password, long salt, SHA-384, with 1 iterations with 0 length +PASS short password, long salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS short password, long salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-384, with 1000 iterations with null length +PASS short password, long salt, SHA-384, with 1000 iterations with 0 length +PASS short password, long salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS short password, long salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-384, with 100000 iterations with null length +PASS short password, long salt, SHA-384, with 100000 iterations with 0 length +PASS short password, long salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS short password, long salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-384, with 0 iterations +PASS short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-512, with 1 iterations with null length +PASS short password, long salt, SHA-512, with 1 iterations with 0 length +PASS short password, long salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS short password, long salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-512, with 1000 iterations with null length +PASS short password, long salt, SHA-512, with 1000 iterations with 0 length +PASS short password, long salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS short password, long salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-512, with 100000 iterations with null length +PASS short password, long salt, SHA-512, with 100000 iterations with 0 length +PASS short password, long salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS short password, long salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-512, with 0 iterations +PASS short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-1, with 1 iterations with null length +PASS short password, long salt, SHA-1, with 1 iterations with 0 length +PASS short password, long salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS short password, long salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-1, with 1000 iterations with null length +PASS short password, long salt, SHA-1, with 1000 iterations with 0 length +PASS short password, long salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS short password, long salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-1, with 100000 iterations with null length +PASS short password, long salt, SHA-1, with 100000 iterations with 0 length +PASS short password, long salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS short password, long salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-1, with 0 iterations +PASS short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-256, with 1 iterations with null length +PASS short password, long salt, SHA-256, with 1 iterations with 0 length +PASS short password, long salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS short password, long salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-256, with 1000 iterations with null length +PASS short password, long salt, SHA-256, with 1000 iterations with 0 length +PASS short password, long salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS short password, long salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-256, with 100000 iterations with null length +PASS short password, long salt, SHA-256, with 100000 iterations with 0 length +PASS short password, long salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS short password, long salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, SHA-256, with 0 iterations +PASS short password, long salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, PBKDF2, with 1 iterations +PASS short password, long salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, PBKDF2, with 1000 iterations +PASS short password, long salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, long salt, PBKDF2, with 100000 iterations +PASS short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-384, with 1 iterations with null length +PASS short password, empty salt, SHA-384, with 1 iterations with 0 length +PASS short password, empty salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS short password, empty salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-384, with 1000 iterations with null length +PASS short password, empty salt, SHA-384, with 1000 iterations with 0 length +PASS short password, empty salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS short password, empty salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-384, with 100000 iterations with null length +PASS short password, empty salt, SHA-384, with 100000 iterations with 0 length +PASS short password, empty salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS short password, empty salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-384, with 0 iterations +PASS short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-512, with 1 iterations with null length +PASS short password, empty salt, SHA-512, with 1 iterations with 0 length +PASS short password, empty salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS short password, empty salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-512, with 1000 iterations with null length +PASS short password, empty salt, SHA-512, with 1000 iterations with 0 length +PASS short password, empty salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS short password, empty salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-512, with 100000 iterations with null length +PASS short password, empty salt, SHA-512, with 100000 iterations with 0 length +PASS short password, empty salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS short password, empty salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-512, with 0 iterations +PASS short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-1, with 1 iterations with null length +PASS short password, empty salt, SHA-1, with 1 iterations with 0 length +PASS short password, empty salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS short password, empty salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-1, with 1000 iterations with null length +PASS short password, empty salt, SHA-1, with 1000 iterations with 0 length +PASS short password, empty salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS short password, empty salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-1, with 100000 iterations with null length +PASS short password, empty salt, SHA-1, with 100000 iterations with 0 length +PASS short password, empty salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS short password, empty salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-1, with 0 iterations +PASS short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-256, with 1 iterations with null length +PASS short password, empty salt, SHA-256, with 1 iterations with 0 length +PASS short password, empty salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS short password, empty salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-256, with 1000 iterations with null length +PASS short password, empty salt, SHA-256, with 1000 iterations with 0 length +PASS short password, empty salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS short password, empty salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-256, with 100000 iterations with null length +PASS short password, empty salt, SHA-256, with 100000 iterations with 0 length +PASS short password, empty salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS short password, empty salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, SHA-256, with 0 iterations +PASS short password, empty salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, PBKDF2, with 1 iterations +PASS short password, empty salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, PBKDF2, with 1000 iterations +PASS short password, empty salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using short password, empty salt, PBKDF2, with 100000 iterations +PASS long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-384, with 1 iterations with null length +PASS long password, short salt, SHA-384, with 1 iterations with 0 length +PASS long password, short salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS long password, short salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-384, with 1000 iterations with null length +PASS long password, short salt, SHA-384, with 1000 iterations with 0 length +PASS long password, short salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS long password, short salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-384, with 100000 iterations with null length +PASS long password, short salt, SHA-384, with 100000 iterations with 0 length +PASS long password, short salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS long password, short salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-384, with 0 iterations +PASS long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-512, with 1 iterations with null length +PASS long password, short salt, SHA-512, with 1 iterations with 0 length +PASS long password, short salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS long password, short salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-512, with 1000 iterations with null length +PASS long password, short salt, SHA-512, with 1000 iterations with 0 length +PASS long password, short salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS long password, short salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-512, with 100000 iterations with null length +PASS long password, short salt, SHA-512, with 100000 iterations with 0 length +PASS long password, short salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS long password, short salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-512, with 0 iterations +PASS long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-1, with 1 iterations with null length +PASS long password, short salt, SHA-1, with 1 iterations with 0 length +PASS long password, short salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS long password, short salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-1, with 1000 iterations with null length +PASS long password, short salt, SHA-1, with 1000 iterations with 0 length +PASS long password, short salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS long password, short salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-1, with 100000 iterations with null length +PASS long password, short salt, SHA-1, with 100000 iterations with 0 length +PASS long password, short salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS long password, short salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-1, with 0 iterations +PASS long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-256, with 1 iterations with null length +PASS long password, short salt, SHA-256, with 1 iterations with 0 length +PASS long password, short salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS long password, short salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-256, with 1000 iterations with null length +PASS long password, short salt, SHA-256, with 1000 iterations with 0 length +PASS long password, short salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS long password, short salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-256, with 100000 iterations with null length +PASS long password, short salt, SHA-256, with 100000 iterations with 0 length +PASS long password, short salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS long password, short salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, SHA-256, with 0 iterations +PASS long password, short salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, PBKDF2, with 1 iterations +PASS long password, short salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, PBKDF2, with 1000 iterations +PASS long password, short salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, short salt, PBKDF2, with 100000 iterations +PASS long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-384, with 1 iterations with null length +PASS long password, long salt, SHA-384, with 1 iterations with 0 length +PASS long password, long salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS long password, long salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-384, with 1000 iterations with null length +PASS long password, long salt, SHA-384, with 1000 iterations with 0 length +PASS long password, long salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS long password, long salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-384, with 100000 iterations with null length +PASS long password, long salt, SHA-384, with 100000 iterations with 0 length +PASS long password, long salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS long password, long salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-384, with 0 iterations +PASS long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-512, with 1 iterations with null length +PASS long password, long salt, SHA-512, with 1 iterations with 0 length +PASS long password, long salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS long password, long salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-512, with 1000 iterations with null length +PASS long password, long salt, SHA-512, with 1000 iterations with 0 length +PASS long password, long salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS long password, long salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-512, with 100000 iterations with null length +PASS long password, long salt, SHA-512, with 100000 iterations with 0 length +PASS long password, long salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS long password, long salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-512, with 0 iterations +PASS long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-1, with 1 iterations with null length +PASS long password, long salt, SHA-1, with 1 iterations with 0 length +PASS long password, long salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS long password, long salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-1, with 1000 iterations with null length +PASS long password, long salt, SHA-1, with 1000 iterations with 0 length +PASS long password, long salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS long password, long salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-1, with 100000 iterations with null length +PASS long password, long salt, SHA-1, with 100000 iterations with 0 length +PASS long password, long salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS long password, long salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-1, with 0 iterations +PASS long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-256, with 1 iterations with null length +PASS long password, long salt, SHA-256, with 1 iterations with 0 length +PASS long password, long salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS long password, long salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-256, with 1000 iterations with null length +PASS long password, long salt, SHA-256, with 1000 iterations with 0 length +PASS long password, long salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS long password, long salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-256, with 100000 iterations with null length +PASS long password, long salt, SHA-256, with 100000 iterations with 0 length +PASS long password, long salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS long password, long salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, SHA-256, with 0 iterations +PASS long password, long salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, PBKDF2, with 1 iterations +PASS long password, long salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, PBKDF2, with 1000 iterations +PASS long password, long salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, long salt, PBKDF2, with 100000 iterations +PASS long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-384, with 1 iterations with null length +PASS long password, empty salt, SHA-384, with 1 iterations with 0 length +PASS long password, empty salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS long password, empty salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-384, with 1000 iterations with null length +PASS long password, empty salt, SHA-384, with 1000 iterations with 0 length +PASS long password, empty salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS long password, empty salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-384, with 100000 iterations with null length +PASS long password, empty salt, SHA-384, with 100000 iterations with 0 length +PASS long password, empty salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS long password, empty salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-384, with 0 iterations +PASS long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-512, with 1 iterations with null length +PASS long password, empty salt, SHA-512, with 1 iterations with 0 length +PASS long password, empty salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS long password, empty salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-512, with 1000 iterations with null length +PASS long password, empty salt, SHA-512, with 1000 iterations with 0 length +PASS long password, empty salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS long password, empty salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-512, with 100000 iterations with null length +PASS long password, empty salt, SHA-512, with 100000 iterations with 0 length +PASS long password, empty salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS long password, empty salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-512, with 0 iterations +PASS long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-1, with 1 iterations with null length +PASS long password, empty salt, SHA-1, with 1 iterations with 0 length +PASS long password, empty salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS long password, empty salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-1, with 1000 iterations with null length +PASS long password, empty salt, SHA-1, with 1000 iterations with 0 length +PASS long password, empty salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS long password, empty salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-1, with 100000 iterations with null length +PASS long password, empty salt, SHA-1, with 100000 iterations with 0 length +PASS long password, empty salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS long password, empty salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-1, with 0 iterations +PASS long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-256, with 1 iterations with null length +PASS long password, empty salt, SHA-256, with 1 iterations with 0 length +PASS long password, empty salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS long password, empty salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-256, with 1000 iterations with null length +PASS long password, empty salt, SHA-256, with 1000 iterations with 0 length +PASS long password, empty salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS long password, empty salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-256, with 100000 iterations with null length +PASS long password, empty salt, SHA-256, with 100000 iterations with 0 length +PASS long password, empty salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS long password, empty salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, SHA-256, with 0 iterations +PASS long password, empty salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, PBKDF2, with 1 iterations +PASS long password, empty salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, PBKDF2, with 1000 iterations +PASS long password, empty salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using long password, empty salt, PBKDF2, with 100000 iterations +PASS empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-384, with 1 iterations with null length +PASS empty password, short salt, SHA-384, with 1 iterations with 0 length +PASS empty password, short salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS empty password, short salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-384, with 1000 iterations with null length +PASS empty password, short salt, SHA-384, with 1000 iterations with 0 length +PASS empty password, short salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS empty password, short salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-384, with 100000 iterations with null length +PASS empty password, short salt, SHA-384, with 100000 iterations with 0 length +PASS empty password, short salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS empty password, short salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-384, with 0 iterations +PASS empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-512, with 1 iterations with null length +PASS empty password, short salt, SHA-512, with 1 iterations with 0 length +PASS empty password, short salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS empty password, short salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-512, with 1000 iterations with null length +PASS empty password, short salt, SHA-512, with 1000 iterations with 0 length +PASS empty password, short salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS empty password, short salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-512, with 100000 iterations with null length +PASS empty password, short salt, SHA-512, with 100000 iterations with 0 length +PASS empty password, short salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS empty password, short salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-512, with 0 iterations +PASS empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-1, with 1 iterations with null length +PASS empty password, short salt, SHA-1, with 1 iterations with 0 length +PASS empty password, short salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS empty password, short salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-1, with 1000 iterations with null length +PASS empty password, short salt, SHA-1, with 1000 iterations with 0 length +PASS empty password, short salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS empty password, short salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-1, with 100000 iterations with null length +PASS empty password, short salt, SHA-1, with 100000 iterations with 0 length +PASS empty password, short salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS empty password, short salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-1, with 0 iterations +PASS empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-256, with 1 iterations with null length +PASS empty password, short salt, SHA-256, with 1 iterations with 0 length +PASS empty password, short salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS empty password, short salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-256, with 1000 iterations with null length +PASS empty password, short salt, SHA-256, with 1000 iterations with 0 length +PASS empty password, short salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS empty password, short salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-256, with 100000 iterations with null length +PASS empty password, short salt, SHA-256, with 100000 iterations with 0 length +PASS empty password, short salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS empty password, short salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, SHA-256, with 0 iterations +PASS empty password, short salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, PBKDF2, with 1 iterations +PASS empty password, short salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, PBKDF2, with 1000 iterations +PASS empty password, short salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, short salt, PBKDF2, with 100000 iterations +PASS empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-384, with 1 iterations with null length +PASS empty password, long salt, SHA-384, with 1 iterations with 0 length +PASS empty password, long salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS empty password, long salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-384, with 1000 iterations with null length +PASS empty password, long salt, SHA-384, with 1000 iterations with 0 length +PASS empty password, long salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS empty password, long salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-384, with 100000 iterations with null length +PASS empty password, long salt, SHA-384, with 100000 iterations with 0 length +PASS empty password, long salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS empty password, long salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-384, with 0 iterations +PASS empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-512, with 1 iterations with null length +PASS empty password, long salt, SHA-512, with 1 iterations with 0 length +PASS empty password, long salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS empty password, long salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-512, with 1000 iterations with null length +PASS empty password, long salt, SHA-512, with 1000 iterations with 0 length +PASS empty password, long salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS empty password, long salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-512, with 100000 iterations with null length +PASS empty password, long salt, SHA-512, with 100000 iterations with 0 length +PASS empty password, long salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS empty password, long salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-512, with 0 iterations +PASS empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-1, with 1 iterations with null length +PASS empty password, long salt, SHA-1, with 1 iterations with 0 length +PASS empty password, long salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS empty password, long salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-1, with 1000 iterations with null length +PASS empty password, long salt, SHA-1, with 1000 iterations with 0 length +PASS empty password, long salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS empty password, long salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-1, with 100000 iterations with null length +PASS empty password, long salt, SHA-1, with 100000 iterations with 0 length +PASS empty password, long salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS empty password, long salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-1, with 0 iterations +PASS empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-256, with 1 iterations with null length +PASS empty password, long salt, SHA-256, with 1 iterations with 0 length +PASS empty password, long salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS empty password, long salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-256, with 1000 iterations with null length +PASS empty password, long salt, SHA-256, with 1000 iterations with 0 length +PASS empty password, long salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS empty password, long salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-256, with 100000 iterations with null length +PASS empty password, long salt, SHA-256, with 100000 iterations with 0 length +PASS empty password, long salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS empty password, long salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, SHA-256, with 0 iterations +PASS empty password, long salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, PBKDF2, with 1 iterations +PASS empty password, long salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, PBKDF2, with 1000 iterations +PASS empty password, long salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, long salt, PBKDF2, with 100000 iterations +PASS empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-384, with 1 iterations with null length +PASS empty password, empty salt, SHA-384, with 1 iterations with 0 length +PASS empty password, empty salt, SHA-384, with 1 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384 +PASS empty password, empty salt, SHA-384, with 1 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-384, with 1000 iterations with null length +PASS empty password, empty salt, SHA-384, with 1000 iterations with 0 length +PASS empty password, empty salt, SHA-384, with 1000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384 +PASS empty password, empty salt, SHA-384, with 1000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-384, with 100000 iterations with null length +PASS empty password, empty salt, SHA-384, with 100000 iterations with 0 length +PASS empty password, empty salt, SHA-384, with 100000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384 +PASS empty password, empty salt, SHA-384, with 100000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-384, with 0 iterations +PASS empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-512, with 1 iterations with null length +PASS empty password, empty salt, SHA-512, with 1 iterations with 0 length +PASS empty password, empty salt, SHA-512, with 1 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512 +PASS empty password, empty salt, SHA-512, with 1 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-512, with 1000 iterations with null length +PASS empty password, empty salt, SHA-512, with 1000 iterations with 0 length +PASS empty password, empty salt, SHA-512, with 1000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512 +PASS empty password, empty salt, SHA-512, with 1000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-512, with 100000 iterations with null length +PASS empty password, empty salt, SHA-512, with 100000 iterations with 0 length +PASS empty password, empty salt, SHA-512, with 100000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512 +PASS empty password, empty salt, SHA-512, with 100000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-512, with 0 iterations +PASS empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-1, with 1 iterations with null length +PASS empty password, empty salt, SHA-1, with 1 iterations with 0 length +PASS empty password, empty salt, SHA-1, with 1 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1 +PASS empty password, empty salt, SHA-1, with 1 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-1, with 1000 iterations with null length +PASS empty password, empty salt, SHA-1, with 1000 iterations with 0 length +PASS empty password, empty salt, SHA-1, with 1000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1 +PASS empty password, empty salt, SHA-1, with 1000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-1, with 100000 iterations with null length +PASS empty password, empty salt, SHA-1, with 100000 iterations with 0 length +PASS empty password, empty salt, SHA-1, with 100000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1 +PASS empty password, empty salt, SHA-1, with 100000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-1, with 0 iterations +PASS empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-256, with 1 iterations with null length +PASS empty password, empty salt, SHA-256, with 1 iterations with 0 length +PASS empty password, empty salt, SHA-256, with 1 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256 +PASS empty password, empty salt, SHA-256, with 1 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-256, with 1000 iterations with null length +PASS empty password, empty salt, SHA-256, with 1000 iterations with 0 length +PASS empty password, empty salt, SHA-256, with 1000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256 +PASS empty password, empty salt, SHA-256, with 1000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +FAIL Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-256, with 100000 iterations with null length +PASS empty password, empty salt, SHA-256, with 100000 iterations with 0 length +PASS empty password, empty salt, SHA-256, with 100000 iterations with non-multiple of 8 length +PASS empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256 +PASS empty password, empty salt, SHA-256, with 100000 iterations with missing deriveBits usage +PASS empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key +PASS empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, SHA-256, with 0 iterations +PASS empty password, empty salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, PBKDF2, with 1 iterations +PASS empty password, empty salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, PBKDF2, with 1000 iterations +PASS empty password, empty salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2 +PASS Derived key of type name: AES-CBC length: 128 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 192 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CBC length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 128 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 192 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-CTR length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 128 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 192 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-GCM length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 128 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 192 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: AES-KW length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-1 length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-256 length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-384 length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +PASS Derived key of type name: HMAC hash: SHA-512 length: 256 using empty password, empty salt, PBKDF2, with 100000 iterations +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-color-clip.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-color-clip.html new file mode 100644 index 0000000..961e161 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-color-clip.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Background Color Clip</title> +<link rel="match" href="reference/background-color-clip.html"> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#background-color"> +<meta name="assert" content="Check that the background color is clipped according to the background-clip value associated with the bottom-most background image layer."> +<style> + div { + width: 120px; + height: 100px; + background-color: green; + background-clip: border-box, content-box, border-box; + background-image: none, none; + border-style: solid; + border-width: 10px; + border-color: transparent; + } +</style> +<div></div> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-001.htm b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-001.htm index 232fd74..db0a8f5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-001.htm +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-001.htm Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-002.htm b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-002.htm index ce20a5b..d8fbf944 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-002.htm +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-002.htm Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-003-ref.html new file mode 100644 index 0000000..4d55cddd --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-003-ref.html
@@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Blue Box with Green Frame</title> +<style> + #a { + width: 300px; + height: 200px; + position: absolute; + left: 100px; + top: 100px; + border-width: 50px; + border-style: solid; + border-image: linear-gradient(green, green); + background-color: blue; + background-clip: content-box; + border-image-slice: 33%; + padding-left: 100px; + padding-top: 50px; + padding-right: 10px; + padding-bottom: 50px; + } +</style> +<div id="a"></div> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-003.html new file mode 100644 index 0000000..27bc026 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/border-image-outset-003.html
@@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Background Image Outset</title> +<link rel="match" href="border-image-outset-003-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#border-image-outset" /> +<style> + #a { + width: 300px; + height: 200px; + position: absolute; + left: 200px; + top: 150px; + border-width: 50px; + border-style: solid; + border-image: linear-gradient(green, green); + background-color: blue; + background-clip: content-box; + border-image-outset: 50px 10px 50px 100px; + border-image-slice: 33%; + } +</style> +<div id="a"></div> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/reference/background-color-clip.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/reference/background-color-clip.html new file mode 100644 index 0000000..18e80a9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/reference/background-color-clip.html
@@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Green Rectangle</title> +<style> + div { + width: 120px; + height: 100px; + background-color: green; + background-clip: content-box; + border-style: solid; + border-width: 10px; + border-color: transparent; + } +</style> +<div></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html index 0573ab0..0a2f2ff7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html
@@ -36,6 +36,34 @@ // list.deviceId // list.groupId }, "mediaDevices.getUserMedia() is present on navigator"); + +promise_test(t => { + return navigator.mediaDevices.enumerateDevices() + .then(t.step_func(async devices => { + for (var i in devices) { + await navigator.mediaDevices.getUserMedia( + {video: {groupId: {exact: devices[i].groupId}}}) + .then( + t.step_func(stream => { + var found_device = devices.find(element => { + return element.deviceId == + stream.getTracks()[0].getSettings().deviceId; + }); + assert_true(undefined !== found_device); + assert_equals(found_device.kind, "videoinput"); + assert_equals(found_device.groupId, devices[i].groupId); + }), + t.step_func(error => { + assert_equals(error.name, "OverconstrainedError"); + assert_equals(error.constraint, "groupId"); + var found_device = devices.find(element => { + return element.kind == "videoinput" && + element.groupId == devices[i].groupId}); + assert_true(undefined === found_device); + })); + } + })); +}, 'groupId is correctly supported by getUserMedia() for video devices'); </script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html new file mode 100644 index 0000000..00566950 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html
@@ -0,0 +1,57 @@ +<!doctype html> +<title>MediaStreamTrack applyConstraints</title> +<p class="instructions">When prompted, accept to share your video stream.</p> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> + 'use strict' + + // https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-applyconstraints + + promise_test(t => { + return navigator.mediaDevices.getUserMedia({ video: true }) + .then(t.step_func(stream => { + return stream.getVideoTracks()[0].applyConstraints( + { groupId: { exact: "INVALID" } }).then( + t.unreached_func('Accepted invalid groupID'), + t.step_func(e => { + assert_equals(e.name, 'OverconstrainedError'); + assert_equals(e.constraint, 'groupId'); + })); + })); + }, 'applyConstraints rejects invalid groupID'); + + promise_test(t => { + return navigator.mediaDevices.getUserMedia({ video: true }) + .then(t.step_func(stream => { + var track = stream.getVideoTracks()[0]; + var groupId = track.getSettings().groupId; + return track.applyConstraints({ groupId: "INVALID" }).then( + t.step_func(() => { + assert_equals(track.getSettings().groupId, groupId); + })); + })); + }, 'applyConstraints accepts invalid ideal groupID, does not change setting'); + + promise_test(t => { + return navigator.mediaDevices.getUserMedia({ video: true }) + .then(t.step_func(stream => { + var track = stream.getVideoTracks()[0]; + var groupId = track.getSettings().groupId; + return navigator.mediaDevices.enumerateDevices().then(devices => { + var anotherDevice = devices.find(device => { + return device.kind == "videoinput" && device.groupId != groupId; + }); + if (anotherDevice !== undefined) { + return track.applyConstraints( + { groupId: { exact: anotherDevice.groupId } }).then( + t.unreached_func(), + t.step_func(e => { + assert_equals(e.name, 'OverconstrainedError'); + assert_equals(e.constraint, 'groupId'); + })); + } + }); + })); + }, 'applyConstraints rejects attempt to switch device using groupId'); +</script>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/emulation/performance-return-real-time-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/emulation/performance-return-real-time-expected.txt deleted file mode 100644 index 645644c..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/emulation/performance-return-real-time-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -Tests that perf metrics return real time even if there is a virtual time override in place. -Does real time advance? true. -Does virtual time advance? false. -Is script duration increased? true. -
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/emulation/performance-return-real-time.js b/third_party/WebKit/LayoutTests/inspector-protocol/emulation/performance-return-real-time.js deleted file mode 100644 index 47fcfa4c..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/emulation/performance-return-real-time.js +++ /dev/null
@@ -1,41 +0,0 @@ -(async function(testRunner) { - let {page, session, dp} = await testRunner.startHTML(` - <script> - function f(x) { return x > 1 ? f(x-1) + x : 1; } - // Function returns true if the JavaScript time does advance during the - // computation. - function doesJavaScriptTimeAdvance() { - let event = new Event('test'); - let rv = false; - addEventListener('test', () => { - start = Date.now(); - for (let x = 0; x < 10000; x++) { f(1000); } - rv = Date.now() > start; - }, false); - dispatchEvent(event); - return rv; - } - </script> - `, 'Tests that perf metrics return real time even if there is a virtual time override in place.'); - - let v = await session.evaluate("doesJavaScriptTimeAdvance()"); - testRunner.log(`Does real time advance? ${v}.`); - - await dp.Performance.enable(); - await dp.Emulation.setVirtualTimePolicy( - {policy: 'advance', initialVirtualTime: 1234567890}); - let before = await getScriptDuration(); - v = await session.evaluate("doesJavaScriptTimeAdvance()"); - testRunner.log(`Does virtual time advance? ${v}.`); - let after = await getScriptDuration(); - testRunner.log(`Is script duration increased? ${after > before}.`); - - async function getScriptDuration() { - const {result:{metrics}} = await dp.Performance.getMetrics(); - //testRunner.log(metrics); - const metric = metrics.find(metric => metric.name === "ScriptDuration"); - return metric.value; - } - - testRunner.completeTest(); -})
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html b/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html index 014c280..b853d323 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html +++ b/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html
@@ -19,7 +19,7 @@ var layerTree = internals.layerTreeAsText( document, internals.LAYER_TREE_INCLUDES_PAINT_INVALIDATIONS); var layers = JSON.parse(layerTree)['layers']; - var scrollingContentsLayer = internals.runtimeFlags.rootLayerScrollingEnabled ? layers[2] : layers[0]; + var scrollingContentsLayer = layers[2]; var paintInvalidations = scrollingContentsLayer.paintInvalidations; internals.stopTrackingRepaints(document);
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation.html b/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation.html index 2fde72d..db86681c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation.html +++ b/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation.html
@@ -41,7 +41,7 @@ return; var layers_dump = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_PAINT_INVALIDATIONS); var layers = JSON.parse(layers_dump).layers; - var scrollingContentsLayer = internals.runtimeFlags.rootLayerScrollingEnabled ? layers[2] : layers[0]; + var scrollingContentsLayer = layers[2]; var paintInvalidations = scrollingContentsLayer.paintInvalidations; var shadowRect = [1.4, 1.4, 100, 100]; assert_true(paintInvalidations.some(paintInvalidation => rectContainsRect(paintInvalidation.rect, shadowRect)),
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link-expected.html b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link-expected.html new file mode 100644 index 0000000..af29a579 --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link-expected.html
@@ -0,0 +1,4 @@ +<!DOCTYPE html> +<div id="table" style="display: table"> + <a href="#" style="background: green">When hovered, the background should be green.</a> +</div>
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link-expected.txt deleted file mode 100644 index 700debf..0000000 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -When hovered, the background should have the same color as this text.
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link.html b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link.html index fd87f26..2209d24 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link.html +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-hover-on-link.html
@@ -1,56 +1,34 @@ <!DOCTYPE html> -<html> -<head> -<script src="../../../resources/ahem.js"></script> <style> -html { - font-size: 10px; - font-family: Ahem; - -webkit-font-smoothing: none; -} - a { - color: #0F0; - background: #F00; + background: red; } a:hover { - background: #0F0; + background: green; } - #table { - display: table; - overflow: hidden; + display: table; + overflow: hidden; } </style> +<script src="../../../resources/run-after-layout-and-paint.js"></script> <script> - function runTest() - { - if (window.testRunner) - window.testRunner.dumpAsTextWithPixelResults(); +onload = function() { + var tableBox = table.getBoundingClientRect(); + var tableCenterX = (tableBox.left + tableBox.right) / 2; + var tableCenterY = (tableBox.top + tableBox.bottom) / 2; - var table = document.getElementById("table"); - var tableBox = table.getBoundingClientRect(); - var tableCenterX = (tableBox.left + tableBox.right) / 2; - var tableCenterY = (tableBox.top + tableBox.bottom) / 2; + if (window.eventSender) + eventSender.mouseMoveTo(tableCenterX, tableCenterY); - if (window.eventSender) { - eventSender.mouseMoveTo(tableCenterX, tableCenterY); - eventSender.mouseDown(); - eventSender.mouseUp(); - } - window.stop(); - } - window.addEventListener("load", runTest); + runAfterLayoutAndPaint(function() {}, true); +} </script> -</head> -<body> <!-- - REGRESSION(r110072): :hover doesn't work on table child with overflow: hidden - http://webkit.org/b/81460 - To test this bug outside DRT, hover on the link below. + REGRESSION(r110072): :hover doesn't work on table child with overflow: hidden + http://webkit.org/b/81460 + To test this bug outside DRT, hover on the link below. --> <div id="table"> - <a href="inexistant_resources.html" >When hovered, the background should have the same color as this text.</a> + <a href="#" >When hovered, the background should be green.</a> </div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-hover-on-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-hover-on-link-expected.png deleted file mode 100644 index 9f47afc..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-hover-on-link-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-hover-on-link-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-hover-on-link-expected.png deleted file mode 100644 index 24891c6..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-hover-on-link-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-duration-expected.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-duration-expected.html new file mode 100644 index 0000000..cecef29 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-duration-expected.html
@@ -0,0 +1,13 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + background-color: #00ff00; + will-change: transform; + transform: translateY(100px); + opacity: 0.8; +} +</style> + +<div id="box"></div>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-duration.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-duration.html new file mode 100644 index 0000000..922d0288 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-duration.html
@@ -0,0 +1,67 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + background-color: #00ff00; +} +</style> + +<div id="box"></div> + +<script id="visual_update" type="text/worklet"> +registerAnimator("test_animator", class { + animate(currentTime, effect) { + effect.localTime = 0.5; + } +}); +</script> + +<script src="resources/animation-worklet-tests.js"></script> + +<script> +if (window.testRunner) { + testRunner.waitUntilDone(); +} + +runInAnimationWorklet( + document.getElementById('visual_update').textContent +).then(() => { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + [ + { transform: 'translateY(0px)' }, + { transform: 'translateY(200px)' } + ], { + duration: 1, + } + ); + + const animation = new WorkletAnimation('test_animator', effect, document.timeline, {}); + animation.play(); + + // The WorkletAnimation should continue to be in effect forever, even if its + // duration is passed. + // + // The animation is specified to last for 1 millisecond, but we wait for 500ms + // to be safe. This is definitely risking flake, but until we start forwarding + // style changes to the main thread there's not much else we can do here. + setTimeout(function() { + // TODO(crbug.com/829926): At the moment a worklet animation ending does not + // cause a commit from main to impl which means impl continues to have its + // last animated value even after cancelling. This is certainly a bug! But + // for now force a commit by manually updating the opacity. + // + // Note that this is only required in the case where this test would *fail*. + // We want to be sure we spot the WorkletAnimation incorrectly ending early, + // so we need to force a redraw. + box.style.opacity = 0.8; + + if (window.testRunner) { + waitTwoAnimationFrames(_ => { + testRunner.notifyDone(); + }); + } + }, 500); +}); +</script>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-after-duration-expected.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-after-duration-expected.html new file mode 100644 index 0000000..0baa4b7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-after-duration-expected.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + background-color: #00ff00; + will-change: transform; + transform: translateY(200px); +} +</style> + +<div id="box"></div>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-after-duration.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-after-duration.html new file mode 100644 index 0000000..6b19387 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-after-duration.html
@@ -0,0 +1,51 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + background-color: #00ff00; +} +</style> + +<div id="box"></div> + +<script id="visual_update" type="text/worklet"> +registerAnimator("test_animator", class { + animate(currentTime, effect) { + // The local time should be trimmed by the duration, e.g. this is equivalent + // to effect.localTime = 1000; + effect.localTime = 5000; + } +}); +</script> + +<script src="resources/animation-worklet-tests.js"></script> + +<script> +if (window.testRunner) { + testRunner.waitUntilDone(); +} + +runInAnimationWorklet( + document.getElementById('visual_update').textContent +).then(() => { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + [ + { transform: 'translateY(0px)' }, + { transform: 'translateY(200px)' } + ], { + duration: 1000, + } + ); + + const animation = new WorkletAnimation('test_animator', effect, document.timeline, {}); + animation.play(); + + if (window.testRunner) { + waitTwoAnimationFrames(_ => { + testRunner.notifyDone(); + }); + } +}); +</script>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-before-start-expected.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-before-start-expected.html new file mode 100644 index 0000000..0baa4b7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-before-start-expected.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + background-color: #00ff00; + will-change: transform; + transform: translateY(200px); +} +</style> + +<div id="box"></div>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-before-start.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-before-start.html new file mode 100644 index 0000000..dcf54cd4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-local-time-before-start.html
@@ -0,0 +1,51 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + background-color: #00ff00; +} +</style> + +<div id="box"></div> + +<script id="visual_update" type="text/worklet"> +registerAnimator("test_animator", class { + animate(currentTime, effect) { + // The local time should be trimmed by the duration, e.g. this is equivalent + // to effect.localTime = 0; + effect.localTime = -500; + } +}); +</script> + +<script src="resources/animation-worklet-tests.js"></script> + +<script> +if (window.testRunner) { + testRunner.waitUntilDone(); +} + +runInAnimationWorklet( + document.getElementById('visual_update').textContent +).then(() => { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + [ + { transform: 'translateY(200px)' }, + { transform: 'translateY(0px)' } + ], { + duration: 1000, + } + ); + + const animation = new WorkletAnimation('test_animator', effect, document.timeline, {}); + animation.play(); + + if (window.testRunner) { + waitTwoAnimationFrames(_ => { + testRunner.notifyDone(); + }); + } +}); +</script>
diff --git a/third_party/blink/public/platform/modules/mediastream/media_devices.mojom b/third_party/blink/public/platform/modules/mediastream/media_devices.mojom index a7f6f07..a096ea6 100644 --- a/third_party/blink/public/platform/modules/mediastream/media_devices.mojom +++ b/third_party/blink/public/platform/modules/mediastream/media_devices.mojom
@@ -28,6 +28,7 @@ struct VideoInputDeviceCapabilities { string device_id; + string group_id; array<media.mojom.VideoCaptureFormat> formats; FacingMode facing_mode; };
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h index f8c74fd..3ab92de 100644 --- a/third_party/blink/public/platform/platform.h +++ b/third_party/blink/public/platform/platform.h
@@ -302,9 +302,6 @@ // hash must have been generated by calling VisitedLinkHash(). virtual bool IsLinkVisited(unsigned long long link_hash) { return false; } - // Return the number of of processors of the current machine. - virtual size_t NumberOfProcessors() { return 0; } - static const size_t kNoDecodedImageByteLimit = static_cast<size_t>(-1); // Returns the maximum amount of memory a decoded image should be allowed.
diff --git a/third_party/blink/renderer/DEPS b/third_party/blink/renderer/DEPS index 8db0f70..268b6d82 100644 --- a/third_party/blink/renderer/DEPS +++ b/third_party/blink/renderer/DEPS
@@ -14,6 +14,7 @@ "+base/sequenced_task_runner.h", "+base/single_thread_task_runner.h", "+base/stl_util.h", + "+base/sys_info.h", "+base/task_scheduler/post_task.h", "+base/thread_annotations.h", "+base/threading/thread_checker.h",
diff --git a/third_party/blink/renderer/bindings/scripts/v8_types.py b/third_party/blink/renderer/bindings/scripts/v8_types.py index 3c6dacf..09682084 100644 --- a/third_party/blink/renderer/bindings/scripts/v8_types.py +++ b/third_party/blink/renderer/bindings/scripts/v8_types.py
@@ -268,8 +268,8 @@ return cpp_template_type('Member', implemented_as_class) if idl_type.is_dictionary: if used_as_rvalue_type: - return 'const %s&' % base_idl_type - return base_idl_type + return 'const %s&' % idl_type.implemented_as + return idl_type.implemented_as if idl_type.is_union_type: # Avoid "AOrNullOrB" for cpp type of (A? or B) because we generate # V8AOrBOrNull to handle nulle for (A? or B), (A or B?) and (A or B)?
diff --git a/third_party/blink/renderer/core/dom/element_visibility_observer_test.cc b/third_party/blink/renderer/core/dom/element_visibility_observer_test.cc index 3cf8471..5cc0d1a 100644 --- a/third_party/blink/renderer/core/dom/element_visibility_observer_test.cc +++ b/third_party/blink/renderer/core/dom/element_visibility_observer_test.cc
@@ -7,56 +7,27 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/dom_implementation.h" -#include "third_party/blink/renderer/core/frame/remote_frame.h" +#include "third_party/blink/renderer/core/exported/web_remote_frame_impl.h" +#include "third_party/blink/renderer/core/frame/frame_test_helpers.h" +#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" #include "third_party/blink/renderer/core/html/html_div_element.h" #include "third_party/blink/renderer/core/html/html_document.h" #include "third_party/blink/renderer/core/loader/empty_clients.h" -#include "third_party/blink/renderer/core/testing/page_test_base.h" namespace blink { namespace { -// Stub implementation of LocalFrameClient for the purpose of testing. It will -// alow callers to set the parent/top frames by calling |setParent|. It is used -// in ElementVisibilityObserverTest in order to mock a RemoteFrame parent of a -// LocalFrame. -class DOMStubLocalFrameClient final : public EmptyLocalFrameClient { - public: - Frame* Parent() const override { return parent_; } - Frame* Top() const override { return parent_; } - - void SetParent(Frame* frame) { parent_ = frame; } - - void Trace(blink::Visitor* visitor) override { - visitor->Trace(parent_); - EmptyLocalFrameClient::Trace(visitor); - } - - private: - WeakMember<Frame> parent_ = nullptr; -}; - -class ElementVisibilityObserverTest : public PageTestBase { +class ElementVisibilityObserverTest : public ::testing::Test { protected: - void SetUp() override { - local_frame_client_ = new DOMStubLocalFrameClient(); - SetupPageWithClients(nullptr, local_frame_client_, nullptr); - } - - void TearDown() override { GetFrame().Detach(FrameDetachType::kRemove); } - - DOMStubLocalFrameClient* LocalFrameClient() const { - return local_frame_client_; - } - - private: - Persistent<DOMStubLocalFrameClient> local_frame_client_; + FrameTestHelpers::WebViewHelper helper_; }; TEST_F(ElementVisibilityObserverTest, ObserveElementWithoutDocumentFrame) { + helper_.Initialize(); + Document& document = *helper_.LocalMainFrame()->GetFrame()->GetDocument(); HTMLElement* element = HTMLDivElement::Create( - *DOMImplementation::Create(GetDocument())->createHTMLDocument("test")); + *DOMImplementation::Create(document)->createHTMLDocument("test")); ElementVisibilityObserver* observer = new ElementVisibilityObserver( element, ElementVisibilityObserver::VisibilityCallback()); observer->Start(); @@ -64,12 +35,14 @@ // It should not crash. } -TEST_F(ElementVisibilityObserverTest, ObserveElementInRemoteFrame) { - Persistent<RemoteFrame> remote_frame = - RemoteFrame::Create(new EmptyRemoteFrameClient(), GetPage(), nullptr); - LocalFrameClient()->SetParent(remote_frame); +TEST_F(ElementVisibilityObserverTest, ObserveElementWithRemoteFrameParent) { + helper_.InitializeRemote(); - Persistent<HTMLElement> element = HTMLDivElement::Create(GetDocument()); + WebLocalFrameImpl* child_frame = + FrameTestHelpers::CreateLocalChild(*helper_.RemoteMainFrame()); + Document& document = *child_frame->GetFrame()->GetDocument(); + + Persistent<HTMLElement> element = HTMLDivElement::Create(document); ElementVisibilityObserver* observer = new ElementVisibilityObserver(element, WTF::BindRepeating([](bool) {})); observer->Start();
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 80d6c90..71d1aaa 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -330,8 +330,14 @@ } void LocalFrame::Detach(FrameDetachType type) { - // Note that detach() can be re-entered, so it's not possible to - // DCHECK(isAttached()) here. + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // BEGIN RE-ENTRANCY SAFE BLOCK + // Starting here, the code must be safe against re-entrancy. Dispatching + // events, et cetera can run Javascript, which can reenter Detach(). + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + // Detach() can be re-entered, this can't simply DCHECK(IsAttached()). + DCHECK_NE(lifecycle_.GetState(), FrameLifecycle::kDetached); lifecycle_.AdvanceTo(FrameLifecycle::kDetaching); if (IsLocalRoot()) { @@ -381,6 +387,14 @@ if (!Client()) return; + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // END RE-ENTRANCY SAFE BLOCK + // Past this point, no script should be executed. If this method was + // re-entered, then check for a non-null Client() above should have already + // returned. + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + DCHECK_NE(lifecycle_.GetState(), FrameLifecycle::kDetached); + // TODO(crbug.com/729196): Trace why LocalFrameView::DetachFromLayout crashes. CHECK(!view_->IsAttached()); Client()->WillBeDetached(); @@ -525,6 +539,12 @@ CustomCountHistogram, freeze_histogram, ("DocumentEventTiming.FreezeDuration", 0, 10000000, 50)); freeze_histogram.Count((freeze_event_end - freeze_event_start) * 1000000.0); + // TODO(fmeawad): Move the following logic to the page once we have a + // PageResourceCoordinator in Blink. http://crbug.com/838415 + if (auto* frame_resource_coordinator = GetFrameResourceCoordinator()) { + frame_resource_coordinator->SetLifecycleState( + resource_coordinator::mojom::LifecycleState::kFrozen); + } } } @@ -538,6 +558,12 @@ CustomCountHistogram, resume_histogram, ("DocumentEventTiming.ResumeDuration", 0, 10000000, 50)); resume_histogram.Count((resume_event_end - resume_event_start) * 1000000.0); + // TODO(fmeawad): Move the following logic to the page once we have a + // PageResourceCoordinator in Blink + if (auto* frame_resource_coordinator = GetFrameResourceCoordinator()) { + frame_resource_coordinator->SetLifecycleState( + resource_coordinator::mojom::LifecycleState::kRunning); + } } }
diff --git a/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc b/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc index dfb18727..800e852 100644 --- a/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc +++ b/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc
@@ -4,12 +4,12 @@ #include "third_party/blink/renderer/core/frame/navigator_concurrent_hardware.h" -#include "third_party/blink/public/platform/platform.h" +#include "base/sys_info.h" namespace blink { unsigned NavigatorConcurrentHardware::hardwareConcurrency() const { - return Platform::Current()->NumberOfProcessors(); + return static_cast<unsigned>(base::SysInfo::NumberOfProcessors()); } } // namespace blink
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h index 0b47abc..b5ef7e2 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h
@@ -63,11 +63,8 @@ public: ~CanvasRenderingContext() override = default; - // A Canvas can either be "2D" or "webgl" but never both. If you request a 2D - // canvas and the existing context is already 2D, just return that. If the - // existing context is WebGL, then destroy it before creating a new 2D - // context. Vice versa when requesting a WebGL canvas. Requesting a context - // with any other type string will destroy any existing context. + // A Canvas can either be "2D" or "webgl" but never both. Requesting a context + // with a type different from an existing will destroy the latter. enum ContextType { // Do not change assigned numbers of existing items: add new features to the // end of the list.
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index 1d360fe2c..5da11c8 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -52,6 +52,7 @@ #include "third_party/blink/renderer/core/frame/use_counter.h" #include "third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h" #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h" +#include "third_party/blink/renderer/core/html/canvas/canvas_draw_listener.h" #include "third_party/blink/renderer/core/html/canvas/canvas_font_cache.h" #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h" #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_factory.h"
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h index d3bef60b..dd42690 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
@@ -37,7 +37,6 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/context_lifecycle_observer.h" #include "third_party/blink/renderer/core/dom/document.h" -#include "third_party/blink/renderer/core/html/canvas/canvas_draw_listener.h" #include "third_party/blink/renderer/core/html/canvas/canvas_image_source.h" #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h" #include "third_party/blink/renderer/core/html/html_element.h" @@ -62,6 +61,7 @@ class Canvas2DLayerBridge; class CanvasColorParams; class CanvasContextCreationAttributesCore; +class CanvasDrawListener; class CanvasRenderingContext; class CanvasRenderingContextFactory; class GraphicsContext;
diff --git a/third_party/blink/renderer/core/inspector/DEPS b/third_party/blink/renderer/core/inspector/DEPS index 5676a4a..11ab397 100644 --- a/third_party/blink/renderer/core/inspector/DEPS +++ b/third_party/blink/renderer/core/inspector/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+base/time/time_override.h", "+base/sampling_heap_profiler/sampling_heap_profiler.h", # for base::GetUniqueIdForProcess "+base/process/process_handle.h",
diff --git a/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc b/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc index d04403e..32a631f93 100644 --- a/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc
@@ -4,9 +4,6 @@ #include "third_party/blink/renderer/core/inspector/inspector_performance_agent.h" -#include <utility> - -#include "base/time/time_override.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/inspector/inspected_frames.h" @@ -56,10 +53,8 @@ state_->setBoolean(kPerformanceAgentEnabled, true); instrumenting_agents_->addInspectorPerformanceAgent(this); Platform::Current()->CurrentThread()->AddTaskTimeObserver(this); - layout_start_ticks_ = TimeTicks(); - recalc_style_start_ticks_ = TimeTicks(); - task_start_ticks_ = TimeTicks(); - script_start_ticks_ = TimeTicks(); + task_start_time_ = TimeTicks(); + script_start_time_ = TimeTicks(); return Response::OK(); } @@ -95,8 +90,8 @@ std::unique_ptr<protocol::Array<protocol::Performance::Metric>> result = protocol::Array<protocol::Performance::Metric>::create(); - AppendMetric(result.get(), "Timestamp", - TimeTicksInSeconds(CurrentTimeTicks())); + TimeTicks now = CurrentTimeTicks(); + AppendMetric(result.get(), "Timestamp", TimeTicksInSeconds(now)); // Renderer instance counters. for (size_t i = 0; i < ARRAY_SIZE(kInstanceCounterNames); ++i) { @@ -106,7 +101,6 @@ } // Page performance metrics. - TimeTicks now = base::subtle::TimeTicksNowIgnoringOverride(); AppendMetric(result.get(), "LayoutCount", static_cast<double>(layout_count_)); AppendMetric(result.get(), "RecalcStyleCount", static_cast<double>(recalc_style_count_)); @@ -114,12 +108,12 @@ AppendMetric(result.get(), "RecalcStyleDuration", recalc_style_duration_.InSecondsF()); TimeDelta script_duration = script_duration_; - if (!script_start_ticks_.is_null()) - script_duration += now - script_start_ticks_; + if (!script_start_time_.is_null()) + script_duration += now - script_start_time_; AppendMetric(result.get(), "ScriptDuration", script_duration.InSecondsF()); TimeDelta task_duration = task_duration_; - if (!task_start_ticks_.is_null()) - task_duration += now - task_start_ticks_; + if (!task_start_time_.is_null()) + task_duration += now - task_start_time_; AppendMetric(result.get(), "TaskDuration", task_duration.InSecondsF()); v8::HeapStatistics heap_statistics; @@ -155,67 +149,60 @@ GetFrontend()->metrics(std::move(metrics), title); } -void InspectorPerformanceAgent::ScriptStarts() { - if (!script_call_depth_++) - script_start_ticks_ = base::subtle::TimeTicksNowIgnoringOverride(); -} - -void InspectorPerformanceAgent::ScriptEnds() { - if (--script_call_depth_) - return; - script_duration_ += - base::subtle::TimeTicksNowIgnoringOverride() - script_start_ticks_; - script_start_ticks_ = TimeTicks(); -} - void InspectorPerformanceAgent::Will(const probe::CallFunction& probe) { - ScriptStarts(); + if (!script_call_depth_++) + script_start_time_ = probe.CaptureStartTime(); } void InspectorPerformanceAgent::Did(const probe::CallFunction& probe) { - ScriptEnds(); + if (--script_call_depth_) + return; + script_duration_ += probe.Duration(); + script_start_time_ = TimeTicks(); } void InspectorPerformanceAgent::Will(const probe::ExecuteScript& probe) { - ScriptStarts(); + if (!script_call_depth_++) + script_start_time_ = probe.CaptureStartTime(); } void InspectorPerformanceAgent::Did(const probe::ExecuteScript& probe) { - ScriptEnds(); + if (--script_call_depth_) + return; + script_duration_ += probe.Duration(); + script_start_time_ = TimeTicks(); } void InspectorPerformanceAgent::Will(const probe::RecalculateStyle& probe) { - recalc_style_start_ticks_ = base::subtle::TimeTicksNowIgnoringOverride(); + probe.CaptureStartTime(); } void InspectorPerformanceAgent::Did(const probe::RecalculateStyle& probe) { - recalc_style_duration_ += - base::subtle::TimeTicksNowIgnoringOverride() - recalc_style_start_ticks_; + recalc_style_duration_ += probe.Duration(); recalc_style_count_++; } void InspectorPerformanceAgent::Will(const probe::UpdateLayout& probe) { if (!layout_depth_++) - layout_start_ticks_ = base::subtle::TimeTicksNowIgnoringOverride(); + probe.CaptureStartTime(); } void InspectorPerformanceAgent::Did(const probe::UpdateLayout& probe) { if (--layout_depth_) return; - layout_duration_ += - base::subtle::TimeTicksNowIgnoringOverride() - layout_start_ticks_; + layout_duration_ += probe.Duration(); layout_count_++; } void InspectorPerformanceAgent::WillProcessTask(double start_time) { - task_start_ticks_ = TimeTicksFromSeconds(start_time); + task_start_time_ = TimeTicksFromSeconds(start_time); } void InspectorPerformanceAgent::DidProcessTask(double start_time, double end_time) { - if (task_start_ticks_ == TimeTicksFromSeconds(start_time)) + if (task_start_time_ == TimeTicksFromSeconds(start_time)) task_duration_ += TimeDelta::FromSeconds(end_time - start_time); - task_start_ticks_ = TimeTicks(); + task_start_time_ = TimeTicks(); } void InspectorPerformanceAgent::Trace(blink::Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/inspector/inspector_performance_agent.h b/third_party/blink/renderer/core/inspector/inspector_performance_agent.h index 210e7c2c..3d6cec93 100644 --- a/third_party/blink/renderer/core/inspector/inspector_performance_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_performance_agent.h
@@ -5,8 +5,6 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_PERFORMANCE_AGENT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_PERFORMANCE_AGENT_H_ -#include <memory> - #include "base/macros.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/inspector/inspector_base_agent.h" @@ -61,20 +59,16 @@ void DidProcessTask(double start_time, double end_time) override; private: - explicit InspectorPerformanceAgent(InspectedFrames*); - void ScriptStarts(); - void ScriptEnds(); + InspectorPerformanceAgent(InspectedFrames*); Member<InspectedFrames> inspected_frames_; bool enabled_ = false; TimeDelta layout_duration_; - TimeTicks layout_start_ticks_; TimeDelta recalc_style_duration_; - TimeTicks recalc_style_start_ticks_; TimeDelta script_duration_; - TimeTicks script_start_ticks_; + TimeTicks script_start_time_; TimeDelta task_duration_; - TimeTicks task_start_ticks_; + TimeTicks task_start_time_; unsigned long long layout_count_ = 0; unsigned long long recalc_style_count_ = 0; int script_call_depth_ = 0;
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index e87c1403..dc89b93 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -743,10 +743,7 @@ void Page::WillBeDestroyed() { Frame* main_frame = main_frame_; - // TODO(sashab): Remove this check, the call to detach() here should always - // work. - if (main_frame->IsAttached()) - main_frame->Detach(FrameDetachType::kRemove); + main_frame->Detach(FrameDetachType::kRemove); DCHECK(AllPages().Contains(this)); AllPages().erase(this);
diff --git a/third_party/blink/renderer/modules/mediastream/media_devices_test.cc b/third_party/blink/renderer/modules/mediastream/media_devices_test.cc index 71789c15..eab5ff0 100644 --- a/third_party/blink/renderer/modules/mediastream/media_devices_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_devices_test.cc
@@ -2,13 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "third_party/blink/renderer/modules/mediastream/media_devices.h" + +#include <memory> +#include <utility> + #include "mojo/public/cpp/bindings/binding.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/bindings/core/v8/exception_state.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/core/testing/null_execution_context.h" -#include "third_party/blink/renderer/modules/mediastream/media_devices.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_constraints.h" #include "third_party/blink/renderer/platform/testing/testing_platform_support.h" @@ -21,6 +25,8 @@ const char kFakeAudioInputDeviceId2[] = "fake_audio_input 2"; const char kFakeVideoInputDeviceId1[] = "fake_video_input 1"; const char kFakeVideoInputDeviceId2[] = "fake_video_input 2"; +const char kFakeCommonGroupId1[] = "fake_group 1"; +const char kFakeVideoInputGroupId2[] = "fake_video_input_group 2"; const char kFakeAudioOutputDeviceId1[] = "fake_audio_output 1"; class MockMediaDevicesDispatcherHost @@ -42,7 +48,7 @@ device_info = mojom::blink::MediaDeviceInfo::New(); device_info->device_id = kFakeAudioInputDeviceId1; device_info->label = "Fake Audio Input 1"; - device_info->group_id = "fake_group 1"; + device_info->group_id = kFakeCommonGroupId1; enumeration[static_cast<size_t>(MediaDeviceType::MEDIA_AUDIO_INPUT)] .push_back(std::move(device_info)); @@ -57,14 +63,14 @@ device_info = mojom::blink::MediaDeviceInfo::New(); device_info->device_id = kFakeVideoInputDeviceId1; device_info->label = "Fake Video Input 1"; - device_info->group_id = ""; + device_info->group_id = kFakeCommonGroupId1; enumeration[static_cast<size_t>(MediaDeviceType::MEDIA_VIDEO_INPUT)] .push_back(std::move(device_info)); device_info = mojom::blink::MediaDeviceInfo::New(); device_info->device_id = kFakeVideoInputDeviceId2; device_info->label = "Fake Video Input 2"; - device_info->group_id = ""; + device_info->group_id = kFakeVideoInputGroupId2; enumeration[static_cast<size_t>(MediaDeviceType::MEDIA_VIDEO_INPUT)] .push_back(std::move(device_info)); @@ -72,11 +78,13 @@ mojom::blink::VideoInputDeviceCapabilitiesPtr capabilities = mojom::blink::VideoInputDeviceCapabilities::New(); capabilities->device_id = kFakeVideoInputDeviceId1; + capabilities->group_id = kFakeCommonGroupId1; capabilities->facing_mode = blink::mojom::FacingMode::NONE; video_input_capabilities.push_back(std::move(capabilities)); capabilities = mojom::blink::VideoInputDeviceCapabilities::New(); capabilities->device_id = kFakeVideoInputDeviceId2; + capabilities->group_id = kFakeVideoInputGroupId2; capabilities->facing_mode = blink::mojom::FacingMode::USER; video_input_capabilities.push_back(std::move(capabilities)); } @@ -85,7 +93,7 @@ device_info = mojom::blink::MediaDeviceInfo::New(); device_info->device_id = kFakeAudioOutputDeviceId1; device_info->label = "Fake Audio Input 1"; - device_info->group_id = "fake_group 1"; + device_info->group_id = kFakeCommonGroupId1; enumeration[static_cast<size_t>(MediaDeviceType::MEDIA_AUDIO_OUTPUT)] .push_back(std::move(device_info)); } @@ -320,13 +328,13 @@ EXPECT_FALSE(device->deviceId().IsEmpty()); EXPECT_EQ("videoinput", device->kind()); EXPECT_FALSE(device->label().IsEmpty()); - EXPECT_TRUE(device->groupId().IsEmpty()); + EXPECT_FALSE(device->groupId().IsEmpty()); device = device_infos()[3]; EXPECT_FALSE(device->deviceId().IsEmpty()); EXPECT_EQ("videoinput", device->kind()); EXPECT_FALSE(device->label().IsEmpty()); - EXPECT_TRUE(device->groupId().IsEmpty()); + EXPECT_FALSE(device->groupId().IsEmpty()); // Audio output device. device = device_infos()[4]; @@ -335,7 +343,8 @@ EXPECT_FALSE(device->label().IsEmpty()); EXPECT_FALSE(device->groupId().IsEmpty()); - // Verfify group IDs. + // Verify group IDs. + EXPECT_EQ(device_infos()[0]->groupId(), device_infos()[2]->groupId()); EXPECT_EQ(device_infos()[0]->groupId(), device_infos()[4]->groupId()); EXPECT_NE(device_infos()[1]->groupId(), device_infos()[4]->groupId()); }
diff --git a/third_party/blink/renderer/modules/presentation/presentation_availability_test.cc b/third_party/blink/renderer/modules/presentation/presentation_availability_test.cc index cc4a1c9..74c0702 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_availability_test.cc +++ b/third_party/blink/renderer/modules/presentation/presentation_availability_test.cc
@@ -22,22 +22,27 @@ namespace { TEST(PresentationAvailabilityTest, NoPageVisibilityChangeAfterDetach) { - V8TestingScope scope; - WTF::Vector<KURL> urls; - urls.push_back(URLTestHelpers::ToKURL("https://example.com")); - urls.push_back(URLTestHelpers::ToKURL("https://another.com")); + Page* page = nullptr; + { + V8TestingScope scope; + WTF::Vector<KURL> urls; + urls.push_back(URLTestHelpers::ToKURL("https://example.com")); + urls.push_back(URLTestHelpers::ToKURL("https://another.com")); - Persistent<PresentationAvailabilityProperty> resolver = - new PresentationAvailabilityProperty( - scope.GetExecutionContext(), nullptr, - PresentationAvailabilityProperty::kReady); - Persistent<PresentationAvailability> availability = - PresentationAvailability::Take(resolver, urls, false); + Persistent<PresentationAvailabilityProperty> resolver = + new PresentationAvailabilityProperty( + scope.GetExecutionContext(), nullptr, + PresentationAvailabilityProperty::kReady); + Persistent<PresentationAvailability> availability = + PresentationAvailability::Take(resolver, urls, false); - // These two calls should not crash. - scope.GetFrame().Detach(FrameDetachType::kRemove); - scope.GetPage().SetVisibilityState(mojom::PageVisibilityState::kHidden, - false); + page = &scope.GetPage(); + } + // This should not crash. + // TODO(dcheng): Why are we calling functions on Page after it's been closed? + // This case doesn't seem like it should be reachable as we should be shutting + // down communication from the embedder on context detach. + page->SetVisibilityState(mojom::PageVisibilityState::kHidden, false); } } // anonymous namespace
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc index 10263ece..d7cb2fd6 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -22,15 +22,15 @@ namespace blink { -// CanvasResourceProvider_Texture +// CanvasResourceProviderTexture //============================================================================== // // * Renders to a texture managed by skia. Mailboxes are straight GL textures. // * Layers are not overlay candidates -class CanvasResourceProvider_Texture : public CanvasResourceProvider { +class CanvasResourceProviderTexture : public CanvasResourceProvider { public: - CanvasResourceProvider_Texture( + CanvasResourceProviderTexture( const IntSize& size, unsigned msaa_sample_count, const CanvasColorParams color_params, @@ -41,7 +41,7 @@ std::move(context_provider_wrapper)), msaa_sample_count_(msaa_sample_count) {} - ~CanvasResourceProvider_Texture() override = default; + ~CanvasResourceProviderTexture() override = default; bool IsValid() const final { return GetSkSurface() && !IsGpuContextLost(); } bool IsAccelerated() const final { return true; } @@ -118,28 +118,28 @@ unsigned msaa_sample_count_; }; -// CanvasResourceProvider_Texture_GpuMemoryBuffer +// CanvasResourceProviderTextureGpuMemoryBuffer //============================================================================== // // * Renders to a texture managed by skia. Mailboxes are // gpu-accelerated platform native surfaces. // * Layers are overlay candidates -class CanvasResourceProvider_Texture_GpuMemoryBuffer final - : public CanvasResourceProvider_Texture { +class CanvasResourceProviderTextureGpuMemoryBuffer final + : public CanvasResourceProviderTexture { public: - CanvasResourceProvider_Texture_GpuMemoryBuffer( + CanvasResourceProviderTextureGpuMemoryBuffer( const IntSize& size, unsigned msaa_sample_count, const CanvasColorParams color_params, base::WeakPtr<WebGraphicsContext3DProviderWrapper> context_provider_wrapper) - : CanvasResourceProvider_Texture(size, - msaa_sample_count, - color_params, - std::move(context_provider_wrapper)) {} + : CanvasResourceProviderTexture(size, + msaa_sample_count, + color_params, + std::move(context_provider_wrapper)) {} - ~CanvasResourceProvider_Texture_GpuMemoryBuffer() override = default; + ~CanvasResourceProviderTextureGpuMemoryBuffer() override = default; protected: scoped_refptr<CanvasResource> CreateResource() final { @@ -157,7 +157,7 @@ scoped_refptr<CanvasResource> output_resource = NewOrRecycledResource(); if (!output_resource) { // GpuMemoryBuffer creation failed, fallback to Texture resource - return CanvasResourceProvider_Texture::ProduceFrame(); + return CanvasResourceProviderTexture::ProduceFrame(); } sk_sp<SkImage> image = GetSkSurface()->makeImageSnapshot(); @@ -181,21 +181,21 @@ } }; -// CanvasResourceProvider_Bitmap +// CanvasResourceProviderBitmap //============================================================================== // // * Renders to a skia RAM-backed bitmap // * Mailboxing is not supported : cannot be directly composited -class CanvasResourceProvider_Bitmap final : public CanvasResourceProvider { +class CanvasResourceProviderBitmap final : public CanvasResourceProvider { public: - CanvasResourceProvider_Bitmap(const IntSize& size, - const CanvasColorParams color_params) + CanvasResourceProviderBitmap(const IntSize& size, + const CanvasColorParams color_params) : CanvasResourceProvider(size, color_params, nullptr /*context_provider_wrapper*/) {} - ~CanvasResourceProvider_Bitmap() override = default; + ~CanvasResourceProviderBitmap() override = default; bool IsValid() const final { return GetSkSurface(); } bool IsAccelerated() const final { return false; } @@ -275,35 +275,37 @@ switch (resource_type_fallback_list[i]) { case kTextureGpuMemoryBufferResourceType: DCHECK(SharedGpuContext::IsGpuCompositingEnabled()); - if (RuntimeEnabledFeatures::Canvas2dImageChromiumEnabled()) { - if (!gpu::IsImageFromGpuMemoryBufferFormatSupported( - colorParams.GetBufferFormat(), - context_provider_wrapper->ContextProvider() - ->GetCapabilities())) - continue; - if (!gpu::IsImageSizeValidForGpuMemoryBufferFormat( - gfx::Size(size), colorParams.GetBufferFormat())) - continue; - DCHECK(gpu::IsImageFormatCompatibleWithGpuMemoryBufferFormat( - colorParams.GLInternalFormat(), colorParams.GetBufferFormat())); + if (!RuntimeEnabledFeatures::Canvas2dImageChromiumEnabled()) + break; - provider = - std::make_unique<CanvasResourceProvider_Texture_GpuMemoryBuffer>( - size, msaa_sample_count, colorParams, - context_provider_wrapper); + if (!gpu::IsImageFromGpuMemoryBufferFormatSupported( + colorParams.GetBufferFormat(), + context_provider_wrapper->ContextProvider() + ->GetCapabilities())) { + continue; } + if (!gpu::IsImageSizeValidForGpuMemoryBufferFormat( + gfx::Size(size), colorParams.GetBufferFormat())) { + continue; + } + DCHECK(gpu::IsImageFormatCompatibleWithGpuMemoryBufferFormat( + colorParams.GLInternalFormat(), colorParams.GetBufferFormat())); + + provider = + std::make_unique<CanvasResourceProviderTextureGpuMemoryBuffer>( + size, msaa_sample_count, colorParams, context_provider_wrapper); break; case kTextureResourceType: - // TODO(xlai): Check gpu acclereration mode before using this Resource - // Type of CanvasResourceProvider and then Add + // TODO(xlai): Check gpu acceleration mode before using this Resource + // Type of CanvasResourceProvider and then add // "DCHECK(SharedGpuContext::IsGpuCompositingEnabled());" here. - // See crbug.com/802053. - provider = std::make_unique<CanvasResourceProvider_Texture>( + // See https://crbug.com/802053. + provider = std::make_unique<CanvasResourceProviderTexture>( size, msaa_sample_count, colorParams, context_provider_wrapper); break; case kBitmapResourceType: provider = - std::make_unique<CanvasResourceProvider_Bitmap>(size, colorParams); + std::make_unique<CanvasResourceProviderBitmap>(size, colorParams); break; } if (provider && provider->IsValid())
diff --git a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.cc b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.cc index ddaf7992..95c99cf57 100644 --- a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.cc +++ b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.cc
@@ -27,6 +27,13 @@ service_->SetNetworkAlmostIdle(idle); } +void FrameResourceCoordinator::SetLifecycleState( + resource_coordinator::mojom::LifecycleState state) { + if (!service_) + return; + service_->SetLifecycleState(state); +} + void FrameResourceCoordinator::OnNonPersistentNotificationCreated() { if (!service_) return;
diff --git a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.h b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.h index 1364942..a801a489 100644 --- a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.h +++ b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/frame_resource_coordinator.h
@@ -23,6 +23,7 @@ ~FrameResourceCoordinator(); void SetNetworkAlmostIdle(bool); + void SetLifecycleState(resource_coordinator::mojom::LifecycleState); void OnNonPersistentNotificationCreated(); private:
diff --git a/third_party/blink/tools/audit_non_blink_usage.py b/third_party/blink/tools/audit_non_blink_usage.py index 62de77a8..276e26fd 100755 --- a/third_party/blink/tools/audit_non_blink_usage.py +++ b/third_party/blink/tools/audit_non_blink_usage.py
@@ -40,6 +40,7 @@ 'base::CreateSequencedTaskRunnerWithTraits', 'base::SequencedTaskRunner', 'base::SingleThreadTaskRunner', + 'base::SysInfo', 'base::ThreadChecker', 'base::Time', 'base::TimeDelta', @@ -167,18 +168,12 @@ ], }, { - 'paths': ['third_party/blink/renderer/core/inspector/inspector_memory_agent.cc'], + 'paths': ['third_party/blink/renderer/core/inspector/InspectorMemoryAgent.cpp'], 'allowed': [ 'base::SamplingHeapProfiler', ], }, { - 'paths': ['third_party/blink/renderer/core/inspector/inspector_performance_agent.cc'], - 'allowed': [ - 'base::subtle::TimeTicksNowIgnoringOverride', - ], - }, - { 'paths': [ 'third_party/blink/renderer/modules/device_orientation/', 'third_party/blink/renderer/modules/gamepad/',
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py b/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py index 53e6a11..a35dde81 100644 --- a/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py +++ b/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py
@@ -18,23 +18,50 @@ _log = logging.getLogger(__file__) +# TODO(robertma): Use the official wpt.manifest module. + class WPTManifest(object): + """A simple abstraction of WPT MANIFEST.json. + + The high-level structure of the manifest is as follows: + { + "items": { + "manual": { + "file/path": [manifest items], + ... + }, + "reftest": {...}, + "testharness": {...} + }, + // other info... + } + + The format of a manifest item depends on: + https://github.com/w3c/web-platform-tests/blob/master/tools/manifest/item.py + which can be roughly summarized as follows: + * testharness test: [url, extras] + * reftest: [url, references, extras] + where `extras` is a dict with the following optional items: + * testharness test: {"timeout": "long", "testdriver": True} + * reftest: {"timeout": "long", "viewport_size": ..., "dpi": ...} + and `references` is a list that looks like: + [[reference_url1, "=="], [reference_url2, "!="], ...] + """ def __init__(self, json_content): - # TODO(tkent): Create a Manifest object by Manifest.from_json(). - # See ../third_party/wpt/wpt/tools/manifest/manifest.py. self.raw_dict = json.loads(json_content) self.test_types = ('manual', 'reftest', 'testharness') - def _items_for_path(self, path_in_wpt): - """Returns manifest items for the given WPT path, or None if not found. + def _items_for_file_path(self, path_in_wpt): + """Finds manifest items for the given WPT path. - The format of a manifest item depends on: - https://github.com/w3c/web-platform-tests/blob/master/tools/manifest/item.py + Args: + path_in_wpt: A file path relative to the root of WPT. Note that this + is different from a WPT URL; a file path does not have a leading + slash or a query string. - For most testharness tests, the returned items is expected - to look like this: [["/some/test/path.html", {}]]. For reference tests, - it will be a list with three items ([url, references, extras]). + Returns: + A list of manifest items, or None if not found. """ items = self.raw_dict['items'] for test_type in self.test_types: @@ -42,20 +69,44 @@ return items[test_type][path_in_wpt] return None + def _item_for_url(self, url): + """Finds the manifest item for the given WPT URL. + + Args: + url: A WPT URL (with the leading slash). + + Returns: + A manifest item, or None if not found. + """ + return self.all_url_items().get(url) + + @staticmethod + def _get_url_from_item(item): + return item[0] + + @staticmethod + def _get_extras_from_item(item): + return item[-1] + + @memoized + def all_url_items(self): + """Returns a dict mapping every URL in the manifest to its item.""" + url_items = {} + if 'items' not in self.raw_dict: + return url_items + for test_type in self.test_types: + for records in self.raw_dict['items'][test_type].itervalues(): + for item in records: + url_items[self._get_url_from_item(item)] = item + return url_items + @memoized def all_urls(self): - """Returns a set of the urls for all items in the manifest.""" - urls = set() - if 'items' in self.raw_dict: - items = self.raw_dict['items'] - for category in self.test_types: - if category in items: - for records in items[category].values(): - urls.update([item[0] for item in records]) - return urls + """Returns a set of the URLs for all items in the manifest.""" + return frozenset(self.all_url_items().keys()) def is_test_file(self, path_in_wpt): - return self._items_for_path(path_in_wpt) is not None + return self._items_for_file_path(path_in_wpt) is not None def is_test_url(self, url): """Checks if url is a valid test in the manifest. @@ -67,20 +118,28 @@ return url in self.all_urls() def file_path_to_url_paths(self, path_in_wpt): - manifest_items = self._items_for_path(path_in_wpt) + manifest_items = self._items_for_file_path(path_in_wpt) assert manifest_items is not None - return [item[0][1:] for item in manifest_items] + # Remove the leading slashes when returning. + return [self._get_url_from_item(item)[1:] for item in manifest_items] - @staticmethod - def _get_extras_from_item(item): - return item[-1] + def is_slow_test(self, url): + """Checks if a WPT is slow (long timeout) according to the manifest. - def is_slow_test(self, test_name): - items = self._items_for_path(test_name) - if not items: + Args: + url: A WPT URL (with the leading slash). + + Returns: + True if the test is found and is slow, False otherwise. + """ + if not self.is_test_url(url): return False - extras = WPTManifest._get_extras_from_item(items[0]) - return 'timeout' in extras and extras['timeout'] == 'long' + + item = self._item_for_url(url) + if not item: + return False + extras = self._get_extras_from_item(item) + return extras.get('timeout') == 'long' def extract_reference_list(self, path_in_wpt): """Extracts reference information of the specified reference test.
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base.py b/third_party/blink/tools/blinkpy/web_tests/port/base.py index c7375c4..c9f4af7e 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -876,7 +876,8 @@ match = re.match(r'virtual/[^/]+/', test_file) if match: test_file = test_file[match.end(0):] - match = re.match(r'external/wpt/(.*)', test_file) + # WPTManifest.is_slow_test() takes a WPT URL with the leading slash. + match = re.match(r'external/wpt(.*)', test_file) if not match: return False return self._wpt_manifest().is_slow_test(match.group(1))
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py index 518cdc3..df53432 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
@@ -428,11 +428,15 @@ ['/dom/ranges/Range-attributes.html', {}] ], 'dom/ranges/Range-attributes-slow.html': [ - ['/dom/ranges/Range-attributes.html', {'timeout': 'long'}] + ['/dom/ranges/Range-attributes-slow.html', {'timeout': 'long'}] ], 'console/console-is-a-namespace.any.js': [ ['/console/console-is-a-namespace.any.html', {}], - ['/console/console-is-a-namespace.any.worker.html', {}], + ['/console/console-is-a-namespace.any.worker.html', {'timeout': 'long'}], + ], + 'html/parse.html': [ + ['/html/parse.html?run_type=uri', {}], + ['/html/parse.html?run_type=write', {'timeout': 'long'}], ], }, 'manual': {}, @@ -459,37 +463,34 @@ port = self.make_port(with_tests=True) PortTest._add_manifest_to_mock_file_system(port.host.filesystem) self.assertNotIn('external/wpt/common/blank.html', port.tests([])) + self.assertNotIn('external/wpt/console/console-is-a-namespace.any.js', port.tests([])) def test_find_one_if_in_manifest(self): port = self.make_port(with_tests=True) PortTest._add_manifest_to_mock_file_system(port.host.filesystem) self.assertIn('external/wpt/dom/ranges/Range-attributes.html', port.tests([])) - self.assertNotIn('external/wpt/console/console-is-a-namespace.any.js', port.tests([])) + self.assertIn('external/wpt/console/console-is-a-namespace.any.html', port.tests([])) + def test_wpt_tests_paths(self): + port = self.make_port(with_tests=True) + PortTest._add_manifest_to_mock_file_system(port.host.filesystem) + all_wpt = [ + 'external/wpt/console/console-is-a-namespace.any.html', + 'external/wpt/console/console-is-a-namespace.any.worker.html', + 'external/wpt/dom/ranges/Range-attributes-slow.html', + 'external/wpt/dom/ranges/Range-attributes.html', + 'external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', + 'external/wpt/html/parse.html?run_type=uri', + 'external/wpt/html/parse.html?run_type=write', + ] # test.any.js shows up on the filesystem as one file but it effectively becomes two test files: # test.any.html and test.any.worker.html. We should support running test.any.js by name and # indirectly by specifying a parent directory. - self.assertEqual(port.tests(['external']), - ['external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', - 'external/wpt/dom/ranges/Range-attributes.html', - 'external/wpt/console/console-is-a-namespace.any.worker.html', - 'external/wpt/console/console-is-a-namespace.any.html']) - self.assertEqual(port.tests(['external/']), - ['external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', - 'external/wpt/dom/ranges/Range-attributes.html', - 'external/wpt/console/console-is-a-namespace.any.worker.html', - 'external/wpt/console/console-is-a-namespace.any.html']) + self.assertEqual(sorted(port.tests(['external'])), all_wpt) + self.assertEqual(sorted(port.tests(['external/'])), all_wpt) self.assertEqual(port.tests(['external/csswg-test']), []) - self.assertEqual(port.tests(['external/wpt']), - ['external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', - 'external/wpt/dom/ranges/Range-attributes.html', - 'external/wpt/console/console-is-a-namespace.any.worker.html', - 'external/wpt/console/console-is-a-namespace.any.html']) - self.assertEqual(port.tests(['external/wpt/']), - ['external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', - 'external/wpt/dom/ranges/Range-attributes.html', - 'external/wpt/console/console-is-a-namespace.any.worker.html', - 'external/wpt/console/console-is-a-namespace.any.html']) + self.assertEqual(sorted(port.tests(['external/wpt'])), all_wpt) + self.assertEqual(sorted(port.tests(['external/wpt/'])), all_wpt) self.assertEqual(port.tests(['external/wpt/console']), ['external/wpt/console/console-is-a-namespace.any.worker.html', 'external/wpt/console/console-is-a-namespace.any.html']) @@ -502,9 +503,11 @@ self.assertEqual(port.tests(['external/wpt/console/console-is-a-namespace.any.html']), ['external/wpt/console/console-is-a-namespace.any.html']) self.assertEqual(port.tests(['external/wpt/dom']), - ['external/wpt/dom/ranges/Range-attributes.html']) + ['external/wpt/dom/ranges/Range-attributes-slow.html', + 'external/wpt/dom/ranges/Range-attributes.html']) self.assertEqual(port.tests(['external/wpt/dom/']), - ['external/wpt/dom/ranges/Range-attributes.html']) + ['external/wpt/dom/ranges/Range-attributes-slow.html', + 'external/wpt/dom/ranges/Range-attributes.html']) self.assertEqual(port.tests(['external/wpt/dom/ranges/Range-attributes.html']), ['external/wpt/dom/ranges/Range-attributes.html']) @@ -513,23 +516,28 @@ PortTest._add_manifest_to_mock_file_system(port.host.filesystem) all_wpt = [ 'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.html', - 'virtual/virtual_wpt/external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', 'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.worker.html', + 'virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes-slow.html', 'virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes.html', + 'virtual/virtual_wpt/external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html', + 'virtual/virtual_wpt/external/wpt/html/parse.html?run_type=uri', + 'virtual/virtual_wpt/external/wpt/html/parse.html?run_type=write', ] dom_wpt = [ + 'virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes-slow.html', 'virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html', ] - self.assertEqual(port.tests(['virtual/virtual_wpt/external/']), all_wpt) - self.assertEqual(port.tests(['virtual/virtual_wpt/external/wpt/']), all_wpt) + self.assertEqual(sorted(port.tests(['virtual/virtual_wpt/external/'])), all_wpt) + self.assertEqual(sorted(port.tests(['virtual/virtual_wpt/external/wpt/'])), all_wpt) self.assertEqual(port.tests(['virtual/virtual_wpt/external/wpt/console']), - ['virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.html', - 'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.worker.html']) + ['virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.worker.html', + 'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.html']) self.assertEqual(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/']), dom_wpt) self.assertEqual(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/ranges/']), dom_wpt) - self.assertEqual(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html']), dom_wpt) + self.assertEqual(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html']), + ['virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html']) def test_is_test_file(self): port = self.make_port(with_tests=True) @@ -609,16 +617,37 @@ def test_is_slow_wpt_test(self): port = self.make_port(with_tests=True) - filesystem = port.host.filesystem - PortTest._add_manifest_to_mock_file_system(filesystem) + PortTest._add_manifest_to_mock_file_system(port.host.filesystem) self.assertFalse(port.is_slow_wpt_test('external/wpt/dom/ranges/Range-attributes.html')) - self.assertFalse(port.is_slow_wpt_test('dom/ranges/Range-attributes.html')) self.assertTrue(port.is_slow_wpt_test('external/wpt/dom/ranges/Range-attributes-slow.html')) self.assertTrue(port.is_slow_wpt_test('external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html')) + + def test_is_slow_wpt_test_with_variations(self): + port = self.make_port(with_tests=True) + PortTest._add_manifest_to_mock_file_system(port.host.filesystem) + + self.assertFalse(port.is_slow_wpt_test('external/wpt/console/console-is-a-namespace.any.html')) + self.assertTrue(port.is_slow_wpt_test('external/wpt/console/console-is-a-namespace.any.worker.html')) + self.assertFalse(port.is_slow_wpt_test('external/wpt/html/parse.html?run_type=uri')) + self.assertTrue(port.is_slow_wpt_test('external/wpt/html/parse.html?run_type=write')) + + def test_is_slow_wpt_test_takes_virtual_tests(self): + port = self.make_port(with_tests=True) + PortTest._add_manifest_to_mock_file_system(port.host.filesystem) + self.assertFalse(port.is_slow_wpt_test('virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes.html')) self.assertTrue(port.is_slow_wpt_test('virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes-slow.html')) + def test_is_slow_wpt_test_returns_false_for_illegal_paths(self): + port = self.make_port(with_tests=True) + PortTest._add_manifest_to_mock_file_system(port.host.filesystem) + + self.assertFalse(port.is_slow_wpt_test('dom/ranges/Range-attributes.html')) + self.assertFalse(port.is_slow_wpt_test('dom/ranges/Range-attributes-slow.html')) + self.assertFalse(port.is_slow_wpt_test('/dom/ranges/Range-attributes.html')) + self.assertFalse(port.is_slow_wpt_test('/dom/ranges/Range-attributes-slow.html')) + def test_parse_reftest_list(self): port = self.make_port(with_tests=True) port.host.filesystem.files['bar/reftest.list'] = '\n'.join(['== test.html test-ref.html',
diff --git a/tools/code_coverage/coverage.py b/tools/code_coverage/coverage.py index f0f99d44..843bacbc 100755 --- a/tools/code_coverage/coverage.py +++ b/tools/code_coverage/coverage.py
@@ -314,6 +314,14 @@ html_file.write(html_header + html_table + html_footer) +def _ConfigureLogging(args): + """Configures logging settings for later use.""" + log_level = logging.DEBUG if args.verbose else logging.INFO + log_format = '[%(asctime)s %(levelname)s] %(message)s' + log_file = args.log_file if args.log_file else None + logging.basicConfig(filename=log_file, level=log_level, format=log_format) + + def _GetSharedLibraries(binary_paths): """Returns set of shared libraries used by specified binaries.""" libraries = set() @@ -322,8 +330,8 @@ if sys.platform.startswith('linux'): cmd.extend(['ldd']) - shared_library_re = re.compile( - r'.*\.so\s=>\s(.*' + BUILD_DIR + '.*\.so)\s.*') + shared_library_re = re.compile(r'.*\.so\s=>\s(.*' + BUILD_DIR + + r'.*\.so)\s.*') elif sys.platform.startswith('darwin'): cmd.extend(['otool', '-L']) shared_library_re = re.compile(r'\s+(@rpath/.*\.dylib)\s.*') @@ -1202,6 +1210,26 @@ return os.path.relpath(target_path, base_dir) +def _GetBinaryPathsFromTargets(targets, build_dir): + """Return binary paths from target names.""" + # FIXME: Derive output binary from target build definitions rather than + # assuming that it is always the same name. + binary_paths = [] + for target in targets: + binary_path = os.path.join(build_dir, target) + if _GetHostPlatform() == 'win': + binary_path += '.exe' + + if os.path.exists(binary_path): + binary_paths.append(binary_path) + else: + logging.warning( + 'Target binary %s not found in build directory, skipping.', + os.path.basename(binary_path)) + + return binary_paths + + def _ParseCommandArguments(): """Adds and parses relevant arguments for tool comands. @@ -1230,10 +1258,21 @@ '-c', '--command', action='append', - required=True, + required=False, help='Commands used to run test targets, one test target needs one and ' 'only one command, when specifying commands, one should assume the ' - 'current working directory is the root of the checkout.') + 'current working directory is the root of the checkout. This option is ' + 'incompatible with -p/--profdata-file option.') + + arg_parser.add_argument( + '-p', + '--profdata-file', + type=str, + required=False, + help='Path to profdata file to use for generating code coverage reports. ' + 'This can be useful if you generated the profdata file seperately in ' + 'your own test harness. This option is ignored if run command(s) are ' + 'already provided above using -c/--command option.') arg_parser.add_argument( '-f', @@ -1278,36 +1317,34 @@ def Main(): """Execute tool commands.""" - assert os.path.abspath(os.getcwd()) == SRC_ROOT_PATH, ('This script must be ' - 'called from the root ' - 'of checkout.') + # Change directory to source root to aid in relative paths calculations. + os.chdir(SRC_ROOT_PATH) - # This helps to setup coverage binaries even when script is called with - # empty params. This is used by coverage bot for initial setup. + # Setup coverage binaries even when script is called with empty params. This + # is used by coverage bot for initial setup. DownloadCoverageToolsIfNeeded() args = _ParseCommandArguments() + _ConfigureLogging(args) + global BUILD_DIR BUILD_DIR = args.build_dir global OUTPUT_DIR OUTPUT_DIR = args.output_dir - assert len(args.targets) == len(args.command), ('Number of targets must be ' - 'equal to the number of test ' - 'commands.') + assert args.command or args.profdata_file, ( + 'Need to either provide commands to run using -c/--command option OR ' + 'provide prof-data file as input using -p/--profdata-file option.') - # logging should be configured before it is used. - log_level = logging.DEBUG if args.verbose else logging.INFO - log_format = '[%(asctime)s %(levelname)s] %(message)s' - log_file = args.log_file if args.log_file else None - logging.basicConfig(filename=log_file, level=log_level, format=log_format) + assert not args.command or (len(args.targets) == len(args.command)), ( + 'Number of targets must be equal to the number of test commands.') assert os.path.exists(BUILD_DIR), ( 'Build directory: {} doesn\'t exist. ' 'Please run "gn gen" to generate.').format(BUILD_DIR) + _ValidateCurrentPlatformIsSupported() _ValidateBuildingWithClangCoverage() - _VerifyTargetExecutablesAreInBuildDirectory(args.command) absolute_filter_paths = [] if args.filters: @@ -1316,9 +1353,18 @@ if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) - profdata_file_path = _CreateCoverageProfileDataForTargets( - args.targets, args.command, args.jobs) - binary_paths = [_GetBinaryPath(command) for command in args.command] + # Get profdate file and list of binary paths. + if args.command: + # A list of commands are provided. Run them to generate profdata file, and + # create a list of binary paths from parsing commands. + _VerifyTargetExecutablesAreInBuildDirectory(args.command) + profdata_file_path = _CreateCoverageProfileDataForTargets( + args.targets, args.command, args.jobs) + binary_paths = [_GetBinaryPath(command) for command in args.command] + else: + # An input prof-data file is already provided. Just calculate binary paths. + profdata_file_path = args.profdata_file + binary_paths = _GetBinaryPathsFromTargets(args.targets, args.build_dir) logging.info('Generating code coverage report in html (this can take a while ' 'depending on size of target!)')
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids index b2846be..69223f2a 100644 --- a/tools/gritsettings/resource_ids +++ b/tools/gritsettings/resource_ids
@@ -296,7 +296,9 @@ "ash/resources/ash_resources.grd": { "structures": [24280], }, - + "ash/shell/ash_shell_resources.grd": { + "includes": [24290], + }, "chromecast/browser/cast_browser_resources.grd": { "includes": [24300], },
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 525f4e2..21e4476 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -340,7 +340,6 @@ 'Fuchsia ARM64': 'release_bot_fuchsia_arm64', 'Fuchsia x64 Cast Audio': 'release_bot_fuchsia_cast_audio', 'Fuchsia x64': 'release_bot_fuchsia', - 'Ozone Linux': 'ozone_linux_release_bot', 'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11', 'linux-ozone-rel': 'ozone_linux_release_bot', }, @@ -634,7 +633,6 @@ # on the continuous builder. 'linux_chromium_msan_rel_ng': 'msan_release_bot', - 'linux_chromium_ozone_compile_only_ng': 'ozone_linux_release_trybot_compile_only', 'linux_chromium_rel_ng': 'gpu_tests_release_trybot_no_symbols', 'linux_chromium_tsan_rel_ng': 'tsan_disable_nacl_release_trybot', 'linux_layout_tests_layout_ng': 'release_trybot', @@ -1456,10 +1454,6 @@ 'ozone_linux', 'release_trybot', ], - 'ozone_linux_release_trybot_compile_only': [ - 'ozone_linux', 'release_trybot', 'compile_only', - ], - 'presubmit': [ # The chromium_presubmit bot does not use mb. 'error',
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index b9b010f..7bcc5cc7 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -165,6 +165,11 @@ none of the field were autofilled. See |AutofillFormSubmittedState|. </summary> </metric> + <metric name="FormSignature"> + <summary> + FormSignature is approximately 10 bit hash of form structure. + </summary> + </metric> <metric name="FormTypes"> <summary> Type of form. Stored as bitvector. A set ith bit implies enum FormType's @@ -190,6 +195,11 @@ Recorded when we parse a form to log form metadata and autofill settings that apply to all subsequent events for this form. </summary> + <metric name="FormSignature"> + <summary> + FormSignature is approximately 10 bit hash of form structure. + </summary> + </metric> <metric name="FormTypes"> <summary> Type of form. Stored as bitvector. A set ith bit implies enum FormType's
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index 1bdcb27..1baf5b3a 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -251,7 +251,7 @@ { 'gpu': '8086:1616', 'os': 'Windows-10', - 'pool': 'chrome.test.perf', + 'pool': 'chrome.tests.perf', 'device_ids': [ 'build194-b7', 'build195-b7', 'build196-b7', 'build197-b7', @@ -1034,10 +1034,10 @@ ], 'platform': 'android-webview', 'dimension': { - 'pool': 'chrome.test.perf-webview-fyi', + 'pool': 'chrome.tests.perf-webview-fyi', 'os': 'Android', 'device_type': 'walleye', - 'device_is': 'O' + 'device_os': 'O' }, 'device_ids': [ ], @@ -1051,10 +1051,10 @@ ], 'platform': 'android', 'dimension': { - 'pool': 'chrome.test.perf-fyi', + 'pool': 'chrome.tests.perf-fyi', 'os': 'Android', 'device_type': 'walleye', - 'device_is': 'O' + 'device_os': 'O' }, 'device_ids': [ ],
diff --git a/tools/perf/core/results_dashboard.py b/tools/perf/core/results_dashboard.py index b618d80..99a0142 100755 --- a/tools/perf/core/results_dashboard.py +++ b/tools/perf/core/results_dashboard.py
@@ -203,7 +203,8 @@ url = _MakeStdioUrl(test_name, buildername, buildnumber) if url: - add_diagnostics_args.extend(['--log_urls', url]) + add_diagnostics_args.extend(['--log_urls_k', 'Buildbot stdio']) + add_diagnostics_args.extend(['--log_urls_v', url]) for k, v in revisions_dict.iteritems(): add_diagnostics_args.extend((k, v))
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index b62278a..e2276fe 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -291,6 +291,8 @@ crbug.com/836407 [ Linux ] system_health.memory_desktop/browse:tools:maps [ Skip ] crbug.com/837397 [ Linux ] system_health.memory_desktop/load_accessibility:shopping:amazon [ Skip ] crbug.com/836447 [ ChromeOS ] system_health.memory_desktop/multitab:misc:typical24 [ Skip ] +crbug.com/789041 [ Linux ] system_health.memory_desktop/browse:news:reddit [ Skip ] +crbug.com/789041 [ Win ] system_health.memory_desktop/browse:news:reddit [ Skip ] # Benchmark: system_health.memory_mobile crbug.com/787001 [ Android_Webview ] system_health.memory_mobile/load:media:soundcloud [ Skip ]
diff --git a/ui/aura/env.cc b/ui/aura/env.cc index 643574f4..4965a62 100644 --- a/ui/aura/env.cc +++ b/ui/aura/env.cc
@@ -178,6 +178,12 @@ context_factory_private_(nullptr) { DCHECK(lazy_tls_ptr.Pointer()->Get() == NULL); lazy_tls_ptr.Pointer()->Set(this); +#if defined(OS_CHROMEOS) + // TODO(sky): this isn't quite right. Really the MouseLocationManager should + // be created only when this process is hosting the WindowService. Clean this + // up. + create_mouse_location_manager = true; +#endif if (create_mouse_location_manager) mouse_location_manager_ = std::make_unique<MouseLocationManager>(); }
diff --git a/ui/gl/gl_fence_android_native_fence_sync.cc b/ui/gl/gl_fence_android_native_fence_sync.cc index 0f18b593..4233c813 100644 --- a/ui/gl/gl_fence_android_native_fence_sync.cc +++ b/ui/gl/gl_fence_android_native_fence_sync.cc
@@ -90,7 +90,7 @@ base::TimeTicks t = base::TimeTicks() + base::TimeDelta::FromNanoseconds(pt_info->timestamp_ns); - if (sync_pt_info(info, pt_info)) { + if (!sync_pt_info(info, pt_info)) { // It is possible that multiple sync_pt_info could be extracted from // sync_fence_info_data. We currently only handle one. DLOG(WARNING) << "Ambiguous status change time. More than one result "
diff --git a/ui/views/controls/views_text_services_context_menu_mac.mm b/ui/views/controls/views_text_services_context_menu_mac.mm index 76f51fa..0c4cd26 100644 --- a/ui/views/controls/views_text_services_context_menu_mac.mm +++ b/ui/views/controls/views_text_services_context_menu_mac.mm
@@ -44,11 +44,8 @@ menu->InsertSeparatorAt(index++, ui::NORMAL_SEPARATOR); } if (base::FeatureList::IsEnabled(features::kEnableEmojiContextMenu)) { - menu->InsertItemWithStringIdAt(index, IDS_CONTENT_CONTEXT_EMOJI, + menu->InsertItemWithStringIdAt(index++, IDS_CONTENT_CONTEXT_EMOJI, IDS_CONTENT_CONTEXT_EMOJI); - menu->SetIcon(index++, - ui::ResourceBundle::GetSharedInstance().GetImageNamed( - IDR_EMOJI_FAVICON)); menu->InsertSeparatorAt(index++, ui::NORMAL_SEPARATOR); } text_services_menu_.AppendToContextMenu(menu);