Commit 141a38a4 authored by estade@chromium.org's avatar estade@chromium.org

top sites: re-enable test

if TopSites hasn't loaded, the ExtensionFunction returns asynchronously, which RunFunctionAndReturnResult can't handle

BUG=101783
TEST=self

Review URL: http://codereview.chromium.org/8363041

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108035 0039d316-1c4b-4281-b951-d872f2087c98
parent 18f56c76
...@@ -5,7 +5,10 @@ ...@@ -5,7 +5,10 @@
#include "base/values.h" #include "base/values.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/extensions/extension_function_test_utils.h"
#include "chrome/browser/history/top_sites.h"
#include "chrome/browser/history/top_sites_extension_api.h" #include "chrome/browser/history/top_sites_extension_api.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
using namespace extension_function_test_utils; using namespace extension_function_test_utils;
...@@ -13,20 +16,45 @@ using namespace extension_function_test_utils; ...@@ -13,20 +16,45 @@ using namespace extension_function_test_utils;
namespace { namespace {
class TopSitesExtensionTest : public InProcessBrowserTest { class TopSitesExtensionTest : public InProcessBrowserTest {
public:
TopSitesExtensionTest() : top_sites_inited_(false), waiting_(false) {
}
void SetUpOnMainThread() {
history::TopSites* top_sites = browser()->profile()->GetTopSites();
// This may return async or sync. If sync, top_sites_inited_ will be true
// before we get to the conditional below. Otherwise, we'll run a nested
// message loop until the async callback.
top_sites->GetMostVisitedURLs(
&consumer_,
base::Bind(&TopSitesExtensionTest::OnTopSitesAvailable, this));
if (!top_sites_inited_) {
waiting_ = true;
MessageLoop::current()->Run();
}
// By this point, we know topsites has loaded. We can run the tests now.
}
private:
void OnTopSitesAvailable(const history::MostVisitedURLList& data) {
if (waiting_) {
MessageLoop::current()->Quit();
waiting_ = false;
}
top_sites_inited_ = true;
}
CancelableRequestConsumer consumer_;
bool top_sites_inited_;
bool waiting_;
}; };
} // namespace } // namespace
// Test started failing soon after commit. http://crbug.com/101783 IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, GetTopSites) {
#if defined(OS_WIN)
#define MAYBE_GetTopSites FAILS_GetTopSites
#elif defined(OS_LINUX)
#define MAYBE_GetTopSites FLAKY_GetTopSites
#else
#define MAYBE_GetTopSites GetTopSites
#endif
IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, MAYBE_GetTopSites) {
scoped_refptr<GetTopSitesFunction> get_top_sites_function( scoped_refptr<GetTopSitesFunction> get_top_sites_function(
new GetTopSitesFunction()); new GetTopSitesFunction());
// Without a callback the function will not generate a result. // Without a callback the function will not generate a result.
...@@ -34,9 +62,7 @@ IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, MAYBE_GetTopSites) { ...@@ -34,9 +62,7 @@ IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, MAYBE_GetTopSites) {
scoped_ptr<base::Value> result(RunFunctionAndReturnResult( scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
get_top_sites_function.get(), "[]", browser())); get_top_sites_function.get(), "[]", browser()));
EXPECT_EQ(base::Value::TYPE_LIST, result->GetType()); base::ListValue* list;
// This should return at least 2 items (the prepopulated items). ASSERT_TRUE(result->GetAsList(&list));
// TODO(estade): change 2 to arraylen(kPrepopulatedPages) after that EXPECT_GE(list->GetSize(), arraysize(history::kPrepopulatedPages));
// patch lands.
EXPECT_GE(result->GetType(), 2);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment