summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/all_urls_apitest.cc
diff options
context:
space:
mode:
authorvoodoo <voodoo@yandex-team.ru>2015-11-27 04:34:37 -0800
committerCommit bot <commit-bot@chromium.org>2015-11-27 12:36:28 +0000
commitee68b39b1d6deeb19709733e7e46892498a665f5 (patch)
treec61bb8703c32fb2054b70b9f919fc88f5ceea652 /chrome/browser/extensions/all_urls_apitest.cc
parentccbc032de67f682c7878324ab4124e87b3fb5b19 (diff)
downloadchromium_src-ee68b39b1d6deeb19709733e7e46892498a665f5.zip
chromium_src-ee68b39b1d6deeb19709733e7e46892498a665f5.tar.gz
chromium_src-ee68b39b1d6deeb19709733e7e46892498a665f5.tar.bz2
The AllUrlsApiTest.WhitelistedExtension test should no longer flake.
This is the second attempt to land this fix. The first one was https://codereview.chromium.org/1442593002/ but it also enabled another test that began to flake on Windows XP bots, so that patch had been reverted. BUG=174341 R=finnur@chromium.org Review URL: https://codereview.chromium.org/1483533002 Cr-Commit-Position: refs/heads/master@{#361983}
Diffstat (limited to 'chrome/browser/extensions/all_urls_apitest.cc')
-rw-r--r--chrome/browser/extensions/all_urls_apitest.cc45
1 files changed, 35 insertions, 10 deletions
diff --git a/chrome/browser/extensions/all_urls_apitest.cc b/chrome/browser/extensions/all_urls_apitest.cc
index ef01f6a..0988b9d 100644
--- a/chrome/browser/extensions/all_urls_apitest.cc
+++ b/chrome/browser/extensions/all_urls_apitest.cc
@@ -22,23 +22,51 @@ namespace {
const std::string kAllUrlsTarget = "/extensions/api_test/all_urls/index.html";
}
-class AllUrlsApiTest : public ExtensionApiTest {
+class AllUrlsApiTest : public ExtensionApiTest,
+ public ExtensionRegistryObserver {
protected:
- AllUrlsApiTest() {}
+ AllUrlsApiTest() : wait_until_reload_(false),
+ content_script_is_reloaded_(false),
+ execute_script_is_reloaded_(false) {}
~AllUrlsApiTest() override {}
const Extension* content_script() const { return content_script_.get(); }
const Extension* execute_script() const { return execute_script_.get(); }
+ // ExtensionRegistryObserver implementation
+ void OnExtensionLoaded(
+ content::BrowserContext*,
+ const Extension* extension) override {
+ if (!wait_until_reload_)
+ return;
+
+ if (extension->id() == content_script_->id())
+ content_script_is_reloaded_ = true;
+ else if (extension->id() == execute_script_->id())
+ execute_script_is_reloaded_ = true;
+
+ if (content_script_is_reloaded_ && execute_script_is_reloaded_) {
+ base::MessageLoop::current()->QuitWhenIdle();
+ wait_until_reload_ = false;
+ }
+ }
+
void WhitelistExtensions() {
+ ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> observer(this);
+ observer.Add(ExtensionRegistry::Get(browser()->profile()));
+
ExtensionsClient::ScriptingWhitelist whitelist;
whitelist.push_back(content_script_->id());
whitelist.push_back(execute_script_->id());
ExtensionsClient::Get()->SetScriptingWhitelist(whitelist);
// Extensions will have certain permissions withheld at initialization if
// they aren't whitelisted, so we need to reload them.
+ content_script_is_reloaded_ = false;
+ execute_script_is_reloaded_ = false;
+ wait_until_reload_ = true;
extension_service()->ReloadExtension(content_script_->id());
extension_service()->ReloadExtension(execute_script_->id());
+ base::MessageLoop::current()->Run();
}
private:
@@ -54,17 +82,14 @@ class AllUrlsApiTest : public ExtensionApiTest {
scoped_refptr<const Extension> content_script_;
scoped_refptr<const Extension> execute_script_;
+ bool wait_until_reload_;
+ bool content_script_is_reloaded_;
+ bool execute_script_is_reloaded_;
+
DISALLOW_COPY_AND_ASSIGN(AllUrlsApiTest);
};
-#if (defined(OS_WIN) && !defined(NDEBUG)) || defined(OS_CHROMEOS) || \
- (defined(OS_MACOSX) && defined(ADDRESS_SANITIZER))
-// http://crbug.com/174341
-#define MAYBE_WhitelistedExtension DISABLED_WhitelistedExtension
-#else
-#define MAYBE_WhitelistedExtension WhitelistedExtension
-#endif
-IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, MAYBE_WhitelistedExtension) {
+IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, WhitelistedExtension) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (base::CommandLine::ForCurrentProcess()->HasSwitch(