1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/compiler_specific.h"
6#include "base/logging.h"
7#include "base/macros.h"
8#include "chrome/browser/chromeos/login/login_manager_test.h"
9#include "chrome/browser/chromeos/login/ui/captive_portal_view.h"
10#include "chrome/browser/chromeos/login/ui/captive_portal_window_proxy.h"
11#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
12#include "chrome/browser/chromeos/login/ui/simple_web_view_dialog.h"
13#include "chrome/browser/chromeos/login/ui/webui_login_view.h"
14#include "content/public/browser/interstitial_page.h"
15#include "content/public/browser/interstitial_page_delegate.h"
16#include "ui/views/controls/webview/webview.h"
17
18namespace chromeos {
19
20namespace {
21
22class StubDelegate : public CaptivePortalWindowProxyDelegate {
23 public:
24  StubDelegate() {}
25  virtual ~StubDelegate() {}
26  virtual void OnPortalDetected() OVERRIDE {}
27
28 private:
29  DISALLOW_COPY_AND_ASSIGN(StubDelegate);
30};
31
32class InterstitialPageDelegate : public content::InterstitialPageDelegate {
33 public:
34  explicit InterstitialPageDelegate(content::WebContents* web_contents) {
35    content::InterstitialPage* page = content::InterstitialPage::Create(
36        web_contents, true, GURL("http://foo"), this);
37    page->Show();
38  }
39
40  virtual ~InterstitialPageDelegate() {}
41
42 private:
43  // InterstitialPageDelegate implementation:
44  virtual std::string GetHTMLContents() OVERRIDE { return "HTML Contents"; }
45
46  DISALLOW_COPY_AND_ASSIGN(InterstitialPageDelegate);
47};
48
49}  // namespace
50
51class SimpleWebViewDialogTest : public LoginManagerTest {
52 public:
53  SimpleWebViewDialogTest(): LoginManagerTest(false) {}
54  virtual ~SimpleWebViewDialogTest() {}
55
56  InterstitialPageDelegate* CreateDelegate(CaptivePortalWindowProxy* proxy) {
57    SimpleWebViewDialog* dialog = proxy->captive_portal_view_for_testing();
58    CHECK(dialog) << "CaptivePortalView is not initialized";
59    return new InterstitialPageDelegate(dialog->web_view_->web_contents());
60  }
61
62 private:
63  DISALLOW_COPY_AND_ASSIGN(SimpleWebViewDialogTest);
64};
65
66IN_PROC_BROWSER_TEST_F(SimpleWebViewDialogTest, Interstitial) {
67  content::WebContents* web_contents = LoginDisplayHostImpl::default_host()
68                                           ->GetWebUILoginView()
69                                           ->GetWebContents();
70  StubDelegate delegate;
71  CaptivePortalWindowProxy proxy(&delegate, web_contents);
72  proxy.Show();
73
74  // Delegate creates a page and passes himself to it. Page owns the
75  // delegate and will be destroyed by the end of the test.
76  CreateDelegate(&proxy);
77}
78
79}  // namespace chromeos
80