| // Copyright 2021 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/web_applications/manifest_update_task.h" |
| |
| #include "base/strings/utf_string_conversions.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/public/common/manifest/manifest.h" |
| |
| namespace web_app { |
| |
| namespace { |
| |
| // Note: Keep in sync with GetDefaultManifestFileHandlers() below. |
| apps::FileHandlers GetDefaultAppsFileHandlers() { |
| apps::FileHandler handler; |
| handler.action = GURL("http://foo.com/?plaintext"); |
| apps::FileHandler::AcceptEntry text_entry; |
| text_entry.mime_type = "text/plain"; |
| text_entry.file_extensions = {".txt", ".md"}; |
| handler.accept = {text_entry}; |
| return {handler}; |
| } |
| |
| // Note: Keep in sync with GetDefaultAppsFileHandlers() above. |
| std::vector<blink::Manifest::FileHandler> GetDefaultManifestFileHandlers() { |
| blink::Manifest::FileHandler handler; |
| handler.action = GURL("http://foo.com/?plaintext"); |
| handler.name = u"Text"; |
| std::vector<std::u16string> extensions = {u".txt", u".md"}; |
| handler.accept.emplace(u"text/plain", extensions); |
| return {handler}; |
| } |
| |
| } // anonymous namespace |
| |
| class ManifestUpdateTaskTest : public testing::Test { |
| public: |
| ManifestUpdateTaskTest() = default; |
| ManifestUpdateTaskTest(const ManifestUpdateTaskTest&) = delete; |
| ManifestUpdateTaskTest& operator=(const ManifestUpdateTaskTest&) = delete; |
| ~ManifestUpdateTaskTest() override = default; |
| }; |
| |
| // Below tests primarily test HaveFileHandlersChanged. |
| // Basic tests like added/removed/unchanged handlers are also in |
| // functional tests at ManifestUpdateManagerBrowserTestWithFileHandling. |
| TEST_F(ManifestUpdateTaskTest, TestFileHandlersUnchanged) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| |
| EXPECT_FALSE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| TEST_F(ManifestUpdateTaskTest, TestSecondFileHandlerAdded) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| blink::Manifest::FileHandler second_handler; |
| second_handler.action = GURL("http://foo.com/?csv"); |
| second_handler.name = u"Comma-Separated Value"; |
| std::vector<std::u16string> extensions = {u".csv"}; |
| second_handler.accept.emplace(u"text/csv", extensions); |
| new_handlers.push_back(second_handler); |
| |
| EXPECT_TRUE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| TEST_F(ManifestUpdateTaskTest, TestFileHandlerChangedName) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| new_handlers[0].name = u"Comma-Separated Values"; |
| |
| // Ignore name changes, because the registrar doesn't store the name. |
| EXPECT_FALSE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| TEST_F(ManifestUpdateTaskTest, TestFileHandlerChangedAction) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| new_handlers[0].action = GURL("/?csvtext"); |
| |
| EXPECT_TRUE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| TEST_F(ManifestUpdateTaskTest, TestFileHandlerExtraAccept) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| std::vector<std::u16string> csv_extensions = {u".csv"}; |
| new_handlers[0].accept.emplace(u"text/csv", csv_extensions); |
| |
| EXPECT_TRUE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| TEST_F(ManifestUpdateTaskTest, TestFileHandlerChangedMimeType) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| old_handlers[0].accept[0].mime_type = "text/csv"; |
| |
| EXPECT_TRUE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| TEST_F(ManifestUpdateTaskTest, TestFileHandlerChangedExtension) { |
| apps::FileHandlers old_handlers = GetDefaultAppsFileHandlers(); |
| std::vector<blink::Manifest::FileHandler> new_handlers = |
| GetDefaultManifestFileHandlers(); |
| old_handlers[0].accept[0].file_extensions.emplace(".csv"); |
| |
| EXPECT_TRUE(HaveFileHandlersChanged(&old_handlers, new_handlers)); |
| } |
| |
| } // namespace web_app |