File: password_manager_internals_service_unittest.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (83 lines) | stat: -rw-r--r-- 3,227 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright 2014 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 "components/password_manager/core/browser/password_manager_internals_service.h"

#include "chrome/test/base/testing_profile.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/password_manager/content/browser/password_manager_internals_service_factory.h"
#include "components/password_manager/core/browser/log_receiver.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

using password_manager::PasswordManagerInternalsService;
using password_manager::PasswordManagerInternalsServiceFactory;

namespace {

const char kTestText[] = "abcd1234";

class MockLogReceiver : public password_manager::LogReceiver {
 public:
  MockLogReceiver() {}

  MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&));
};

enum ProfileType { NORMAL_PROFILE, INCOGNITO_PROFILE };

scoped_ptr<TestingProfile> CreateProfile(ProfileType type) {
  TestingProfile::Builder builder;
  scoped_ptr<TestingProfile> profile(builder.Build());
#if !defined(NDEBUG)
  // During the test cases, the profiles may get created on the same address. To
  // avoid over-zealous asserts we need to mark the newly created one as "live".
  // See declaration of MarkBrowserContextLiveForTesting for more details.
  BrowserContextDependencyManager::GetInstance()
      ->MarkBrowserContextLiveForTesting(profile.get());
  if (type == INCOGNITO_PROFILE) {
    BrowserContextDependencyManager::GetInstance()
        ->MarkBrowserContextLiveForTesting(profile->GetOffTheRecordProfile());
  }
#endif
  return profile.Pass();
}

}  // namespace

// When the profile is not incognito, it should be possible to activate the
// service.
TEST(PasswordManagerInternalsServiceTest, ServiceActiveNonIncognito) {
  scoped_ptr<TestingProfile> profile(CreateProfile(NORMAL_PROFILE));
  PasswordManagerInternalsService* service =
      PasswordManagerInternalsServiceFactory::GetForBrowserContext(
          profile.get());
  testing::StrictMock<MockLogReceiver> receiver;

  ASSERT_TRUE(profile);
  ASSERT_TRUE(service);
  EXPECT_EQ(std::string(), service->RegisterReceiver(&receiver));

  // TODO(vabr): Use a MockPasswordManagerClient to detect activity changes.
  EXPECT_CALL(receiver, LogSavePasswordProgress(kTestText)).Times(1);
  service->ProcessLog(kTestText);

  service->UnregisterReceiver(&receiver);
}

// When the browser profile is incognito, it should not be possible to activate
// the service.
TEST(PasswordManagerInternalsServiceTest, ServiceNotActiveIncognito) {
  scoped_ptr<TestingProfile> profile(CreateProfile(INCOGNITO_PROFILE));
  ASSERT_TRUE(profile);

  Profile* incognito_profile = profile->GetOffTheRecordProfile();
  PasswordManagerInternalsService* service =
      PasswordManagerInternalsServiceFactory::GetForBrowserContext(
          incognito_profile);
  // BrowserContextKeyedBaseFactory::GetBrowserContextToUse should return NULL
  // for |profile|, because |profile| is incognito. Therefore the returned
  // |service| should also be NULL.
  EXPECT_FALSE(service);
}