summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/extensions')
-rw-r--r--chromium/chrome/browser/extensions/api/management/management_apitest.cc73
-rw-r--r--chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc24
-rw-r--r--chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc9
-rw-r--r--chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc5
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 =