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