| Index: chrome/browser/background/background_contents_service_unittest.cc
|
| diff --git a/chrome/browser/background/background_contents_service_unittest.cc b/chrome/browser/background/background_contents_service_unittest.cc
|
| index a58cfbc3ad1e2514fadd84d5553a371e7e7129ff..f739fda9b6df9f873f17e3a2c620679bfadbbd1a 100644
|
| --- a/chrome/browser/background/background_contents_service_unittest.cc
|
| +++ b/chrome/browser/background/background_contents_service_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/command_line.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/prefs/pref_service.h"
|
| +#include "base/run_loop.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/background/background_contents_service.h"
|
| #include "chrome/browser/background/background_contents_service_factory.h"
|
| @@ -16,19 +17,39 @@
|
| #include "chrome/browser/tab_contents/background_contents.h"
|
| #include "chrome/browser/ui/browser_list.h"
|
| #include "chrome/common/pref_names.h"
|
| +#include "chrome/test/base/scoped_testing_local_state.h"
|
| #include "chrome/test/base/testing_browser_process.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| +#include "chrome/test/base/testing_profile_manager.h"
|
| #include "content/public/browser/notification_service.h"
|
| +#include "content/public/test/test_browser_thread_bundle.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/platform_test.h"
|
| +#include "ui/message_center/message_center.h"
|
| #include "url/gurl.h"
|
|
|
| class BackgroundContentsServiceTest : public testing::Test {
|
| - public:
|
| - BackgroundContentsServiceTest() {}
|
| - virtual ~BackgroundContentsServiceTest() {}
|
| - virtual void SetUp() {
|
| - command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM));
|
| + protected:
|
| + BackgroundContentsServiceTest()
|
| + : command_line_(CommandLine::NO_PROGRAM),
|
| + profile_manager_(TestingBrowserProcess::GetGlobal()),
|
| + profile_(NULL) {
|
| + CHECK(profile_manager_.SetUp());
|
| + profile_ = profile_manager_.CreateTestingProfile("TestProfile");
|
| + service_.reset(new BackgroundContentsService(profile_, &command_line_));
|
| + BackgroundContentsServiceFactory::GetInstance()->
|
| + RegisterUserPrefsOnBrowserContext(profile_);
|
| + }
|
| +
|
| + virtual ~BackgroundContentsServiceTest() {
|
| + base::RunLoop().RunUntilIdle();
|
| + }
|
| +
|
| + static void SetUpTestCase() {
|
| + message_center::MessageCenter::Initialize();
|
| + }
|
| + static void TearDownTestCase() {
|
| + message_center::MessageCenter::Shutdown();
|
| }
|
|
|
| const DictionaryValue* GetPrefs(Profile* profile) {
|
| @@ -47,7 +68,11 @@ class BackgroundContentsServiceTest : public testing::Test {
|
| return url;
|
| }
|
|
|
| - scoped_ptr<CommandLine> command_line_;
|
| + content::TestBrowserThreadBundle thread_bundle;
|
| + CommandLine command_line_;
|
| + TestingProfileManager profile_manager_;
|
| + TestingProfile* profile_; // Not owned.
|
| + scoped_ptr<BackgroundContentsService> service_;
|
| };
|
|
|
| class MockBackgroundContents : public BackgroundContents {
|
| @@ -97,104 +122,87 @@ class MockBackgroundContents : public BackgroundContents {
|
| private:
|
| GURL url_;
|
|
|
| - // The ID of our parent application
|
| + // The ID of our parent application.
|
| string16 appid_;
|
|
|
| - // Parent profile
|
| + // Parent profile. Not owned.
|
| Profile* profile_;
|
| };
|
|
|
| TEST_F(BackgroundContentsServiceTest, Create) {
|
| - // Check for creation and leaks.
|
| - TestingProfile profile;
|
| - BackgroundContentsService service(&profile, command_line_.get());
|
| + // Check for creation and leaks when the basic objects in the
|
| + // fixtures are created/destructed.
|
| }
|
|
|
| TEST_F(BackgroundContentsServiceTest, BackgroundContentsCreateDestroy) {
|
| - TestingProfile profile;
|
| - BackgroundContentsService service(&profile, command_line_.get());
|
| - MockBackgroundContents* contents = new MockBackgroundContents(&profile);
|
| - EXPECT_FALSE(service.IsTracked(contents));
|
| - contents->SendOpenedNotification(&service);
|
| - EXPECT_TRUE(service.IsTracked(contents));
|
| + MockBackgroundContents* contents = new MockBackgroundContents(profile_);
|
| + EXPECT_FALSE(service_->IsTracked(contents));
|
| + contents->SendOpenedNotification(service_.get());
|
| + EXPECT_TRUE(service_->IsTracked(contents));
|
| delete contents;
|
| - EXPECT_FALSE(service.IsTracked(contents));
|
| + EXPECT_FALSE(service_->IsTracked(contents));
|
| }
|
|
|
| TEST_F(BackgroundContentsServiceTest, BackgroundContentsUrlAdded) {
|
| - TestingProfile profile;
|
| - BackgroundContentsService service(&profile, command_line_.get());
|
| - BackgroundContentsServiceFactory::GetInstance()->
|
| - RegisterUserPrefsOnBrowserContext(&profile);
|
| GURL orig_url;
|
| GURL url("http://a/");
|
| GURL url2("http://a/");
|
| {
|
| scoped_ptr<MockBackgroundContents> contents(
|
| - new MockBackgroundContents(&profile));
|
| - EXPECT_EQ(0U, GetPrefs(&profile)->size());
|
| - contents->SendOpenedNotification(&service);
|
| + new MockBackgroundContents(profile_));
|
| + EXPECT_EQ(0U, GetPrefs(profile_)->size());
|
| + contents->SendOpenedNotification(service_.get());
|
|
|
| contents->Navigate(url);
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| - EXPECT_EQ(url.spec(), GetPrefURLForApp(&profile, contents->appid()));
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| + EXPECT_EQ(url.spec(), GetPrefURLForApp(profile_, contents->appid()));
|
|
|
| // Navigate the contents to a new url, should not change url.
|
| contents->Navigate(url2);
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| - EXPECT_EQ(url.spec(), GetPrefURLForApp(&profile, contents->appid()));
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| + EXPECT_EQ(url.spec(), GetPrefURLForApp(profile_, contents->appid()));
|
| }
|
| // Contents are deleted, url should persist.
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| }
|
|
|
| TEST_F(BackgroundContentsServiceTest, BackgroundContentsUrlAddedAndClosed) {
|
| - TestingProfile profile;
|
| - BackgroundContentsService service(&profile, command_line_.get());
|
| - BackgroundContentsServiceFactory::GetInstance()->
|
| - RegisterUserPrefsOnBrowserContext(&profile);
|
| -
|
| GURL url("http://a/");
|
| - MockBackgroundContents* contents = new MockBackgroundContents(&profile);
|
| - EXPECT_EQ(0U, GetPrefs(&profile)->size());
|
| - contents->SendOpenedNotification(&service);
|
| + MockBackgroundContents* contents = new MockBackgroundContents(profile_);
|
| + EXPECT_EQ(0U, GetPrefs(profile_)->size());
|
| + contents->SendOpenedNotification(service_.get());
|
| contents->Navigate(url);
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| - EXPECT_EQ(url.spec(), GetPrefURLForApp(&profile, contents->appid()));
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| + EXPECT_EQ(url.spec(), GetPrefURLForApp(profile_, contents->appid()));
|
|
|
| // Fake a window closed by script.
|
| - contents->MockClose(&profile);
|
| - EXPECT_EQ(0U, GetPrefs(&profile)->size());
|
| + contents->MockClose(profile_);
|
| + EXPECT_EQ(0U, GetPrefs(profile_)->size());
|
| }
|
|
|
| // Test what happens if a BackgroundContents shuts down (say, due to a renderer
|
| // crash) then is restarted. Should not persist URL twice.
|
| TEST_F(BackgroundContentsServiceTest, RestartBackgroundContents) {
|
| - TestingProfile profile;
|
| - BackgroundContentsService service(&profile, command_line_.get());
|
| - BackgroundContentsServiceFactory::GetInstance()->
|
| - RegisterUserPrefsOnBrowserContext(&profile);
|
| -
|
| GURL url("http://a/");
|
| {
|
| scoped_ptr<MockBackgroundContents> contents(new MockBackgroundContents(
|
| - &profile, "appid"));
|
| - contents->SendOpenedNotification(&service);
|
| + profile_, "appid"));
|
| + contents->SendOpenedNotification(service_.get());
|
| contents->Navigate(url);
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| - EXPECT_EQ(url.spec(), GetPrefURLForApp(&profile, contents->appid()));
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| + EXPECT_EQ(url.spec(), GetPrefURLForApp(profile_, contents->appid()));
|
| }
|
| // Contents deleted, url should be persisted.
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
|
|
| {
|
| // Reopen the BackgroundContents to the same URL, we should not register the
|
| // URL again.
|
| scoped_ptr<MockBackgroundContents> contents(new MockBackgroundContents(
|
| - &profile, "appid"));
|
| - contents->SendOpenedNotification(&service);
|
| + profile_, "appid"));
|
| + contents->SendOpenedNotification(service_.get());
|
| contents->Navigate(url);
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| }
|
| }
|
|
|
| @@ -202,34 +210,29 @@ TEST_F(BackgroundContentsServiceTest, RestartBackgroundContents) {
|
| // between a BackgroundContents and its parent extension, including
|
| // unregistering the BC when the extension is uninstalled.
|
| TEST_F(BackgroundContentsServiceTest, TestApplicationIDLinkage) {
|
| - TestingProfile profile;
|
| - BackgroundContentsService service(&profile, command_line_.get());
|
| - BackgroundContentsServiceFactory::GetInstance()->
|
| - RegisterUserPrefsOnBrowserContext(&profile);
|
| -
|
| - EXPECT_EQ(NULL, service.GetAppBackgroundContents(ASCIIToUTF16("appid")));
|
| - MockBackgroundContents* contents = new MockBackgroundContents(&profile,
|
| + EXPECT_EQ(NULL, service_->GetAppBackgroundContents(ASCIIToUTF16("appid")));
|
| + MockBackgroundContents* contents = new MockBackgroundContents(profile_,
|
| "appid");
|
| scoped_ptr<MockBackgroundContents> contents2(
|
| - new MockBackgroundContents(&profile, "appid2"));
|
| - contents->SendOpenedNotification(&service);
|
| - EXPECT_EQ(contents, service.GetAppBackgroundContents(contents->appid()));
|
| - contents2->SendOpenedNotification(&service);
|
| - EXPECT_EQ(contents2.get(), service.GetAppBackgroundContents(
|
| + new MockBackgroundContents(profile_, "appid2"));
|
| + contents->SendOpenedNotification(service_.get());
|
| + EXPECT_EQ(contents, service_->GetAppBackgroundContents(contents->appid()));
|
| + contents2->SendOpenedNotification(service_.get());
|
| + EXPECT_EQ(contents2.get(), service_->GetAppBackgroundContents(
|
| contents2->appid()));
|
| - EXPECT_EQ(0U, GetPrefs(&profile)->size());
|
| + EXPECT_EQ(0U, GetPrefs(profile_)->size());
|
|
|
| // Navigate the contents, then make sure the one associated with the extension
|
| // is unregistered.
|
| GURL url("http://a/");
|
| GURL url2("http://b/");
|
| contents->Navigate(url);
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| contents2->Navigate(url2);
|
| - EXPECT_EQ(2U, GetPrefs(&profile)->size());
|
| - service.ShutdownAssociatedBackgroundContents(ASCIIToUTF16("appid"));
|
| - EXPECT_FALSE(service.IsTracked(contents));
|
| - EXPECT_EQ(NULL, service.GetAppBackgroundContents(ASCIIToUTF16("appid")));
|
| - EXPECT_EQ(1U, GetPrefs(&profile)->size());
|
| - EXPECT_EQ(url2.spec(), GetPrefURLForApp(&profile, contents2->appid()));
|
| + EXPECT_EQ(2U, GetPrefs(profile_)->size());
|
| + service_->ShutdownAssociatedBackgroundContents(ASCIIToUTF16("appid"));
|
| + EXPECT_FALSE(service_->IsTracked(contents));
|
| + EXPECT_EQ(NULL, service_->GetAppBackgroundContents(ASCIIToUTF16("appid")));
|
| + EXPECT_EQ(1U, GetPrefs(profile_)->size());
|
| + EXPECT_EQ(url2.spec(), GetPrefURLForApp(profile_, contents2->appid()));
|
| }
|
|
|