Added browser test for Captive Portal window ctor and dtor.

BUG=294477
TEST=browser_tests:CaptivePortalWindowCtorDtor*

Review URL: https://codereview.chromium.org/163413002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251071 0039d316-1c4b-4281-b951-d872f2087c98
parent e837d373
......@@ -8,7 +8,12 @@
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/chromeos/login/captive_portal_window_proxy.h"
#include "chrome/browser/chromeos/login/login_display_host_impl.h"
#include "chrome/browser/chromeos/login/login_manager_test.h"
#include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
#include "chrome/browser/chromeos/login/webui_login_view.h"
#include "chrome/browser/chromeos/net/network_portal_detector.h"
#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chromeos/chromeos_switches.h"
......@@ -16,6 +21,8 @@ namespace chromeos {
namespace {
const char kStubEthernetServicePath[] = "eth1";
// Stub implementation of CaptivePortalWindowProxyDelegate, does
// nothing and used to instantiate CaptivePortalWindowProxy.
class CaptivePortalWindowProxyStubDelegate
......@@ -167,4 +174,53 @@ IN_PROC_BROWSER_TEST_F(CaptivePortalWindowTest, MultipleCalls) {
CheckState(false, 2);
}
class CaptivePortalWindowCtorDtorTest : public LoginManagerTest {
public:
CaptivePortalWindowCtorDtorTest()
: LoginManagerTest(false) {}
virtual ~CaptivePortalWindowCtorDtorTest() {}
virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
LoginManagerTest::SetUpInProcessBrowserTestFixture();
network_portal_detector_ = new NetworkPortalDetectorTestImpl();
NetworkPortalDetector::InitializeForTesting(network_portal_detector_);
NetworkPortalDetector::CaptivePortalState portal_state;
portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL;
portal_state.response_code = 200;
network_portal_detector_->SetDefaultNetworkPathForTesting(
kStubEthernetServicePath);
network_portal_detector_->SetDetectionResultsForTesting(
kStubEthernetServicePath, portal_state);
}
protected:
NetworkPortalDetectorTestImpl* network_portal_detector() {
return network_portal_detector_;
}
private:
NetworkPortalDetectorTestImpl* network_portal_detector_;
DISALLOW_COPY_AND_ASSIGN(CaptivePortalWindowCtorDtorTest);
};
IN_PROC_BROWSER_TEST_F(CaptivePortalWindowCtorDtorTest, PRE_OpenPortalDialog) {
StartupUtils::MarkOobeCompleted();
}
IN_PROC_BROWSER_TEST_F(CaptivePortalWindowCtorDtorTest, OpenPortalDialog) {
network_portal_detector()->NotifyObserversForTesting();
OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait();
LoginDisplayHostImpl* host =
static_cast<LoginDisplayHostImpl*>(LoginDisplayHostImpl::default_host());
ASSERT_TRUE(host);
OobeUI* oobe = host->GetOobeUI();
ASSERT_TRUE(oobe);
ErrorScreenActor* actor = oobe->GetErrorScreenActor();
ASSERT_TRUE(actor);
actor->ShowCaptivePortal();
}
} // namespace chromeos
......@@ -90,12 +90,19 @@ void CaptivePortalWindowProxy::OnWidgetClosing(views::Widget* widget) {
DCHECK(GetState() == STATE_DISPLAYED);
DCHECK(widget == widget_);
widget->RemoveObserver(this);
widget_ = NULL;
DetachFromWidget(widget);
DCHECK(GetState() == STATE_IDLE);
}
void CaptivePortalWindowProxy::OnWidgetDestroying(views::Widget* widget) {
DetachFromWidget(widget);
}
void CaptivePortalWindowProxy::OnWidgetDestroyed(views::Widget* widget) {
DetachFromWidget(widget);
}
void CaptivePortalWindowProxy::InitCaptivePortalView() {
DCHECK(GetState() == STATE_IDLE ||
GetState() == STATE_WAITING_FOR_REDIRECTION);
......@@ -121,4 +128,11 @@ CaptivePortalWindowProxy::State CaptivePortalWindowProxy::GetState() const {
return STATE_UNKNOWN;
}
void CaptivePortalWindowProxy::DetachFromWidget(views::Widget* widget) {
if (!widget_ || widget_ != widget)
return;
widget_->RemoveObserver(this);
widget_ = NULL;
}
} // namespace chromeos
......@@ -63,6 +63,8 @@ class CaptivePortalWindowProxy : public views::WidgetObserver {
// Overridden from views::WidgetObserver:
virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE;
virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE;
private:
friend class CaptivePortalWindowTest;
......@@ -91,6 +93,10 @@ class CaptivePortalWindowProxy : public views::WidgetObserver {
// Returns symbolic state name based on internal state.
State GetState() const;
// When |widget| is not NULL and the same as |widget_| stops to observe
// notifications from |widget_| and resets it.
void DetachFromWidget(views::Widget* widget);
// Not owned by this class.
Delegate* delegate_;
// Not owned by this class.
......
......@@ -429,7 +429,6 @@
'browser/chromeos/input_method/textinput_surroundingtext_browsertest.cc',
'browser/chromeos/input_method/textinput_test_helper.cc',
'browser/chromeos/input_method/textinput_test_helper.h',
'browser/chromeos/login/captive_portal_window_browsertest.cc',
'browser/chromeos/login/eula_browsertest.cc',
'browser/chromeos/login/login_browsertest.cc',
'browser/chromeos/login/login_manager_test.cc',
......@@ -1045,6 +1044,7 @@
'browser/chromeos/input_method/mode_indicator_browsertest.cc',
'browser/chromeos/kiosk_mode/mock_kiosk_mode_settings.cc',
'browser/chromeos/kiosk_mode/mock_kiosk_mode_settings.h',
'browser/chromeos/login/captive_portal_window_browsertest.cc',
'browser/chromeos/login/crash_restore_browsertest.cc',
'browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc',
'browser/chromeos/login/enrollment/mock_enrollment_screen.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment