summaryrefslogtreecommitdiff
path: root/chromium/chrome/renderer/extensions/accessibility_private_hooks_delegate_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/renderer/extensions/accessibility_private_hooks_delegate_unittest.cc')
-rw-r--r--chromium/chrome/renderer/extensions/accessibility_private_hooks_delegate_unittest.cc79
1 files changed, 79 insertions, 0 deletions
diff --git a/chromium/chrome/renderer/extensions/accessibility_private_hooks_delegate_unittest.cc b/chromium/chrome/renderer/extensions/accessibility_private_hooks_delegate_unittest.cc
new file mode 100644
index 00000000000..da69b47febb
--- /dev/null
+++ b/chromium/chrome/renderer/extensions/accessibility_private_hooks_delegate_unittest.cc
@@ -0,0 +1,79 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/extensions/accessibility_private_hooks_delegate.h"
+
+#include "base/strings/stringprintf.h"
+#include "extensions/common/constants.h"
+#include "extensions/common/extension_builder.h"
+#include "extensions/common/features/feature_provider.h"
+#include "extensions/renderer/bindings/api_binding_test_util.h"
+#include "extensions/renderer/native_extension_bindings_system.h"
+#include "extensions/renderer/native_extension_bindings_system_test_base.h"
+#include "extensions/renderer/script_context.h"
+
+namespace extensions {
+
+using AccessibilityPrivateHooksDelegateTest =
+ NativeExtensionBindingsSystemUnittest;
+
+TEST_F(AccessibilityPrivateHooksDelegateTest, TestGetDisplayLanguage) {
+ // Initialize bindings system.
+ bindings_system()
+ ->api_system()
+ ->GetHooksForAPI("accessibilityPrivate")
+ ->SetDelegate(std::make_unique<AccessibilityPrivateHooksDelegate>());
+ // Register extension.
+ // Ensure that the extension has access to the accessibilityPrivate API by
+ // setting the extension ID to the ChromeVox extension ID, as well as giving
+ // it permission to the accessibilityPrivate API.
+ scoped_refptr<const Extension> extension =
+ ExtensionBuilder("testExtension")
+ .AddPermission("accessibilityPrivate")
+ .SetLocation(Manifest::COMPONENT)
+ .Build();
+ RegisterExtension(extension);
+ v8::HandleScope handle_scope(isolate());
+ v8::Local<v8::Context> context = MainContext();
+ ScriptContext* script_context = CreateScriptContext(
+ context, extension.get(), Feature::BLESSED_EXTENSION_CONTEXT);
+ script_context->set_url(extension->url());
+ bindings_system()->UpdateBindingsForContext(script_context);
+
+ // Ensure that the extension has access to the accessibilityPrivate API.
+ const Feature* a11y_private =
+ FeatureProvider::GetAPIFeature("accessibilityPrivate");
+ ASSERT_TRUE(a11y_private);
+ Feature::Availability availability =
+ a11y_private->IsAvailableToExtension(extension.get());
+ ASSERT_TRUE(availability.is_available()) << availability.message();
+
+ // Setup function that will run extension api.
+ auto run_get_display_language = [context](const char* args) {
+ SCOPED_TRACE(args);
+ constexpr char kRunGetDisplayLanguageFunction[] =
+ R"((function() {
+ return chrome.accessibilityPrivate.getDisplayLanguage(%s);
+ }))";
+ v8::Local<v8::Function> function = FunctionFromString(
+ context, base::StringPrintf(kRunGetDisplayLanguageFunction, args));
+ v8::Local<v8::Value> result = RunFunction(function, context, 0, nullptr);
+ return V8ToString(result, context);
+ };
+
+ // Test behavior.
+ EXPECT_EQ(R"("")", run_get_display_language("'',''"));
+ EXPECT_EQ(R"("")", run_get_display_language("'not a language code','ja-JP'"));
+ EXPECT_EQ(R"("")",
+ run_get_display_language("'zh-TW', 'not a language code'"));
+ EXPECT_EQ(R"("English")", run_get_display_language("'en','en'"));
+ EXPECT_EQ(R"("English")", run_get_display_language("'en-US','en'"));
+ EXPECT_EQ(R"("français")", run_get_display_language("'fr','fr'"));
+ EXPECT_EQ(R"("español")", run_get_display_language("'es','es'"));
+ EXPECT_EQ(R"("日本語")", run_get_display_language("'ja','ja'"));
+ EXPECT_EQ(R"("anglais")", run_get_display_language("'en','fr'"));
+ EXPECT_EQ(R"("Japanese")", run_get_display_language("'ja','en'"));
+}
+
+} // namespace extensions