| 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..198f877df96339ea2f284a2178af123030607da9 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,40 @@ | 
| #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_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 +69,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 +123,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 +211,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())); | 
| } | 
|  |