1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/login/login_prompt_test_utils.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/login/login_prompt.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben MurdochLoginPromptBrowserTestObserver::LoginPromptBrowserTestObserver()
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : auth_needed_count_(0), auth_supplied_count_(0), auth_cancelled_count_(0) {
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben MurdochLoginPromptBrowserTestObserver::~LoginPromptBrowserTestObserver() {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid LoginPromptBrowserTestObserver::Observe(
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int type,
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const content::NotificationSource& source,
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const content::NotificationDetails& details) {
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (type == chrome::NOTIFICATION_AUTH_NEEDED) {
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    AddHandler(content::Details<LoginNotificationDetails>(details)->handler());
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    auth_needed_count_++;
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  } else if (type == chrome::NOTIFICATION_AUTH_SUPPLIED) {
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    RemoveHandler(content::Details<AuthSuppliedLoginNotificationDetails>(
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                      details)->handler());
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    auth_supplied_count_++;
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  } else if (type == chrome::NOTIFICATION_AUTH_CANCELLED) {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    RemoveHandler(
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        content::Details<LoginNotificationDetails>(details)->handler());
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    auth_cancelled_count_++;
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid LoginPromptBrowserTestObserver::AddHandler(LoginHandler* handler) {
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::list<LoginHandler*>::iterator i =
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      std::find(handlers_.begin(), handlers_.end(), handler);
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Cannot use ASSERT_EQ, because gTest on Android confuses iterators with
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // containers.
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(i == handlers_.end());
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  handlers_.push_back(handler);
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid LoginPromptBrowserTestObserver::RemoveHandler(LoginHandler* handler) {
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::list<LoginHandler*>::iterator i =
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      std::find(handlers_.begin(), handlers_.end(), handler);
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Cannot use ASSERT_NE, because gTest on Android confuses iterators with
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // containers.
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(i != handlers_.end());
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  handlers_.erase(i);
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid LoginPromptBrowserTestObserver::Register(
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const content::NotificationSource& source) {
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  registrar_.Add(this, chrome::NOTIFICATION_AUTH_NEEDED, source);
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  registrar_.Add(this, chrome::NOTIFICATION_AUTH_SUPPLIED, source);
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  registrar_.Add(this, chrome::NOTIFICATION_AUTH_CANCELLED, source);
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
60116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWindowedLoadStopObserver::WindowedLoadStopObserver(
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::NavigationController* controller,
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int notification_count)
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : WindowedNavigationObserver<content::NOTIFICATION_LOAD_STOP>(controller),
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      remaining_notification_count_(notification_count) {
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // This should really be an ASSERT, if those were allowed in a method which
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // does not return void.
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_LE(0, remaining_notification_count_);
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid WindowedLoadStopObserver::Observe(
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int type,
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const content::NotificationSource& source,
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const content::NotificationDetails& details) {
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_LT(0, remaining_notification_count_);
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (--remaining_notification_count_ == 0)
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    WindowedNotificationObserver::Observe(type, source, details);
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
78