Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Unified Diff: chrome/browser/extensions/extension_gcm_app_handler_unittest.cc

Issue 225403021: Extract Profile-independent GCMService from GCMProfileService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed most comments. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_gcm_app_handler_unittest.cc
diff --git a/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc b/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc
index 1adc3dc21f20895e15847fbc7c2c781fbf3e6168..941199679ae0833c28ac43922698833881f7c81a 100644
--- a/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc
+++ b/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc
@@ -2,30 +2,58 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "chrome/browser/extensions/extension_gcm_app_handler.h"
+
+#include <vector>
+
#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/location.h"
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "base/observer_list.h"
#include "base/prefs/pref_service.h"
-#include "chrome/browser/extensions/extension_gcm_app_handler.h"
+#include "base/run_loop.h"
+#include "base/values.h"
+#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/test_extension_service.h"
#include "chrome/browser/extensions/test_extension_system.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/services/gcm/fake_gcm_client_factory.h"
+#include "chrome/browser/services/gcm/gcm_client_factory.h"
#include "chrome/browser/services/gcm/gcm_client_mock.h"
#include "chrome/browser/services/gcm/gcm_profile_service.h"
#include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
-#include "chrome/browser/services/gcm/gcm_profile_service_test_helper.h"
+#include "chrome/browser/signin/chrome_signin_client_factory.h"
#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/testing_profile.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/signin/core/common/signin_pref_names.h"
+#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/extension_system.h"
#include "extensions/common/extension.h"
+#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
+#include "extensions/common/permissions/api_permission.h"
#include "testing/gtest/include/gtest/gtest.h"
+#if !defined(OS_ANDROID)
+#include "chrome/browser/extensions/api/gcm/gcm_api.h"
+#endif
+
#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/settings/device_settings_service.h"
+#include "components/signin/core/browser/signin_manager_base.h"
#else
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
#include "components/signin/core/browser/signin_manager.h"
#endif
@@ -40,6 +68,118 @@ const char kTestingUsername[] = "user1@example.com";
} // namespace
+#if defined(OS_CHROMEOS)
+class FakeSigninManager : public SigninManagerBase {
+#else
+class FakeSigninManager : public SigninManager {
+#endif
+ public:
+ static KeyedService* Build(content::BrowserContext* context) {
+ return new FakeSigninManager(static_cast<Profile*>(context));
+ }
+
+ explicit FakeSigninManager(Profile* profile)
+#if defined(OS_CHROMEOS)
+ : SigninManagerBase(
+ ChromeSigninClientFactory::GetInstance()->GetForProfile(profile)),
+#else
+ : SigninManager(
+ ChromeSigninClientFactory::GetInstance()->GetForProfile(profile),
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile)),
+#endif
+ profile_(profile) {
+ Initialize(NULL);
+ }
+
+ virtual ~FakeSigninManager() {}
+
+ void SignIn(const std::string& username) {
+ SetAuthenticatedUsername(username);
+ FOR_EACH_OBSERVER(Observer,
+ observer_list_,
+ GoogleSigninSucceeded(username, std::string()));
+ }
+
+#if defined(OS_CHROMEOS)
+ void SignOut() {
+#else
+ virtual void SignOut() OVERRIDE {
+#endif
+ std::string username = GetAuthenticatedUsername();
+ clear_authenticated_username();
+ profile_->GetPrefs()->ClearPref(prefs::kGoogleServicesUsername);
+ FOR_EACH_OBSERVER(Observer, observer_list_, GoogleSignedOut(username));
+ }
+
+ private:
+ Profile* profile_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeSigninManager);
+};
+
+// Helper class for asynchronous waiting.
+class Waiter {
+ public:
+ Waiter() {}
+ ~Waiter() {}
+
+ // Waits until the asynchronous operation finishes.
+ void WaitUntilCompleted() {
+ run_loop_.reset(new base::RunLoop);
+ run_loop_->Run();
+ }
+
+ // Signals that the asynchronous operation finishes.
+ void SignalCompleted() {
+ if (run_loop_ && run_loop_->running())
+ run_loop_->Quit();
+ }
+
+ // Runs until UI loop becomes idle.
+ void PumpUILoop() {
+ base::MessageLoop::current()->RunUntilIdle();
+ }
+
+ // Runs until IO loop becomes idle.
+ void PumpIOLoop() {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&Waiter::OnIOLoopPump, base::Unretained(this)));
+
+ WaitUntilCompleted();
+ }
+
+ private:
+ void PumpIOLoopCompleted() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ SignalCompleted();
+ }
+
+ void OnIOLoopPump() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&Waiter::OnIOLoopPumpCompleted, base::Unretained(this)));
+ }
+
+ void OnIOLoopPumpCompleted() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&Waiter::PumpIOLoopCompleted, base::Unretained(this)));
+ }
+
+ scoped_ptr<base::RunLoop> run_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(Waiter);
+};
+
class FakeExtensionGCMAppHandler : public ExtensionGCMAppHandler {
public:
FakeExtensionGCMAppHandler(Profile* profile, Waiter* waiter)
@@ -53,7 +193,7 @@ class FakeExtensionGCMAppHandler : public ExtensionGCMAppHandler {
virtual void OnMessage(
const std::string& app_id,
- const GCMClient::IncomingMessage& message)OVERRIDE {
+ const GCMClient::IncomingMessage& message) OVERRIDE {
}
virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE {
@@ -111,9 +251,9 @@ class ExtensionGCMAppHandlerTest : public testing::Test {
// Create a new profile.
TestingProfile::Builder builder;
builder.AddTestingFactory(SigninManagerFactory::GetInstance(),
- gcm::FakeSigninManager::Build);
+ FakeSigninManager::Build);
profile_ = builder.Build();
- signin_manager_ = static_cast<gcm::FakeSigninManager*>(
+ signin_manager_ = static_cast<FakeSigninManager*>(
SigninManagerFactory::GetInstance()->GetForProfile(profile_.get()));
// Create extension service in order to uninstall the extension.
@@ -239,7 +379,7 @@ class ExtensionGCMAppHandlerTest : public testing::Test {
scoped_ptr<content::TestBrowserThreadBundle> thread_bundle_;
scoped_ptr<TestingProfile> profile_;
ExtensionService* extension_service_; // Not owned.
- gcm::FakeSigninManager* signin_manager_; // Not owned.
+ FakeSigninManager* signin_manager_; // Not owned.
// This is needed to create extension service under CrOS.
#if defined(OS_CHROMEOS)

Powered by Google App Engine
This is Rietveld 408576698