| Index: chrome/browser/extensions/app_notify_channel_setup_unittest.cc
|
| diff --git a/chrome/browser/extensions/app_notify_channel_setup_unittest.cc b/chrome/browser/extensions/app_notify_channel_setup_unittest.cc
|
| deleted file mode 100644
|
| index fd0428f8407453b9baf6b3559e5d15569345fe6c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/app_notify_channel_setup_unittest.cc
|
| +++ /dev/null
|
| @@ -1,321 +0,0 @@
|
| -// 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/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/prefs/testing_pref_service.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "chrome/browser/extensions/app_notify_channel_setup.h"
|
| -#include "chrome/browser/extensions/app_notify_channel_ui.h"
|
| -#include "chrome/browser/signin/token_service_factory.h"
|
| -#include "chrome/browser/signin/token_service_unittest.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "content/public/test/test_browser_thread.h"
|
| -#include "google_apis/gaia/gaia_urls.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using content::BrowserThread;
|
| -using testing::_;
|
| -using testing::Return;
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace {
|
| -
|
| -const int kRouteId = 4;
|
| -const int kCallbackId = 5;
|
| -const char* kFakeExtensionId = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
| -
|
| -static const char kValidAccessTokenResponse[] =
|
| - "{"
|
| - " \"access_token\": \"at1\","
|
| - " \"expires_in\": 3600,"
|
| - " \"token_type\": \"Bearer\""
|
| - "}";
|
| -
|
| -class MockTokenService : public TokenService {
|
| - public:
|
| - MockTokenService() : mockToken_("test_refresh_token") { }
|
| - virtual ~MockTokenService() { }
|
| -
|
| - bool AreCredentialsValid() const OVERRIDE {
|
| - return true;
|
| - }
|
| -
|
| - const std::string& GetOAuth2LoginRefreshToken() const OVERRIDE {
|
| - return mockToken_;
|
| - }
|
| -
|
| - std::string mockToken_;
|
| -
|
| - MOCK_CONST_METHOD0(HasOAuthLoginToken, bool());
|
| -};
|
| -
|
| -ProfileKeyedService* BuildMockTokenService(Profile* profile) {
|
| - return new MockTokenService;
|
| -}
|
| -
|
| -MockTokenService* BuildForProfile(Profile* profile) {
|
| - return static_cast<MockTokenService*>(
|
| - TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - profile, BuildMockTokenService));
|
| -}
|
| -
|
| -class TestProfile : public TestingProfile {
|
| - public:
|
| - TestProfile()
|
| - : TestingProfile(),
|
| - token_service_(BuildForProfile(this)) {
|
| - }
|
| -
|
| - virtual ~TestProfile() { }
|
| -
|
| - void SetTokenServiceHasTokenResult(bool result) {
|
| - EXPECT_CALL(*token_service_, HasOAuthLoginToken())
|
| - .WillRepeatedly(Return(result));
|
| - }
|
| -
|
| - private:
|
| - MockTokenService* token_service_;
|
| -};
|
| -
|
| -class TestDelegate : public AppNotifyChannelSetup::Delegate,
|
| - public base::SupportsWeakPtr<TestDelegate> {
|
| - public:
|
| - TestDelegate() : was_called_(false) {}
|
| - virtual ~TestDelegate() {}
|
| -
|
| - virtual void AppNotifyChannelSetupComplete(
|
| - const std::string& channel_id,
|
| - const std::string& error,
|
| - const AppNotifyChannelSetup* setup) OVERRIDE {
|
| - EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - EXPECT_FALSE(was_called_);
|
| - was_called_ = true;
|
| - error_ = error;
|
| - route_id_ = setup->return_route_id();
|
| - callback_id_ = setup->callback_id();
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - // Called to check that we were called with the expected arguments.
|
| - void ExpectWasCalled(const std::string& expected_channel_id,
|
| - const std::string& expected_error) {
|
| - EXPECT_TRUE(was_called_);
|
| - EXPECT_EQ(expected_error, error_);
|
| - EXPECT_EQ(kRouteId, route_id_);
|
| - EXPECT_EQ(kCallbackId, callback_id_);
|
| - }
|
| -
|
| - private:
|
| - // Has our callback been called yet?
|
| - bool was_called_;
|
| -
|
| - // When our AppNotifyChannelSetupComplete method is called, we copy the
|
| - // arguments into these member variables.
|
| - std::string channel_id_;
|
| - std::string error_;
|
| - int route_id_;
|
| - int callback_id_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestDelegate);
|
| -};
|
| -
|
| -class TestUI : public AppNotifyChannelUI {
|
| - public:
|
| - TestUI() : delegate_(NULL) {}
|
| - virtual ~TestUI() {}
|
| -
|
| - // AppNotifyChannelUI.
|
| - virtual void PromptSyncSetup(Delegate* delegate) OVERRIDE {
|
| - CHECK(!delegate_);
|
| - delegate_ = delegate;
|
| -
|
| - // If we have a result, post a task to call back the delegate with
|
| - // it. Otherwise ReportResult can be called manually at some later point.
|
| - if (setup_result_.get()) {
|
| - MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&TestUI::ReportResult,
|
| - base::Unretained(this),
|
| - *setup_result_));
|
| - }
|
| - }
|
| -
|
| - // This will make us automatically call back the delegate with |result| after
|
| - // PromptSyncSetup is called.
|
| - void SetSyncSetupResult(bool result) {
|
| - setup_result_.reset(new bool);
|
| - *setup_result_ = result;
|
| - }
|
| -
|
| - void ReportResult(bool result) {
|
| - CHECK(delegate_);
|
| - delegate_->OnSyncSetupResult(result);
|
| - }
|
| -
|
| - private:
|
| - AppNotifyChannelUI::Delegate* delegate_;
|
| - scoped_ptr<bool> setup_result_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestUI);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class AppNotifyChannelSetupTest : public testing::Test {
|
| - public:
|
| - AppNotifyChannelSetupTest() : ui_thread_(BrowserThread::UI, &message_loop_),
|
| - db_thread_(BrowserThread::DB),
|
| - ui_(new TestUI()),
|
| - factory_(NULL) {
|
| - }
|
| -
|
| - virtual ~AppNotifyChannelSetupTest() {}
|
| -
|
| - virtual void SetLoggedInUser(const std::string username) {
|
| - profile_.GetPrefs()->SetString(prefs::kGoogleServicesUsername, username);
|
| - }
|
| -
|
| - virtual AppNotifyChannelSetup* CreateInstance() {
|
| - GURL page_url("http://www.google.com");
|
| - return new AppNotifyChannelSetup(&profile_,
|
| - kFakeExtensionId,
|
| - "1234",
|
| - page_url,
|
| - kRouteId,
|
| - kCallbackId,
|
| - ui_.release(),
|
| - delegate_.AsWeakPtr());
|
| - }
|
| -
|
| - virtual void SetupLogin(bool should_prompt, bool should_succeed) {
|
| - if (should_succeed) {
|
| - SetLoggedInUser("user@gmail.com");
|
| - profile_.SetTokenServiceHasTokenResult(true);
|
| - }
|
| - if (should_prompt)
|
| - ui_->SetSyncSetupResult(should_succeed);
|
| - }
|
| -
|
| - virtual void SetupFetchAccessToken(bool should_succeed) {
|
| - factory_.SetFakeResponse(
|
| - GaiaUrls::GetInstance()->oauth2_token_url(),
|
| - kValidAccessTokenResponse,
|
| - should_succeed);
|
| - }
|
| -
|
| - virtual void SetupRecordGrant(bool should_succeed) {
|
| - factory_.SetFakeResponse(
|
| - AppNotifyChannelSetup::GetOAuth2IssueTokenURL().spec(),
|
| - "whatever",
|
| - should_succeed);
|
| - }
|
| -
|
| - virtual void SetupGetChannelId(bool should_succeed) {
|
| - factory_.SetFakeResponse(
|
| - AppNotifyChannelSetup::GetCWSChannelServiceURL().spec(),
|
| - "{\"id\": \"dummy_do_not_use\"}",
|
| - should_succeed);
|
| - }
|
| -
|
| - virtual void RunServerTest(AppNotifyChannelSetup* setup,
|
| - const std::string& expected_code,
|
| - const std::string& expected_error) {
|
| - setup->Start();
|
| - message_loop_.Run();
|
| - delegate_.ExpectWasCalled(expected_code, expected_error);
|
| - }
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - db_thread_.Start();
|
| - }
|
| -
|
| - virtual void TearDown() OVERRIDE {
|
| - // Schedule another task on the DB thread to notify us that it's safe to
|
| - // carry on with the test.
|
| - base::WaitableEvent done(false, false);
|
| - BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
|
| - base::Bind(&base::WaitableEvent::Signal, base::Unretained(&done)));
|
| - done.Wait();
|
| - db_thread_.Stop();
|
| - }
|
| -
|
| - protected:
|
| - MessageLoop message_loop_;
|
| - content::TestBrowserThread ui_thread_;
|
| - content::TestBrowserThread db_thread_;
|
| - TestProfile profile_;
|
| - TestDelegate delegate_;
|
| - scoped_ptr<TestUI> ui_;
|
| - net::FakeURLFetcherFactory factory_;
|
| -};
|
| -
|
| -TEST_F(AppNotifyChannelSetupTest, LoginFailure) {
|
| - SetupLogin(true, false);
|
| -
|
| - scoped_refptr<AppNotifyChannelSetup> setup = CreateInstance();
|
| - RunServerTest(setup, "", "canceled_by_user");
|
| -}
|
| -
|
| -TEST_F(AppNotifyChannelSetupTest, DoubleFetchAccessTokenFailure) {
|
| - SetupLogin(false, true);
|
| - SetupFetchAccessToken(false);
|
| - SetupLogin(true, true);
|
| - SetupFetchAccessToken(false);
|
| -
|
| - scoped_refptr<AppNotifyChannelSetup> setup = CreateInstance();
|
| - RunServerTest(setup, "", "internal_error");
|
| -}
|
| -
|
| -TEST_F(AppNotifyChannelSetupTest, RecordGrantFailure) {
|
| - SetupLogin(false, true);
|
| - SetupFetchAccessToken(true);
|
| - SetupRecordGrant(false);
|
| -
|
| - scoped_refptr<AppNotifyChannelSetup> setup = CreateInstance();
|
| - RunServerTest(setup, "", "internal_error");
|
| -}
|
| -
|
| -TEST_F(AppNotifyChannelSetupTest, GetChannelIdFailure) {
|
| - SetupLogin(false, true);
|
| - SetupFetchAccessToken(true);
|
| - SetupRecordGrant(true);
|
| - SetupGetChannelId(false);
|
| -
|
| - scoped_refptr<AppNotifyChannelSetup> setup = CreateInstance();
|
| - RunServerTest(setup, "", "internal_error");
|
| -}
|
| -
|
| -TEST_F(AppNotifyChannelSetupTest, FirstFetchAccessTokenSuccess) {
|
| - SetupLogin(false, true);
|
| - SetupFetchAccessToken(true);
|
| - SetupRecordGrant(true);
|
| - SetupGetChannelId(true);
|
| -
|
| - scoped_refptr<AppNotifyChannelSetup> setup = CreateInstance();
|
| - RunServerTest(setup, "dummy_do_not_use", "");
|
| -}
|
| -
|
| -TEST_F(AppNotifyChannelSetupTest, SecondFetchAccessTokenSuccess) {
|
| - SetupLogin(false, true);
|
| - SetupFetchAccessToken(false);
|
| - SetupLogin(true, true);
|
| - SetupFetchAccessToken(true);
|
| - SetupRecordGrant(true);
|
| - SetupGetChannelId(true);
|
| -
|
| - scoped_refptr<AppNotifyChannelSetup> setup = CreateInstance();
|
| - RunServerTest(setup, "dummy_do_not_use", "");
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|