| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/values.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/extensions/api/top_sites/top_sites_api.h" |
| #include "chrome/browser/extensions/extension_function_test_utils.h" |
| #include "chrome/browser/history/top_sites.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| |
| namespace utils = extension_function_test_utils; |
| |
| namespace extensions { |
| |
| namespace { |
| |
| class TopSitesExtensionTest : public InProcessBrowserTest { |
| public: |
| TopSitesExtensionTest() : top_sites_inited_(false), waiting_(false) { |
| } |
| |
| virtual void SetUpOnMainThread() OVERRIDE { |
| 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( |
| base::Bind(&TopSitesExtensionTest::OnTopSitesAvailable, this), false); |
| |
| if (!top_sites_inited_) { |
| waiting_ = true; |
| base::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_) { |
| base::MessageLoop::current()->Quit(); |
| waiting_ = false; |
| } |
| top_sites_inited_ = true; |
| } |
| |
| bool top_sites_inited_; |
| bool waiting_; |
| }; |
| |
| } // namespace |
| |
| IN_PROC_BROWSER_TEST_F(TopSitesExtensionTest, GetTopSites) { |
| scoped_refptr<TopSitesGetFunction> get_top_sites_function( |
| new TopSitesGetFunction()); |
| // Without a callback the function will not generate a result. |
| get_top_sites_function->set_has_callback(true); |
| |
| scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
| get_top_sites_function.get(), "[]", browser())); |
| base::ListValue* list; |
| ASSERT_TRUE(result->GetAsList(&list)); |
| EXPECT_GE(list->GetSize(), arraysize(history::kPrepopulatedPages)); |
| } |
| |
| } // namespace extensions |