Index: chrome/browser/history/top_sites_extension_test.cc |
diff --git a/chrome/browser/history/top_sites_extension_test.cc b/chrome/browser/history/top_sites_extension_test.cc |
index 99078ceba6fa8e8094a76de2128aef9192dead14..6ceea518227250c49763b063ee61f2aafefe7653 100644 |
--- a/chrome/browser/history/top_sites_extension_test.cc |
+++ b/chrome/browser/history/top_sites_extension_test.cc |
@@ -5,7 +5,10 @@ |
#include "base/values.h" |
#include "build/build_config.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/profiles/profile.h" |
+#include "chrome/browser/ui/browser.h" |
#include "chrome/test/base/in_process_browser_test.h" |
using namespace extension_function_test_utils; |
@@ -13,20 +16,45 @@ using namespace extension_function_test_utils; |
namespace { |
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 |
-// Test started failing soon after commit. http://crbug.com/101783 |
-#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) { |
+IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, GetTopSites) { |
scoped_refptr<GetTopSitesFunction> get_top_sites_function( |
new GetTopSitesFunction()); |
// Without a callback the function will not generate a result. |
@@ -34,9 +62,7 @@ IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, MAYBE_GetTopSites) { |
scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
get_top_sites_function.get(), "[]", browser())); |
- EXPECT_EQ(base::Value::TYPE_LIST, result->GetType()); |
- // This should return at least 2 items (the prepopulated items). |
- // TODO(estade): change 2 to arraylen(kPrepopulatedPages) after that |
- // patch lands. |
- EXPECT_GE(result->GetType(), 2); |
+ base::ListValue* list; |
+ ASSERT_TRUE(result->GetAsList(&list)); |
+ EXPECT_GE(list->GetSize(), arraysize(history::kPrepopulatedPages)); |
} |