summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/extensions/api/extension_action
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-13 16:23:34 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-14 10:37:21 +0000
commit38a9a29f4f9436cace7f0e7abf9c586057df8a4e (patch)
treec4e8c458dc595bc0ddb435708fa2229edfd00bd4 /chromium/chrome/browser/extensions/api/extension_action
parente684a3455bcc29a6e3e66a004e352dea4e1141e7 (diff)
BASELINE: Update Chromium to 73.0.3683.37
Change-Id: I08c9af2948b645f671e5d933aca1f7a90ea372f2 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/chrome/browser/extensions/api/extension_action')
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc2
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/browser_action_unittest.cc39
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/extension_action_api.cc4
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc110
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc90
5 files changed, 197 insertions, 48 deletions
diff --git a/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc b/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
index b29bf411aa0..e390712658d 100644
--- a/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
+++ b/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
@@ -32,7 +32,7 @@
#include "extensions/common/permissions/permissions_data.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
-#include "ui/base/ui_features.h"
+#include "ui/base/buildflags.h"
#if defined(OS_WIN)
#include "ui/views/win/hwnd_util.h"
diff --git a/chromium/chrome/browser/extensions/api/extension_action/browser_action_unittest.cc b/chromium/chrome/browser/extensions/api/extension_action/browser_action_unittest.cc
deleted file mode 100644
index b69bbf3055c..00000000000
--- a/chromium/chrome/browser/extensions/api/extension_action/browser_action_unittest.cc
+++ /dev/null
@@ -1,39 +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 "base/files/file_util.h"
-#include "chrome/browser/extensions/extension_service_test_with_install.h"
-#include "chrome/common/extensions/api/extension_action/action_info.h"
-
-namespace extensions {
-namespace {
-
-class BrowserActionUnitTest : public ExtensionServiceTestWithInstall {
-};
-
-TEST_F(BrowserActionUnitTest, MultiIcons) {
- InitializeEmptyExtensionService();
- base::FilePath path =
- data_dir().AppendASCII("api_test/browser_action/multi_icons");
- ASSERT_TRUE(base::PathExists(path));
-
- const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW);
-
- EXPECT_EQ(0U, extension->install_warnings().size());
- const ActionInfo* browser_action_info =
- ActionInfo::GetBrowserActionInfo(extension);
- ASSERT_TRUE(browser_action_info);
-
- const ExtensionIconSet& icons = browser_action_info->default_icon;
-
- // Extension can provide arbitrary sizes.
- EXPECT_EQ(4u, icons.map().size());
- EXPECT_EQ("icon19.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("icon24.png", icons.Get(24, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("icon24.png", icons.Get(31, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("icon38.png", icons.Get(38, ExtensionIconSet::MATCH_EXACTLY));
-}
-
-} // namespace
-} // namespace extensions
diff --git a/chromium/chrome/browser/extensions/api/extension_action/extension_action_api.cc b/chromium/chrome/browser/extensions/api/extension_action/extension_action_api.cc
index 8a1d28808e4..d27bdd46af8 100644
--- a/chromium/chrome/browser/extensions/api/extension_action/extension_action_api.cc
+++ b/chromium/chrome/browser/extensions/api/extension_action/extension_action_api.cc
@@ -10,9 +10,9 @@
#include "base/lazy_instance.h"
#include "base/location.h"
-#include "base/macros.h"
#include "base/metrics/histogram_macros.h"
#include "base/single_thread_task_runner.h"
+#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/values.h"
@@ -521,7 +521,7 @@ ExtensionActionSetBadgeBackgroundColorFunction::RunExtensionAction() {
EXTENSION_FUNCTION_VALIDATE(list->GetSize() == 4);
int color_array[4] = {0};
- for (size_t i = 0; i < arraysize(color_array); ++i) {
+ for (size_t i = 0; i < base::size(color_array); ++i) {
EXTENSION_FUNCTION_VALIDATE(list->GetInteger(i, &color_array[i]));
}
diff --git a/chromium/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc b/chromium/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc
new file mode 100644
index 00000000000..85f0d5a776c
--- /dev/null
+++ b/chromium/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc
@@ -0,0 +1,110 @@
+// 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 "base/files/file_util.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_service_test_with_install.h"
+#include "chrome/common/extensions/api/extension_action/action_info.h"
+#include "extensions/common/manifest_constants.h"
+#include "extensions/test/test_extension_dir.h"
+
+namespace extensions {
+namespace {
+
+enum class TestActionType {
+ kBrowser,
+ kPage,
+};
+
+class ExtensionActionAPIUnitTest
+ : public ExtensionServiceTestWithInstall,
+ public ::testing::WithParamInterface<TestActionType> {
+ public:
+ ExtensionActionAPIUnitTest() {}
+ ~ExtensionActionAPIUnitTest() override {}
+
+ const char* GetManifestKey() {
+ switch (GetParam()) {
+ case TestActionType::kBrowser:
+ return manifest_keys::kBrowserAction;
+ case TestActionType::kPage:
+ return manifest_keys::kPageAction;
+ }
+ NOTREACHED();
+ return nullptr;
+ }
+
+ const ActionInfo* GetActionInfo(const Extension& extension) {
+ switch (GetParam()) {
+ case TestActionType::kBrowser:
+ return ActionInfo::GetBrowserActionInfo(&extension);
+ case TestActionType::kPage:
+ return ActionInfo::GetPageActionInfo(&extension);
+ }
+ NOTREACHED();
+ return nullptr;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ExtensionActionAPIUnitTest);
+};
+
+// Test that extensions can provide icons of arbitrary sizes in the manifest.
+TEST_P(ExtensionActionAPIUnitTest, MultiIcons) {
+ InitializeEmptyExtensionService();
+
+ constexpr char kManifestTemplate[] =
+ R"({
+ "name": "A test extension that tests multiple browser action icons",
+ "version": "1.0",
+ "manifest_version": 2,
+ "%s": {
+ "default_icon": {
+ "19": "icon19.png",
+ "24": "icon24.png",
+ "31": "icon24.png",
+ "38": "icon38.png"
+ }
+ }
+ })";
+
+ TestExtensionDir test_extension_dir;
+ test_extension_dir.WriteManifest(
+ base::StringPrintf(kManifestTemplate, GetManifestKey()));
+
+ {
+ std::string icon_file_content;
+ base::FilePath icon_path = data_dir().AppendASCII("icon1.png");
+ EXPECT_TRUE(base::ReadFileToString(icon_path, &icon_file_content));
+ test_extension_dir.WriteFile(FILE_PATH_LITERAL("icon19.png"),
+ icon_file_content);
+ test_extension_dir.WriteFile(FILE_PATH_LITERAL("icon24.png"),
+ icon_file_content);
+ test_extension_dir.WriteFile(FILE_PATH_LITERAL("icon38.png"),
+ icon_file_content);
+ }
+
+ const Extension* extension =
+ PackAndInstallCRX(test_extension_dir.UnpackedPath(), INSTALL_NEW);
+ EXPECT_TRUE(extension->install_warnings().empty());
+ const ActionInfo* action_info = GetActionInfo(*extension);
+ ASSERT_TRUE(action_info);
+
+ const ExtensionIconSet& icons = action_info->default_icon;
+
+ EXPECT_EQ(4u, icons.map().size());
+ EXPECT_EQ("icon19.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("icon24.png", icons.Get(24, ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("icon24.png", icons.Get(31, ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("icon38.png", icons.Get(38, ExtensionIconSet::MATCH_EXACTLY));
+}
+
+INSTANTIATE_TEST_CASE_P(,
+ ExtensionActionAPIUnitTest,
+ testing::Values(TestActionType::kBrowser,
+ TestActionType::kPage));
+
+} // namespace
+} // namespace extensions
diff --git a/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc b/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
index c4229c5e970..58185ec99d7 100644
--- a/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
+++ b/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
@@ -8,6 +8,7 @@
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/extensions/api/extension_action/test_extension_action_api_observer.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
@@ -20,6 +21,7 @@
#include "content/public/test/test_utils.h"
#include "extensions/browser/browsertest_util.h"
#include "extensions/browser/state_store.h"
+#include "extensions/common/manifest_constants.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/test_extension_dir.h"
#include "ui/base/window_open_disposition.h"
@@ -57,13 +59,46 @@ class TestStateStoreObserver : public StateStore::TestObserver {
DISALLOW_COPY_AND_ASSIGN(TestStateStoreObserver);
};
+enum class TestActionType {
+ kBrowser,
+ kPage,
+};
+
} // namespace
-using ExtensionActionAPITest = ExtensionApiTest;
+class ExtensionActionAPITest : public ExtensionApiTest {
+ public:
+ ExtensionActionAPITest() {}
+ ~ExtensionActionAPITest() override {}
+
+ const char* GetManifestKey(TestActionType action_type) {
+ switch (action_type) {
+ case TestActionType::kBrowser:
+ return manifest_keys::kBrowserAction;
+ case TestActionType::kPage:
+ return manifest_keys::kPageAction;
+ }
+ NOTREACHED();
+ return nullptr;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ExtensionActionAPITest);
+};
+
+// Alias these for readability, when a test only exercises one type of action.
+using BrowserActionAPITest = ExtensionActionAPITest;
+using PageActionAPITest = ExtensionActionAPITest;
+
+// A class that runs tests exercising both page and browser action behavior.
+class MultiActionAPITest : public ExtensionActionAPITest,
+ public testing::WithParamInterface<TestActionType> {
+};
// Check that updating the browser action badge for a specific tab id does not
// cause a disk write (since we only persist the defaults).
-IN_PROC_BROWSER_TEST_F(ExtensionActionAPITest, TestNoUnnecessaryIO) {
+// Only browser actions persist settings.
+IN_PROC_BROWSER_TEST_F(BrowserActionAPITest, TestNoUnnecessaryIO) {
ExtensionTestMessageListener ready_listener("ready", false);
TestExtensionDir test_dir;
@@ -132,19 +167,22 @@ IN_PROC_BROWSER_TEST_F(ExtensionActionAPITest, TestNoUnnecessaryIO) {
// Verify that tab-specific values are cleared on navigation and on tab
// removal. Regression test for https://crbug.com/834033.
-IN_PROC_BROWSER_TEST_F(ExtensionActionAPITest,
+IN_PROC_BROWSER_TEST_P(MultiActionAPITest,
ValuesAreClearedOnNavigationAndTabRemoval) {
ASSERT_TRUE(StartEmbeddedTestServer());
TestExtensionDir test_dir;
- test_dir.WriteManifest(
+ constexpr char kManifestTemplate[] =
R"({
"name": "Extension",
"description": "An extension",
"manifest_version": 2,
"version": "0.1",
- "browser_action": {}
- })");
+ "%s": {}
+ })";
+
+ test_dir.WriteManifest(
+ base::StringPrintf(kManifestTemplate, GetManifestKey(GetParam())));
const Extension* extension = LoadExtension(test_dir.UnpackedPath());
ASSERT_TRUE(extension);
@@ -185,4 +223,44 @@ IN_PROC_BROWSER_TEST_F(ExtensionActionAPITest,
EXPECT_FALSE(action->HasTitle(tab_id));
}
+// Tests that tooltips of an extension action icon can be specified using UTF8.
+// See http://crbug.com/25349.
+IN_PROC_BROWSER_TEST_P(MultiActionAPITest, TitleLocalization) {
+ TestExtensionDir test_dir;
+ constexpr char kManifestTemplate[] =
+ R"({
+ "name": "Hreggvi\u00F0ur is my name",
+ "description": "Hreggvi\u00F0ur: l10n action",
+ "manifest_version": 2,
+ "version": "0.1",
+ "%s": {
+ "default_title": "Hreggvi\u00F0ur"
+ }
+ })";
+
+ test_dir.WriteManifest(
+ base::StringPrintf(kManifestTemplate, GetManifestKey(GetParam())));
+ const Extension* extension = LoadExtension(test_dir.UnpackedPath());
+ ASSERT_TRUE(extension);
+
+ auto* action_manager = ExtensionActionManager::Get(profile());
+ ExtensionAction* action = action_manager->GetExtensionAction(*extension);
+ ASSERT_TRUE(action);
+
+ EXPECT_EQ(base::WideToUTF8(L"Hreggvi\u00F0ur: l10n action"),
+ extension->description());
+ EXPECT_EQ(base::WideToUTF8(L"Hreggvi\u00F0ur is my name"), extension->name());
+ content::WebContents* web_contents =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ int tab_id = SessionTabHelper::IdForTab(web_contents).id();
+ EXPECT_EQ(base::WideToUTF8(L"Hreggvi\u00F0ur"), action->GetTitle(tab_id));
+ EXPECT_EQ(base::WideToUTF8(L"Hreggvi\u00F0ur"),
+ action->GetTitle(ExtensionAction::kDefaultTabId));
+}
+
+INSTANTIATE_TEST_CASE_P(,
+ MultiActionAPITest,
+ testing::Values(TestActionType::kBrowser,
+ TestActionType::kPage));
+
} // namespace extensions