diff options
Diffstat (limited to 'chromium/chrome/browser/extensions/api')
4 files changed, 103 insertions, 8 deletions
diff --git a/chromium/chrome/browser/extensions/api/management/management_apitest.cc b/chromium/chrome/browser/extensions/api/management/management_apitest.cc index 1616369c7ed..8c68561345b 100644 --- a/chromium/chrome/browser/extensions/api/management/management_apitest.cc +++ b/chromium/chrome/browser/extensions/api/management/management_apitest.cc @@ -24,6 +24,7 @@ #include "extensions/browser/extension_system.h" #include "extensions/browser/test_management_policy.h" #include "extensions/common/manifest.h" +#include "extensions/common/switches.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" #include "extensions/test/test_extension_dir.h" @@ -162,9 +163,17 @@ class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { ASSERT_TRUE(https_test_server_.Start()); } + void SetUpCommandLine(base::CommandLine* command_line) override { + ExtensionManagementApiTest::SetUpCommandLine(command_line); + command_line->AppendSwitchASCII( + extensions::switches::kWhitelistedExtensionID, + "odfeghegfpmohakomgihhcnoboeecemb"); + } + void RunTest(const char* web_app_path, const char* background_script, - bool from_webstore) { + bool from_webstore, + bool whitelisted) { static constexpr char kManifest[] = R"({ "name": "Management API Test", @@ -173,19 +182,56 @@ class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { "background": { "scripts": ["background.js"] }, "replacement_web_app": "%s" })"; + + static constexpr char kPem[] = + "-----BEGIN PRIVATE KEY-----" + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCs5ycnzJEUSwlN" + "U7yAuywl8vro4dXew7Eijdd+gYwHAtaQyKxpeJHy09eusWKTfHEaOdqfqssqPMnl" + "XqoC+Tyt/24xM6rw6uSyAV78DRSAl7AxiyemxTh5P2rzaN4ytJayLpZDzwi38zeZ" + "QJC4TcSk04bclB2zfLFmMe8W53oxdE8vV6Xa2TPFigR6PV0FcRE40cCPHFhRTDwz" + "C04b/qW30Ceix2AeLPT4+qsGroq5kLt7zTgvaA+QToKeZNX41snk1w2u/IhOXG+J" + "0jyZnFU1lgnA9ScMW0laA+Ba2WXB5tLPgyRyyABRRaT5oiJCxRLQc+HFnMdUftGK" + "D4MKnf+/AgMBAAECggEADJ+/8x7zhMjJwBSaEcgYvBiWi0RZ6i7dkwlKL5lj0Os7" + "IU0VkYnVFiaze7TF3sDaPTD2Lmw48zeHAjE8NoVeEdIxiHQeSgLMedaxybNmyNDK" + "c4OWfI2vxuKDe4wvlQIscowGOqM2HsAqUg0tw9chwWsUUKyb0owLI8wHieOSv2OA" + "w8UlhflqkXLBUc4Mx3iqkIwAyrxQXT/vlA0M8/QvikK/zfeZYZ4f8tg23m3T0fV3" + "HC4k/Q09MFyUvURVYNpbPHrL83/ZbaHBniEjy+qBX4POO4xrKhow77tr/znB8bsA" + "T3mRwrEnYoIZmkwxlAdOMNxSYcAKZh4jPWOut0VQ0QKBgQDk341ysCaNzRq7nscR" + "RzDtpAA+UPcS2vcssXKDRjhsTp31qsUsVsYjTX+O/sv2uyb4HikYiFZOe3iPIfOl" + "ni7ZfhYFMMIZFjjP0cjQ7C/+ArxGb96DcTbRf7SNTDOLTtZy1jZSgIRek+2vvcr1" + "a/xPUMCxLEZdUPu+AVhKYHKHOQKBgQDBZVr04r4s5/BygRR3NhFgquI8ffdPHZzC" + "riEO1X/YOucTs+F+qwTvr25kRozpEjFsZJUibJTDngX9OziatAQdnjt5CtabOXd/" + "1rSgUadWEvRrcy/aaouCE1J+1unX6Kk5RHmIsK1YP3wC6JrHmqfnEVq9kaoUubTC" + "WHZfgjQGtwKBgF3B0nD8Bh8quVvIlGXYkwuWll7wzfYUaxMM8gsi1fRQVFcSCMm8" + "FljZ43pRmH5PdoxH1q/tEeX+oImJ8ASVgz2ncB/aNHkQaF+B4dDsIFDfD/+Ozkls" + "NHen5+/GGotj1WefpwsvCIqx8LmAd0cIYIihXP53U6/gf+/7Hw8A6YnJAoGAEbhs" + "xiWEkW7LLGLBck7k9ruRsUNFht1KwNfdtZNAfJqhE8AWuFmJQUEM12lTfgOpvanV" + "tGrIksgG+nYTsLEv81rNTkD8+wof9fnBYTM6Jvvjo3jReKzsjYWhuHeOw7bQ0quA" + "i1LM/1oJzeZsUD/OhLClZNtU/0Mo2enrJsMyay8CgYEApCQ8BDMYewQj2MCM92Vw" + "DWDzqQpfaGIG/eDAeEtdicbfdih3zUWfhEVOpnvf7s7nS8bMVpAo9pGW6sT/s8eX" + "POGiP9efxb2uHsX06pkAYZm9nddIliWnm0/eDBmSSXPymAZaNYFrex4wxMII20K/" + "ZX1nuseC+Lx0yzxa/c+iCWg=" + "-----END PRIVATE KEY-----"; + extensions::TestExtensionDir extension_dir; extension_dir.WriteManifest(base::StringPrintf( kManifest, https_test_server_.GetURL(web_app_path).spec().c_str())); extension_dir.WriteFile(FILE_PATH_LITERAL("background.js"), background_script); + + base::FilePath crx; + if (whitelisted) + crx = extension_dir.PackWithPem(kPem); + else + crx = extension_dir.Pack(); + extensions::ResultCatcher catcher; if (from_webstore) { // |expected_change| is the expected change in the number of installed // extensions. - ASSERT_TRUE(InstallExtensionFromWebstore(extension_dir.UnpackedPath(), - 1 /* expected_change */)); + ASSERT_TRUE(InstallExtensionFromWebstore(crx, 1 /* expected_change */)); } else { - ASSERT_TRUE(LoadExtension(extension_dir.UnpackedPath())); + ASSERT_TRUE(LoadExtension(crx)); } ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); @@ -194,6 +240,16 @@ class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { net::EmbeddedTestServer https_test_server_; }; +IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWhitelisted) { + static constexpr char kBackground[] = R"( + chrome.test.assertEq(undefined, chrome.management.installReplacementWebApp); + chrome.test.notifyPass(); + )"; + + RunTest("/management/install_replacement_web_app/good_web_app/index.html", + kBackground, true /* from_webstore */, false /* whitelisted */); +} + IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWebstore) { static constexpr char kBackground[] = R"( chrome.management.installReplacementWebApp(function() { @@ -203,7 +259,7 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWebstore) { });)"; RunTest("/management/install_replacement_web_app/good_web_app/index.html", - kBackground, false /* from_webstore */); + kBackground, false /* from_webstore */, true /* whitelisted */); } IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NoGesture) { @@ -215,7 +271,7 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NoGesture) { });)"; RunTest("/management/install_replacement_web_app/good_web_app/index.html", - kBackground, true /* from_webstore */); + kBackground, true /* from_webstore */, true /* whitelisted */); } IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotInstallableWebApp) { @@ -229,7 +285,7 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotInstallableWebApp) { });)"; RunTest("/management/install_replacement_web_app/bad_web_app/index.html", - kBackground, true /* from_webstore */); + kBackground, true /* from_webstore */, true /* whitelisted */); } IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, InstallableWebApp) { @@ -261,7 +317,8 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, InstallableWebApp) { EXPECT_FALSE(extensions::BookmarkOrHostedAppInstalled(browser()->profile(), good_web_app_url)); - RunTest(kGoodWebAppURL, kBackground, true /* from_webstore */); + RunTest(kGoodWebAppURL, kBackground, true /* from_webstore */, + true /* whitelisted */); EXPECT_TRUE(extensions::BookmarkOrHostedAppInstalled(browser()->profile(), good_web_app_url)); chrome::SetAutoAcceptPWAInstallConfirmationForTesting(false); diff --git a/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc index 0d620192ef6..524ae75a6b3 100644 --- a/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc +++ b/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc @@ -31,6 +31,10 @@ #include "chrome/browser/password_manager/password_manager_util_win.h" #elif defined(OS_MACOSX) #include "chrome/browser/password_manager/password_manager_util_mac.h" +#elif defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/login/quick_unlock/auth_token.h" +#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_factory.h" +#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_storage.h" #endif namespace { @@ -41,6 +45,14 @@ const char kExportInProgress[] = "in-progress"; // The error message returned to the UI when the user fails to reauthenticate. const char kReauthenticationFailed[] = "reauth-failed"; +#if defined(OS_CHROMEOS) +constexpr static base::TimeDelta kShowPasswordAuthTokenLifetime = + base::TimeDelta::FromSeconds( + PasswordAccessAuthenticator::kAuthValidityPeriodSeconds); +constexpr static base::TimeDelta kExportPasswordsAuthTokenLifetime = + base::TimeDelta::FromSeconds(5); +#endif + // Map password_manager::ExportProgressStatus to // extensions::api::passwords_private::ExportProgressStatus. extensions::api::passwords_private::ExportProgressStatus ConvertStatus( @@ -204,6 +216,18 @@ bool PasswordsPrivateDelegateImpl::OsReauthCall( web_contents_->GetTopLevelNativeWindow(), purpose); #elif defined(OS_MACOSX) return password_manager_util_mac::AuthenticateUser(purpose); +#elif defined(OS_CHROMEOS) + chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = + chromeos::quick_unlock::QuickUnlockFactory::GetForProfile(profile_); + const chromeos::quick_unlock::AuthToken* auth_token = + quick_unlock_storage->GetAuthToken(); + if (!auth_token || !auth_token->GetAge()) + return false; + const base::TimeDelta auth_token_lifespan = + (purpose == password_manager::ReauthPurpose::EXPORT) + ? kExportPasswordsAuthTokenLifetime + : kShowPasswordAuthTokenLifetime; + return auth_token->GetAge() <= auth_token_lifespan; #else return true; #endif diff --git a/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc b/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc index d09e42c33d2..0d37fecd99d 100644 --- a/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc +++ b/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc @@ -7,6 +7,7 @@ #include "ash/public/cpp/window_properties.h" #include "ash/public/interfaces/window_pin_type.mojom.h" #include "base/metrics/histogram_macros.h" +#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/ui/ash/chrome_screenshot_grabber.h" @@ -25,6 +26,14 @@ namespace tabs_util { void SetLockedFullscreenState(Browser* browser, bool locked) { UMA_HISTOGRAM_BOOLEAN("Extensions.LockedFullscreenStateRequest", locked); + // Disable ChromeVox before entering locked fullscreen. Quickfix for + // crbug.com/957950. + auto* const accessibility_manager = chromeos::AccessibilityManager::Get(); + if (locked && accessibility_manager && + accessibility_manager->IsSpokenFeedbackEnabled()) { + accessibility_manager->EnableSpokenFeedback(false); + } + aura::Window* window = browser->window()->GetNativeWindow(); // TRUSTED_PINNED is used here because that one locks the window fullscreen // without allowing the user to exit (as opposed to regular PINNED). diff --git a/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc b/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc index 183514c8fb5..6ab810e59fa 100644 --- a/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc +++ b/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc @@ -243,6 +243,11 @@ IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ServerRedirect) { << message_; } +IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, FormSubmission) { + ASSERT_TRUE(StartEmbeddedTestServer()); + ASSERT_TRUE(RunExtensionTest("webnavigation/formSubmission")) << message_; +} + IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, Download) { ASSERT_TRUE(StartEmbeddedTestServer()); content::DownloadManager* download_manager = |