diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-13 16:23:34 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-14 10:37:21 +0000 |
commit | 38a9a29f4f9436cace7f0e7abf9c586057df8a4e (patch) | |
tree | c4e8c458dc595bc0ddb435708fa2229edfd00bd4 /chromium/chrome/browser/extensions/api/extension_action | |
parent | e684a3455bcc29a6e3e66a004e352dea4e1141e7 (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')
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 |